nmap -pを使用して、複数のIPおよびポートで「特定の」ポートスキャンを実行できる単純なbashスクリプトを作成しようとしています。私が経験している問題は、.txtファイルからポート番号とIPを読み取るときにテキストファイルにポートとIPの間に必要なスペースがありますが、スクリプトが失敗することです。私のコードは次のとおりです。私はこれを簡単にしようとしています。私が考えることができる唯一のことは、配列を作成することです。しかし、それでもnmap -pポート形式をスキャンすることは同じ問題を抱えていると思います。どんな提案がありますか?
for i in $(cat 'filepathway')
do
nmap -p $i
done
次のようにします。nmap -p 'port#'
代わりに: nmap -p 'Port#' 'IP#'
.txtは次のようになります。 (値はランダムです)
23001 172.55.545.254
23002 172.55.545.254
...
答え1
for i in $(cat file); ...
ファイルは一行ずつ読み込まず、単語単位で読み込まれます。
あなたはそれを使用することができますwhile read ...
:
while read port ip; do
nmap -p "$port" "$ip"
done < "file"
答え2
問題は、ループが分割拡張から各単語を個別に読み取ることです$(cat filepathway)
。ポート番号、IPアドレス、他のポート番号などにすることができます。一般に、ループ拡張コマンドの置き換えは、メモリが非効率的であり、発生したエラーの種類やその他のエラーが発生しやすく、コマンドの結果全体がメモリに読み込まれるまでループの実行が開始されないために避けるべきです。
ポート番号でない場合は、nmap
次のコマンドを使用してIPアドレスのリストを読み取ることができます-iL
。
nmap -iL addr.list
...または特定の範囲のポートをカバーする場合
nmap -p 23000-23100 -iL addr.list
これでできることは、xargs
次のように使用することです。
xargs -L 1 nmap -p <addr.list
その後、各行を読み取り、指定されたコマンドを実行し、nmap -p
ポート番号とIPアドレスを実行します。
最も一般的な実装では、数値オプション引数を持つオプションを使用して多数の並列呼び出しを実行xargs
できます(システムマニュアルを参照)。-P
xargs
それでもループを使用するには、各行からポート番号とIPアドレスを個別に読み取る必要があります(例:pLumoが表示されます。):
while read -r port ip; do
nmap -p "$port" "$ip"
done <addr.list