forループを使用せずに複数の行をパラメータに渡すにはどうすればよいですか?

forループを使用せずに複数の行をパラメータに渡すにはどうすればよいですか?

スキャンを要求された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ファイルで実行され(必須ではなくcatgrepフィルタ処理された出力を渡し、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つのアドレスのみを使用して機能します。

おすすめ記事