web-dev-qa-db-ja.com

netstatからのgrep正規表現ポート範囲

Netstatの出力で、32000-64000間のポート範囲を抽出したいと思います。 egrep "^[3,4,5,6]"を試しましたが、32000から始める必要があります。 awkまたはある種のスクリプトを使用する必要がありますか?

Linux# netstat -nau
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 10.0.0.20:55238      0.0.0.0:*
udp        0      0 10.0.0.20:55240      0.0.0.0:*
udp        0      0 10.0.0.20:31242      0.0.0.0:*
udp        0      0 10.0.0.20:55244      0.0.0.0:*
udp        0      0 10.0.0.20:32246      0.0.0.0:*
udp        0      0 10.0.0.20:55248      0.0.0.0:*
udp        0      0 10.0.0.20:12250      0.0.0.0:*
udp        0      0 10.0.0.20:19252      0.0.0.0:*
3
Satish

awk解決策:

netstat -nau | awk -F'[[:space:]]+|:' 'NR>2 && $5>=32000 && $5<=64000'

あなたの場合の出力は次のようになります。

udp        0      0 10.0.0.20:55238      0.0.0.0:*
udp        0      0 10.0.0.20:55240      0.0.0.0:*
udp        0      0 10.0.0.20:55244      0.0.0.0:*
udp        0      0 10.0.0.20:32246      0.0.0.0:*
udp        0      0 10.0.0.20:55248      0.0.0.0:*

  • -F'[[:space:]]+|:'-フィールドセパレータ

  • NR>2 && $5>=32000 && $5<=64000-ポート番号が必要な範囲内にあるかどうかを確認します


代替​​egrep解決策:

netstat -nau | egrep ':(3[2-9]|[45][0-9])[0-9]{3}|6[0-3][0-9]{3}|64000'
  • (3[2-9]|[45][0-9])[0-9]{3}-32000から59999までの番号をカバーします

  • 6[0-3][0-9]{3}|64000-60000から64000までの番号をカバーします

1
RomanPerekhrest

netstatは非推奨になっているので、その優れた後継であるssを試してみませんか。

ss -nau '( sport >= 32000 and sport <= 64000 )'
2
steve