如何从Nmap扫描结果提取开放端口号并去除末尾冗余字符
解决Nmap扫描开放端口输出冗余逗号和%符号的问题
问题描述
扫描单个IP,仅提取开放端口号并以逗号分隔的单行形式输出。现有代码可实现核心功能,但输出末尾会多出逗号和%符号,需要去除冗余内容,得到无多余字符的端口号列表。
现有代码
sudo nmap -vv -sS 10.129.208.16 -oG - | awk -v OFS=':' ' /open/ { for (i=4;i<=NF;i++) { split($i,a,"/"); if (a[2]=="open") {printf a[1]","} } }'
现有输出
21,22,53,80,139,443,445,%
期望输出
21,22,53,80,139,443,445
解决方案
通过收集开放端口到数组,最后统一拼接输出,避免逐个打印时的末尾冗余逗号,同时添加换行符消除shell提示符%的混入。
修改后的代码:
sudo nmap -vv -sS 10.129.208.16 -oG - | awk ' /open/ { for (i=4;i<=NF;i++) { split($i,a,"/"); if (a[2]=="open") ports[++n] = a[1] } } END { for (i=1;i<=n;i++) { printf "%s%s", ports[i], (i<n ? "," : "\n") } }'
代码说明
- 使用数组
ports存储所有开放端口号,避免循环中逐个打印时强制追加逗号 - 在
END块中遍历数组,仅在非最后一个端口后添加逗号,最后一个端口后输出换行符,彻底解决末尾冗余逗号和%符号问题
内容的提问来源于stack exchange,提问作者Nr-yolo
相关产品推荐
相关产品推荐

