繁体   English   中英

AWK捕捉正则表达式

[英]AWK catching a regular expression

我已经使用这个小脚本几个月了,并取得了成功。 今天,我意识到似乎无法捕捉到一个输出,屏幕空白,并出现新的提示:

user@computer ~]$ myscan ipsFile 23

user@computer ~]$

这是代码

#!/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} '

如果我对其中一个IP运行nmap,则返回

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

如何捕捉“主机未到达”部分?

让我们尝试调试一下。 执行此:

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中。 尝试与grep你unreach值。

我自己尝试了一下,发现不是host-unreach而是net-unreach 在您的情况下可能是一样的。

您是否尝试过将stderr管道连接到stdout

#!/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} '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM