首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从nmap扫描输出文件中只使用grep端口?

如何从nmap扫描输出文件中只使用grep端口?
EN

Unix & Linux用户
提问于 2022-10-21 06:29:25
回答 3查看 733关注 0票数 0
代码语言:javascript
复制
➜ cat nmap/ports.nmap
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-21 11:30 IST
Warning: 10.10.10.100 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.100
Host is up (0.26s latency).
Not shown: 65410 closed tcp ports (reset), 111 filtered tcp ports (no-response)
PORT      STATE SERVICE
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49155/tcp open  unknown
49157/tcp open  unknown
49158/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 17.57 seconds

搜索之后,我使用以下命令。

代码语言:javascript
复制
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sed -z 's/\n/,/g;s/,$/\n/'

输出:

代码语言:javascript
复制
88,135,139,389,445,464,593,636,49152,49153,49154,49155,49157,49158

还有比这更简单的命令吗?谁能帮帮我。

EN

回答 3

Unix & Linux用户

发布于 2022-10-21 06:54:35

我可能会使用来自nmap的XML输出,这使得提取想要的信息更容易。

在这里,我使用xmlstarlet获取扫描结果中每个开放端口的端口号,然后使用paste将端口号的行格式化为一行,其中带有逗号分隔的字段:

代码语言:javascript
复制
$ nmap -oX - localhost | xmlstarlet sel -t -v '//port[state/@state="open"]/@portid' -nl | paste -s -d, -
22,25,111,2049,7000,7001

如果您想首先保存结果,可以分两步完成:

代码语言:javascript
复制
$ nmap -oX nmap.xml localhost
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-21 08:53 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 994 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
111/tcp  open  rpcbind
2049/tcp open  nfs
7000/tcp open  afs3-fileserver
7001/tcp open  afs3-callback

Nmap done: 1 IP address (1 host up) scanned in 6.13 seconds
代码语言:javascript
复制
$ xmlstarlet sel -t -v '//port[state/@state="open"]/@portid' -nl nmap.xml | paste -s -d, -
22,25,111,2049,7000,7001

XPath查询//port[state/@state="open"]/@portid定位XML文档中任何具有带有值openstate属性的state子节点的port节点。对于每个这样的port节点,提取portid属性。

如果您只想拥有您已经拥有的内容的一个变体,您可以将大部分解析合并到一个awk调用中:

代码语言:javascript
复制
awk '$2 == "open" { sub("/.*","",$1); print $1 }' nmap.out | paste -s -d, -

这将检测第二个字段中的单词open,并在第一个字段中的/之前提取和打印所有内容。与以前一样,用paste创建逗号分隔的列表。

票数 1
EN

Unix & Linux用户

发布于 2022-10-24 23:42:42

代码语言:javascript
复制
cat nmap/ports.nmap | awk -F/ '/open/ {b=b","$1} END {print substr(b,2)}'

就用awk?

88,135,139,389,445,464,593,636,49152,49153,49154,49155,49157,49158

票数 1
EN

Unix & Linux用户

发布于 2023-03-02 18:59:46

原始命令:

代码语言:javascript
复制
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sed -z 's/\n/,/g;s/,$/\n/'

排序和删除重复端口命令:

代码语言:javascript
复制
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sort | uniq | sed -z 's/\n/,/g;s/,$/\n/'
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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