使用Awk处理Nmap ssl-enum-cipher结果:关联端口与对应TLS版本及加密套件
使用Awk处理Nmap ssl-enum-cipher结果:关联端口与对应TLS版本及加密套件
看起来你已经把基础的端口提取逻辑搞定了,接下来只需要让Awk学会「记住」当前端口,并且把对应的ssl-enum-ciphers内容完整关联起来就行。我来给你调整一下脚本逻辑:
#!/usr/bin/awk -f # 初始化状态变量:标记是否正在处理ssl-enum-ciphers块 in_ssl_block = 0 # 保存当前端口的完整信息行 current_port_line = "" # 匹配端口行(格式如21/tcp、443/tcp这类以数字开头的行) /^[0-9]+\/tcp/ { # 如果之前在处理ssl块,先换行分隔不同端口的结果 if (in_ssl_block) { print "" in_ssl_block = 0 } # 保存当前端口的整行信息 current_port_line = $0 next } # 匹配ssl-enum-ciphers的起始行 /^\| ssl-enum-ciphers:/ { # 先输出之前保存的端口信息 print current_port_line # 标记进入ssl内容块,开始收集后续行 in_ssl_block = 1 } # 如果处于ssl内容块中,直接输出当前行 in_ssl_block { print $0 }
脚本工作原理说明:
- 用
in_ssl_block变量跟踪是否正在处理某个端口的ssl扫描结果,current_port_line暂存当前端口的完整信息(比如21/tcp open ftp vsftpd 3.0.2)。 - 当匹配到新的端口行时,先检查之前是否在处理ssl内容,如果是就换行分隔,然后更新当前端口的信息。
- 当遇到
| ssl-enum-ciphers:行时,先输出保存的端口信息,然后标记进入ssl内容块。 - 只要处于ssl内容块中,后续的每一行(包括TLS版本、加密套件、警告等)都会直接输出,直到遇到下一个端口行,再重置状态处理下一个目标。
把你的Nmap输出喂给这个脚本,就能得到你想要的格式——只保留带有ssl扫描结果的端口,并且完整关联对应的TLS版本和加密套件内容,自动过滤掉没有ssl-enum-ciphers结果的端口(比如22/tcp、80/tcp)。
备注:内容来源于stack exchange,提问作者34598240




