首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取命令输出的最佳工具

提取命令输出的最佳工具
EN

Unix & Linux用户
提问于 2021-12-27 10:26:08
回答 3查看 293关注 0票数 0

我想以编程方式处理nmap输出的结果,但无法解决如何获取输出并仅提取下面两个输出中显示的协议或端口表的详细信息。

我很有信心我可以使用awk来处理表数据--但我不能从输出中提取.什么组合的工具可以用来做这件事?

代码语言:javascript
复制
$ sudo nmap --open -sO 10.100.0.14
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:15 AEDT
Warning: 10.100.0.14 giving up on port because retransmission cap hit (10).
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00030s latency).
Not shown: 250 filtered protocols, 1 closed protocol
PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)

产出2:

代码语言:javascript
复制
$ sudo nmap -sS 10.100.0.14 -p-
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:30 AEDT
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00024s latency).
Not shown: 65533 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)

我正在寻找的输出如下(标题并不重要):

代码语言:javascript
复制
PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite

代码语言:javascript
复制
PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2021-12-27 12:56:24

nmap实用程序允许在给定-oX选项的情况下轻松地输出可解析的D1,这意味着您可以根据需要重新创建表,或者从表中提取所需的任何信息。

下面的管道使用xmlstarlet从生成的XML文档中提取信息,并重新创建在普通nmap输出中找到的表,并为给定的“状态”插入一个额外的列以“原因”。

nmap的输出由xmlstarlet解析,它为列分隔符插入#字符(我们不希望它是输出的一部分),column用于创建最终对齐表。

代码语言:javascript
复制
sudo nmap -oX - --open -sO localhost |
xmlstarlet sel -t -m /nmaprun/host/ports/port \
    -v @portid -o '#' \
    -v state/@state -o '#' \
    -v state/@reason -o '#' \
    -v service/@name -nl |
column -s '#' -t

示例输出:

代码语言:javascript
复制
1    open           echo-reply      icmp
4    open|filtered  no-response     ipv4
6    open           proto-response  tcp
17   open           port-unreach    udp
41   open|filtered  no-response     ipv6
50   open|filtered  no-response     esp
51   open|filtered  no-response     ah
97   open|filtered  no-response     etherip
112  open|filtered  no-response     vrrp
137  open|filtered  no-response     mpls-in-ip
240  open|filtered  no-response
255  open|filtered  no-response

同样,但只提取“过滤”响应:

代码语言:javascript
复制
sudo nmap -oX - --open -sO localhost |
xmlstarlet sel -t -m '/nmaprun/host/ports/port[contains(state/@state,"filtered")]'  \
    -v @portid -o '#' \
    -v state/@state -o '#' \
    -v state/@reason -o '#' \
    -v service/@name -nl |
column -s '#' -t

示例输出:

代码语言:javascript
复制
4    open|filtered  no-response  ipv4
41   open|filtered  no-response  ipv6
50   open|filtered  no-response  esp
51   open|filtered  no-response  ah
97   open|filtered  no-response  etherip
112  open|filtered  no-response  vrrp
137  open|filtered  no-response  mpls-in-ip
240  open|filtered  no-response
255  open|filtered  no-response
票数 2
EN

Unix & Linux用户

发布于 2021-12-27 12:22:07

对于您显示的特定输出,我们只需选择以数字开头或以大写P开头的所有行(对于标头):

代码语言:javascript
复制
sudo nmap ... | grep -E '^([0-9]|P)'

我创建了两个文本文件,nmap1nmap2,其中包含要测试的问题中的两个输出,并获得:

代码语言:javascript
复制
$ grep -E '^([0-9]|P)' nmap1 
PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite

$ grep -E '^([0-9]|P)' nmap2
PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin

如果您愿意的话,也可以在awk中这样做:

代码语言:javascript
复制
sudo nmap ... | awk '/^([0-9]|P)/' 
票数 2
EN

Unix & Linux用户

发布于 2021-12-27 16:40:27

代码语言:javascript
复制
$ awk '/^(PROTOCOL|PORT)/{f=1} /^MAC/{f=0} f' file
PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite

$ awk '/^(PROTOCOL|PORT)/{f=1} /^MAC/{f=0} f' file
PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/684046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档