AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 684046
Accepted
Bryon
Bryon
Asked: 2021-12-28 02:26:08 +0800 CST2021-12-28 02:26:08 +0800 CST 2021-12-28 02:26:08 +0800 CST

用于提取命令输出的最佳工具

  • 772

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

我非常有信心我可以使用 awk 来处理表数据 - 但我不能从输出中提取它......可以使用哪些工具组合来做到这一点?

$ 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:

$ 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)

我正在寻找的输出如下(标题不是必需的):

PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite

和

PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin
bash text-processing
  • 3 3 个回答
  • 190 Views

3 个回答

  • Voted
  1. terdon
    2021-12-28T04:22:07+08:002021-12-28T04:22:07+08:00

    使用您显示的特定输出,我们可以简单地选择所有以数字或大写字母开头的行P(对于标题):

    sudo nmap ... | grep -E '^([0-9]|P)'
    

    我创建了两个文本文件,nmap1并nmap2使用您问题的两个输出进行测试,并获得:

    $ 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如果您愿意,也可以这样做:

    sudo nmap ... | awk '/^([0-9]|P)/' 
    
    • 2
  2. Best Answer
    they
    2021-12-28T04:56:24+08:002021-12-28T04:56:24+08:00

    如果给定选项,该nmap实用程序允许输出易于解析的 XML -oX,这意味着您可以根据需要重新创建表,或从中提取所需的任何信息。

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

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

    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
    

    示例输出:

    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
    

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

    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
    

    示例输出:

    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
  3. Ed Morton
    2021-12-28T08:40:27+08:002021-12-28T08:40:27+08:00
    $ 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

相关问题

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

  • 如何更改字符大小写(从小到大,反之亦然)?同时[重复]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve