Bash
如何使用 nmap -p 和 cat ‘file’?
我正在嘗試創建一個簡單的 bash 腳本,該腳本可以使用 nmap -p 在多個 IP 和埠上執行“特定”埠掃描。我遇到的問題是,當它從 .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
…
for i in $(cat file); ...
不會逐行讀取文件,而是逐字讀取文件。
您可以使用
while read ...
:while read port ip; do nmap -p "$port" "$ip" done < "file"
您的問題是循環從
$(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