netstatパイプカウントホスト

netstatパイプカウントホスト

Unixパイプの問題:複数行の入力を出力行として処理し、いくつかのパイププロセスを挿入する方法。

echo "111 22222222" | awk '{print $1 " " $2 " " piped_processes_using_2nd_argument}'

いくつかのコンテキスト:netstatは、$current_ipに関連付けられている外部IPアドレスのリストを取得するために解析し、降順でソートします(実際ではないなど)。

$ netstat -plant |grep $current_ip | tr -s ' ' |cut -f5 -d' '|cut -f1 -d':' |sort -n |uniq -c |sort -nr
   7 8.8.8.8
   2 4.4.4.4
   1 186.2.168.190
   1 207.192.128.2

これまでのリバースDNSは

$ host 4.4.4.4 | tr -s " " | rev  | cut -f1 -d " " |rev
alu7750testscr.xyz1.gblx.mgmt.Level3.net.

ここでは、次のようなものを取得したいと思います(たとえば、出力にIPを保持します)。

   7 8.8.8.8 google-public-dns-a.google.com.
   2 4.4.4.4 alu7750testscr.xyz1.gblx.mgmt.Level3.net.
   1 186.2.168.190 ddos-guard.net.
   1 207.192.128.2 www.NexQloud.com.

これらをマージするにはawkしか考えられませんでしたが、慣れていないため、結果は非常に醜いです。

netstat -plant |grep $current_ip | tr -s ' ' |cut -f5 -d' '|cut -f1 -d':' |sort -n |uniq -c |sort -nr  | awk '{ system("echo " $1 " " $2 " $(host "$2" | tr -s \" \" | rev  | cut -f1 -d \" \" |rev)") }' | sort -nr -k1

私は時計から--interval = 1を呼び出すのに十分エレガントで速いものが欲しかった:-)

ベストアンサー1

あなたが| それを好きですか?

私が持ってきた最高のもの

current_ip=$(ifconfig eth0 | awk '$1 == "inet" { split($2,A,":") ; print A[2] ; } ')

netstat -plant | grep $current_ip | awk '{split($5,A,":") ; howmany[A[1]]++ ; }
END { for (h in howmany) printf "%d %s \n",howmany[h],h ;} '|
 sort -nr |
while read hm ho
do
  name=$(host $ho|awk '{print $NF}')
  echo $hm $ho $name
done

どこ

  • 最後の文字がパイプの場合、新しい行をエスケープする必要はありません。
  • {split($5,A,":") ; howmany[A[1]]++ ; }各ホストと数を覚えてください(ポート番号を削除した後)。
  • END { for (h in howmany) printf "%d %s \n",howmany[h],h ;}netstatの終わりに結果を印刷します。
  • name=$(host $ho|awk '{print $NF}')IPからホスト名を取得する
  • use ${name%%.}結末を取り除く.
  • 現在のIPを追加

私の解決策が良いかどうかはわかりません。パイプが12本ではなく4本だけです。

おすすめ記事