➜ 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搜索之后,我使用以下命令。
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sed -z 's/\n/,/g;s/,$/\n/'输出:
88,135,139,389,445,464,593,636,49152,49153,49154,49155,49157,49158还有比这更简单的命令吗?谁能帮帮我。
发布于 2022-10-21 06:54:35
我可能会使用来自nmap的XML输出,这使得提取想要的信息更容易。
在这里,我使用xmlstarlet获取扫描结果中每个开放端口的端口号,然后使用paste将端口号的行格式化为一行,其中带有逗号分隔的字段:
$ nmap -oX - localhost | xmlstarlet sel -t -v '//port[state/@state="open"]/@portid' -nl | paste -s -d, -
22,25,111,2049,7000,7001如果您想首先保存结果,可以分两步完成:
$ 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$ xmlstarlet sel -t -v '//port[state/@state="open"]/@portid' -nl nmap.xml | paste -s -d, -
22,25,111,2049,7000,7001XPath查询//port[state/@state="open"]/@portid定位XML文档中任何具有带有值open的state属性的state子节点的port节点。对于每个这样的port节点,提取portid属性。
如果您只想拥有您已经拥有的内容的一个变体,您可以将大部分解析合并到一个awk调用中:
awk '$2 == "open" { sub("/.*","",$1); print $1 }' nmap.out | paste -s -d, -这将检测第二个字段中的单词open,并在第一个字段中的/之前提取和打印所有内容。与以前一样,用paste创建逗号分隔的列表。
发布于 2022-10-24 23:42:42
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
发布于 2023-03-02 18:59:46
原始命令:
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sed -z 's/\n/,/g;s/,$/\n/'排序和删除重复端口命令:
cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sort | uniq | sed -z 's/\n/,/g;s/,$/\n/'https://unix.stackexchange.com/questions/721847
复制相似问题