如何让tshark将tcp.payload以ASCII明文形式显示?
解决tshark显示TCP载荷为ASCII明文的问题
以下两种方法可以实现将tcp.payload的十六进制结果转为ASCII明文:
方法1:直接转换十六进制为原始字节(显示可打印ASCII)
使用tshark提取十六进制载荷后,通过xxd工具反转十六进制为原始字节流,终端会自动渲染可打印的ASCII字符:
tshark -r pcap -T fields -e tcp.payload | xxd -r -p
注:不可打印的控制字符会显示为终端默认的占位符(比如^@类符号)。
方法2:只保留可打印ASCII字符
如果需要过滤掉不可打印的字符,在上述命令后加上tr工具过滤:
tshark -r pcap -T fields -e tcp.payload | xxd -r -p | tr -dc '[:print:]\n'
tr -dc '[:print:]\n'会保留所有可打印字符和换行符,剔除其他字符。
补充说明:为什么data/data.text返回空?
tshark中的data字段对应应用层已解析的数据,只有当Wireshark能识别数据包的上层协议(比如HTTP、DNS)并成功解析时,这个字段才会有值。如果是自定义协议、未识别协议或者TCP载荷本身就是原始字节流,data字段就会为空,这时候只能用tcp.payload提取TCP层的原始载荷。
内容的提问来源于stack exchange,提问作者arnby
相关产品推荐
相关产品推荐

