You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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
}

脚本工作原理说明:

  1. in_ssl_block变量跟踪是否正在处理某个端口的ssl扫描结果,current_port_line暂存当前端口的完整信息(比如21/tcp open ftp vsftpd 3.0.2)。
  2. 当匹配到新的端口行时,先检查之前是否在处理ssl内容,如果是就换行分隔,然后更新当前端口的信息。
  3. 当遇到| ssl-enum-ciphers:行时,先输出保存的端口信息,然后标记进入ssl内容块。
  4. 只要处于ssl内容块中,后续的每一行(包括TLS版本、加密套件、警告等)都会直接输出,直到遇到下一个端口行,再重置状态处理下一个目标。

把你的Nmap输出喂给这个脚本,就能得到你想要的格式——只保留带有ssl扫描结果的端口,并且完整关联对应的TLS版本和加密套件内容,自动过滤掉没有ssl-enum-ciphers结果的端口(比如22/tcp、80/tcp)。

备注:内容来源于stack exchange,提问作者34598240

火山引擎 最新活动