Bash

如何使用 nmap -p 和 cat ‘file’?

  • January 4, 2022

我正在嘗試創建一個簡單的 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"

另請參閱:為什麼使用 shell 循環處理文本被認為是不好的做法?

您的問題是循環從$(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

引用自:https://unix.stackexchange.com/questions/685037