2017-09-26 13 views
0

私は数ヶ月間この小さなスクリプトを成功させてきました。今日、私は画面が新しいプロンプトで空白に来る、キャッチしているように見えるカントつの出力があります実現:私は、IPアドレスの1に対してnmapのを実行する場合はここでAWK正規表現をキャッチ

[email protected] ~]$ myscan ipsFile 23 

[email protected] ~]$ 

はコード

#!/bin/bash 

sudo nmap -v -Pn -p T:$2 -reason -i $1 | awk ' { 

     if (/syn-ack/) { 
       print "Yes" 
       c++ 
     } 

     else if (/no-response|reset|host-unreach/) { 
       print "No" 
       c++ 
     } 
} 

END { print c} ' 

です

Starting Nmap 5.51 (http://nmap.org) at 2017-09-26 11:44 CDT 
Initiating Parallel DNS resolution of 1 host. at 11:44 
Completed Parallel DNS resolution of 1 host. at 11:44, 0.00s elapsed 
Initiating Connect Scan at 11:44 
Scanning 1.1.1.1 [1 port] 
Completed Connect Scan at 11:44, 0.20s elapsed (1 total ports) 
Nmap scan report for 1.1.1.1 
Host is up, received user-set (0.20s latency). 
PORT STATE SERVICE REASON 
23/tcp filtered telnet host-unreach 

Read data files from: /usr/share/nmap 
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds 

「host-unreach」部分はどのように取得できますか?

答えて

0

は、あなたがのは、これを試してみて、デバッグしてみましょう

#!/bin/bash 

sudo nmap -v -Pn -p T:$2 -reason -i $1 2>&1 | awk ' { 

    if (/syn-ack/) { 
      print "Yes" 
      c++ 
    } 

    else if (/no-response|reset|host-unreach/) { 
      print "No" 
      c++ 
    } 
} 

END { print c} ' 
+0

あなたのスニペットを試してみましたが、同じものが出力されます。 –

+0

実際に、nmap出力から "filtered"という単語をマッチさせようとすると、うまくいきません。 "unreach"の部分だけにマッチさせようとすると動作しません。 –

1

のようにstdoutに配管標準エラー出力を試してみました。これを実行します。

nmap -v -Pn -p T:23 -reason -i ipsFile | awk '{print $0}/syn-ack/{print "Yes";c++}/no-response|reset|host-unreach/{print "No";c++}END {print c}' > out.txt 

ここでの唯一の違いは、awkスクリプトは$ 0印刷していることである(つまり、あなたのnmapの呼び出しの出力)はout.txtを提出します。 unreachの値をgrepしようとします。

私はこれを自分で試しましたが、host-unreachの代わりにnet-unreachが見つかりました。あなたの場合も同じことがあります。