netstat
接続されているIPに関する情報を収集するために使用します。私は次の形式を持っています:
netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sor t | uniq -c | sort -nr
5 81.133.113.200
4 80.229.142.126
2 94.136.36.29
2 92.19.231.69
2 85.159.56.230
2 83.70.246.152
2 81.131.118.236
2 185.106.92.42
1 92.19.232.88
1 86.47.113.169
1 86.168.206.46
1 79.77.175.210
1 46.19.141.238
1 206.221.184.2
1 192.198.95.6
私が達成したいのは、IPをホスト名と一致させることです。
したがって、どこかに保存し、name=$(IPADDRESSNAME)
名前がIPアドレス81.133.113.200と一致する場合
次の形式で印刷したいと思います。
5 81.133.113.200 - IPADDRESSNAME
4 80.229.142.126
2 94.136.36.29
2 92.19.231.69
これを行うために列を読みましたが、2つの列を住所に一致するものと組み合わせる方法がわかりません。
Bashスクリプトを使用して実行しているので、ここにホスト名を保存します。
私は次のことを考えています:
string=$(netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr)
if [[ $string == "81.133.113.200" ]]
then
echo "Its XXXXXXXX HOST";
fi
これはうまくいきませんが、ロジックは後ろにありますが、インラインです。
ベストアンサー1
次のテストバージョンをお試しください。
netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sor t | uniq -c | sort -nr |\
while read index ipaddress ; do \
printf "%s " "${index}" ;\
getent hosts "${ipaddress}" ;\
if [ $? -eq 2 ]; then \
printf "%s\n" "${ipaddress}" ;\
fi ;\
done
標準を使用しています得るお問い合わせ所有者指定されたIPアドレスに基づいてホスト名を取得するデータベース。
テストを受ける:
5 81.133.113.200 host81-133-113-200.in-addr.btopenworld.com
4 80.229.142.126 garnerhome.plus.com
2 94.136.36.29 mail.e-trackit.co.uk
2 92.19.231.69 host-92-19-231-69.static.as13285.net
2 85.159.56.230
2 83.70.246.152 83-70-246-152-dynamic.b-ras1.prp.dublin.eircom.net
2 81.131.118.236 host81-131-118-236.range81-131.btcentralplus.com
2 185.106.92.42
1 92.19.232.88 host-92-19-232-88.static.as13285.net
...