首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Nmap结果BASH

解析Nmap结果BASH
EN

Stack Overflow用户
提问于 2015-02-26 10:05:46
回答 3查看 4.1K关注 0票数 1

我在写巴什剧本。在命令行中,我可以调用nmap,并希望提取特定端口的ip。

代码语言:javascript
复制
$ nmap [ip]/24

Starting Nmap 6.47 ( http://nmap.org ) at 2015-02-26 01:59 PST
Nmap scan report for 192.168.56.1
Host is up (0.0012s latency).
Not shown: 500 closed ports, 499 filtered ports
PORT     STATE SERVICE
3689/tcp open  rendezvous

Nmap scan report for 192.168.56.101
Host is up (0.00042s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh

我要21端口的IP地址。在本例中,为192.168.56.101。如何从此返回提取该值并将其保存到变量中?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-26 10:18:53

您可以使用xml输出并使用xmllint解析输出。

代码语言:javascript
复制
nmap -p 21 -oX - "$IP"/24 | xmllint --xpath '//port[@portid="21"]/state[@state="open"]/../../../address/@addr' -
票数 5
EN

Stack Overflow用户

发布于 2015-02-26 12:44:00

Nmap的正常输出是人类可读的,但可以在不同版本之间进行更改。它不是设计成机器可解析的。Nmap有2种机器可解析的输出格式,更适合.首先,XML输出 (使用-oX选项)是最完整的格式,包含与正常输出相同或更多的信息。您可以使用xmlstarletxmllint解析这一点。

简单提取基本端口扫描信息的另一个流行选项是官方反对的可扩展输出格式 (-oG)。这种格式缺少了许多诸如NSE脚本输出和traceroute信息之类的“最近”功能,但是对于端口扫描数据来说,它是稳定的。下面是如何使用这种格式的方法:

代码语言:javascript
复制
nmap $target -oG - | awk '/ 21\/open\/tcp/{print $2}'
票数 1
EN

Stack Overflow用户

发布于 2015-02-26 10:18:23

在输出中的每一行上循环,然后查看字符串"Nmap scan report for <your ip address>",然后继续遍历输出的每一行,直到您找到行"21/tcp open ftp"或找到一个空行或输出的末尾。

循环可以用Bash内置命令readwhile来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28739456

复制
相关文章

相似问题

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