
簡単な質問ですので、あらかじめお詫び申し上げます。
そこで、クラス 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'