2014-02-06 219 views
0

我寫的是這樣的:搜索再次搜索範圍

OUT=$(nmap -p "$port" --script=http-headers.nse "$ip" 

例如輸出爲:

|http-headers: 
| Server: Apache 
| Vary: Accept-Encoding 
| Content-Type: text/html; charset=utf-8 
| Date: Thu, 06 Feb 2014 07:31:33 GMT 
| Age: 25 
| Connection: close 

但我輸出的長度是可變的。 所以我想要在我的輸出中的行之間進行搜索(最好使用sedawk) 並檢查一個條件。例如,如果它看到Apache從3線至8號線則呼應right

編輯:

我的腳本:

#!/bin/bash 

echo "Reading data - headers - both" 

if [ $# -ne 3 ]; then 
    echo "Usage: ./nmap <port-range> <ip-list> <d || h || b>" 
    exit 1 
fi 

if [ $3 == h ]; then 
    while read -r -u3 port; do 
    while read -r -u4 ip; do 


     echo -n "$ip $port: " 
     OUT=$(nmap -p "$port" --script=http-headers.nse "$ip" | 
     tail -n 13 | 
     awk -F: '{print $2; exit}') in other lines 
     [[ $OUT == *Apache* ]] && echo right || echo wrong 
    done 4< "$2" 
    done 3< "$1" 

elif [ $3 == d ]; then 
    echo data 
elif [ $3 == b ]; then 
    echo both 
fi 

我希望把我正確的結果在文件...例如:

cat right.txt 
ip1 port1 
ip2 port2 

cat wrong.txt 
ip1 port1 
ip2 port2 

回答

1

這裏是修復

#!/bin/bash 

echo "Reading data - headers - both" 

if [ $# -ne 3 ]; then 
    echo "Usage: ./nmap <port-range> <ip-list> <d || h || b>" 
    exit 1 
fi 

headers() { 
    join -a1 -a2 -j 2 $2 $1 |while read ip port 
    do 
     echo -n "$ip $port:" 
     OUT=$(nmap -p "$port" --script=http-headers.nse "$ip" | tac | awk -F: 'NR<=13&&/Apache/{print $2; exit}') 
     if [[ "$OUT" == *Apache* ]]; then 
      echo $ip $port >> right.txt 
     else 
      echo $ip $port >> wrong.txt 
     fi 
    done 
} 

case $3 in 
    "h") headers ;; 
    "d") echo data;; 
    "b") echo both;; 
    "*") echo "wrong input" 
     exit;; 
esac 
+0

謝謝。當運行腳本./nmap2.sh端口ip h時,它顯示我這樣的:./nmap2.sh端口ip h 讀取數據 - 頭文件 - 都是 連接:缺少操作數 嘗試'join --help'以獲取更多信息。 – MLSC

+0

您是否在運行腳本的同一文件夾中有名爲port和ip的文件? – BMW

+0

是的我的朋友...他們都在同一個文件夾 – MLSC

1

您可以使用此AWK:

awk 'NR>=3 && NR<=8 && /Apache/{print "right"}' 

UPDATE:

您可以通過修改代碼:

if [ $3 == 'h' ]; then 
    while read -r -u3 port; do 
     while read -r -u4 ip; do  
     out="$ip $port" 
     echo -n "$out: " 
     nmap -p "$port" --script=http-headers.nse "$ip" | 
     tail -n 13 | grep -q "Apaches" && echo "$out">>right.txt || echo "$out">>wrong.txt 
     done 4< "$2" 
    done 3< "$1" 

elif [ $3 == d ]; then 
    echo data 
elif [ $3 == b ]; then 
    echo both 
fi 
+0

我可以把複雜的命令在{}而不是打印「權「? – MLSC

+0

@anubhava例如,如果我的條件是正確的,我怎麼能在文件中回顯結果: MLSC

+0

這是awk,就像一個編程語言。您可以在'{和}'中添加儘可能多的複雜功能。將輸出重定向到一個文件:'awk'NR> = 3 && NR <= 8 &&/Apache/{print「right」> output.txt}'但我沒有明白'我的情況是對的如:'最好編輯你的問題並澄清。 – anubhava