簡単な質問なので事前にお詫び申し上げます。
そのため、IPですべてのメールサーバーを識別するためにクラスCを検索してみました。ほとんどの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
明確ではありません。レポートのみを含める必要がありますか、開いている文字列のみを含める必要がありますか?その場合は、以下を使用してください
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
--open
後処理にgrepを使用する代わりに、Nmapにオプションを渡してみてください。これにより、閉じたポートまたはフィルタリングされたポートが非表示になります。-oG
または、-oA
オプションを使用して「grepable」結果を出力することもできます。以下は、あなたが探しているものの例です。
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
次の2つの呼び出しを実行するにはパイプが必要ですgrep
。
nmap ... | grep report | grep open
またはmarkersを使用しているので、awk
情報を提供するだけです。
nmap ... | awk '/report/ && /open/'
そしてsed
:
nmap ... | sed '/report/!d;/open/!d'