Nmap 出力から数行を Grep する

Nmap 出力から数行を Grep する

簡単な質問ですので、あらかじめお詫び申し上げます。

そこで、クラス C をスキャンして、すべてのメール サーバーを IP で識別しようとしています。IP の大部分はメール サーバーではありません。メール サーバーであるものを除外しようとしています。

以下のことを試しましたが、期待した結果が得られませんでした。

nmap -p 25 192.168.15.1-254 | grep report && grep open 

そして

nmap -p 192.168.15.1-254 (grep report | grep open)

使用すべき別のユーティリティはありますか? それとも構文に問題があるのでしょうか?

答え1

よく分かりませんが、report または open のみを含む文字列が必要ですか? その場合は、次を使用します: grep:

nmap | grep -E "report|open"

sed:

nmap | sed '/report\|open/!d'

報告して一緒に開く場合

grep:

nmap | grep report | grep open

sed:

nmap | sed '/report.*open\|open.*report/!d'

答え2

grep で後処理する代わりに、Nmap に オプションを渡してみてください。これにより、閉じられたポートやフィルタリングされたポートがすべて非表示になります。またはオプション--openを使用して、「grep 可能な」結果を出力することもできます。以下は、あなたが探しているものと同じことを実行する例です。-oG-oA

nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24

結果はsmtp-servers-20120607.nmap、、smtp-servers-20120607.gnmapおよびになりますsmtp-servers-20120607.xml。オープン SMTP サーバーの IP アドレスは次のように取得できます。

awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap

これをすべて 1 つのパイプラインにまとめる必要がある場合は、次のようにします。

nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'

答え3

両方の呼び出しにパイプが必要ですgrep:

nmap ... | grep report | grep open

または、 でタグ付けされているのでawk、参考までに:

nmap ... | awk '/report/ && /open/'

そしてsed

nmap ... | sed '/report/!d;/open/!d'

関連情報