サーバーのポート5222に接続されたユニークなクライアントの数を知りたいとしましょう。
これより良い、より速く、より強い方法を見つけることができますか?
netstat -nt | grep ':5222.*ESTABLISHED' | awk '{ print $5 }' \
| grep -Po '[0-9]{1,3}(\.[0-9]{1,3}){3}' | uniq | wc -l
私はこれがインターネットアドレスに対する過度に単純な正規表現であることを知っていますが、netstatはおそらく有効なアドレスだけを出力するので、正しい形式のアドレスを確認する必要はないようです。
誰でも来ることができますかnetstat -nt | awk { awesomeness }
?
おそらく一つnetstat -nt | awk { simplicity }| uniq | wc -l
?
答え1
Linuxを使用していてss
インストールできる場合:
ss -o state established '( dport = :5222 )'|awk -F"[\t :]+" 'NR!=1{ ip[$5]+=1 } END{ for (i in ip){n++};print n }'
奇妙な説明が欲しいなら教えてください。
答え2
現在、特定のポートに接続されているすべての一意のIPアドレスを一覧表示します。
netstat -ntu | egrep ':80|:443' | grep -v LISTEN | awk '{print $5}' | cut -d\t -f5 | grep -Po '[0-9]{1,3}(\.[0-9]{1,3}){3}' | sort | uniq -c | sort -rn | grep -v 127.0.0.1
答え3
正しいフィールド区切り記号を設定してから、awkの組み込み正規表現一致機能を使用してgrepを削除してください。これはuniqに出力をパイプするバージョンです。 IMO、uniqをいくつかのawkコードで完全に置き換える必要はありません。それほど単純ではなく、unix-yが減るからです。
netstat -nt | gawk --re-interval -F':|[ ]+' '$7==5222 && $8=="ESTABLISHED" && $6 ~ /[0-9]{1,3}(\.[0-9]{1,3}){3}/{print $6}' | uniq
しかし、もはや複雑にならず、まだ一行で大丈夫に見えます。
netstat -nt | gawk --re-interval -F':|[ ]+' '$7==5222 && $8=="ESTABLISHED" && $6 ~ /[0-9]{1,3}(\.[0-9]{1,3}){3}/{a[$6]} END{for (i in a) print i}'
答え4
この試み:
netstat -nt | awk '/:5222.*ESTABLISHED/ { split ($5, a, ":"); print a[1] }' | uniq | wc -l
もちろん、awkでuniqとwcを実行することも可能ですが、より冗長です。