スキャンを要求されたIPのリストを含むnmap出力を処理する次のコマンドがあります。
cat ping-sweep.txt | grep "report for" | cut -d " " -f5
これにより、Webサーバーを検索したいIPのリスト(1行に1つ)のみが提供されます。
次のコマンドを使用して単一のホストをスキャンできます。
nmap -v -p 80,443,8080 10.1.1.1
リスト内のすべてのIPに対してこのスキャンを実行したいのですが、nmapで接続すると機能しないようです。これを行うにはbashスクリプトを作成する必要がありますかforeach
、それとも単純なものがありませんか?
答え1
nmap
スキャンするすべてのアドレスを次のパラメータで指定できます。
nmap -v -p 80,443,8080 $(grep "report for" ping-sweep.txt | cut -d" " -f5)
これはgrep
ファイルで実行され(必須ではなくcat
)grep
フィルタ処理された出力を渡し、cut
その結果はnmap
コマンドラインを作成するために使用されます。これは…コマンドの置き換え。
シェルにはループがあり、さまざまな方法でループを使用できます。
grep "report for" ping-sweep.txt | cut -d" " -f5 | while read ip; do
nmap -v -p 80,443,8080 "${ip}"
done
または
for ip in $(grep "report for" ping-sweep.txt | cut -d" " -f5); do
nmap -v -p 80,443,8080 "${ip}"
done
nmap
両方とも一度に1つのアドレスのみを使用して機能します。
答え2
最初のステップは、Nmapを設計された方法で使用することです。 Nmapは各ポートスキャンの前にホストスキャン(「pingスキャン」)を実行するため、次の簡単なコマンドを使用して2つのステップを同時に実行できます。
nmap -p 80,443,8080 [TARGETS]
ポートスキャンとは別にホストスキャンを実行する必要がある場合は、Nmapの強力な機械可読出力オプションを使用してください。XMLまたはグレブ出力。以前のバージョンのNmapの場合、最も簡単な方法はホスト検索を実行し、次のようにGrapable出力を保存することです。
nmap -sn [TARGETS] -oG ping-sweep.gnmap
その後、awkを使用してIPアドレスを簡単に抽出できます。
awk '/Status: Up/{print $2}' ping-sweep.gnmap > targets.txt
Nmapに直接インポートします。
nmap -p 80,443,8080 -iL targets.txt
または、Nmap 7.00以降では、保存されたXML出力形式を使用できます-oX ping-sweep.xml
。ターゲット-xmlNSEスクリプト:
nmap -p 80,443,8080 --script targets-xml --script-args newtargets,iX=ping-sweep.xml
これらのオプションのいずれかを使用して、ホスト検索の検索が十分に新しい場合は、ポート-Pn
検索のホスト検索ステップをスキップするオプションを追加できます。これにより、同じホストがまだ実行されている可能性があるため、スキャン速度がわずかに節約されます。
あなたは何ですか本当にしてはいけないことです。ループに関連するソリューションであるか、xargs
最終的に各ターゲットに対して別々のNmapインスタンスを起動します。これは、各インスタンスがネットワーク容量を監視するためにデータファイルをロードし、タイムアウトのあるプローブを送信することを繰り返す必要があり、個々のインスタンスが協力するのではなくネットワークリソースを配置して互いに競合するため、無駄で不要です。また、個々の出力を再結合する必要があります。
答え3
xargs
最も一般的には、次のように各行をコマンドライン引数としてコマンドに渡すことができます。
cat ping-sweep.txt | grep "report for" | cut -d " " -f5 | xargs -I'{}' nmap -v -p 80,443,8080 '{}'