web-dev-qa-db-ja.com

nmapを使用して、特定の範囲内のどのIPにポート80があるかを判別するにはどうすればよいですか?

私はbashスクリプトを初めて使用し、これを機能させようとしています。

ポート80が開いているデバイスを見つけるためにIP範囲をスキャンしています...次のようになっている必要があると思います。

#!/bin/bash
echo -----------------------------------
for ip in 192.168.0.{1,.255}; do
nmap -p80 192.168.0.1
      if #open; then
            echo "{ip} has the port 80 open"
      else
            #do nothing
fi
done
echo -----------------------------------
exit 0

また、次のような結果を見たいだけです。

-----------------------------------
192.168.0.1 has the port 80 open
192.168.0.10 has the port 80 open
192.168.0.13 has the port 80 open
192.168.0.15 has the port 80 open
-----------------------------------

(したがって、エラーやnmapの通常の出力はありません。)

誰かがこれを手伝ってくれる?

20
bananah

nmapにはNice出力パラメーター-oGgrepable output)が付属しており、解析がより簡単になります。また、スキャンするすべてのIPアドレスを繰り返す必要はありません。 nmapはネットマスクを認識します。

あなたの例は次のように書くことができます:

nmap -p80 192.168.0.0/24 -oG - | grep 80/open

-oGgrepable outputを有効にし、-は出力先のファイル(この場合はstdout)を指定します。パイプ記号は、nmap(stdout)の出力をgrepにリダイレクトします。この場合、80/openを含む行のみが返されます。

37
Manuel Faux

これを試して

nmap --open -p80 192.168.0.*

--openは、ポート80が開いているホストのみを一覧表示します。このようにして、フィルタリングはすでにnmap自体によって行われているため、シェルスクリプトをチェックインする必要がなくなります。

https://nmap.org/book/man-briefoptions.html

16
Mohamed