如何在wireshark中仅导出可打印文本(或任何其他数据包属性)

时间:2010-12-31 04:46:09

标签: sql oracle wireshark packet-capture tns

长话短说 - 我使用Wireshark从供应商工具捕获SQL到Oracle数据库。它已经有TNS协议的解码器(这很棒),我可以通过

访问SQL的文本
Right Click->Copy->Bytes(Printable Text Only). 

问题是,有大量的数据包,并且右键单击它们可能需要很长时间。我想知道是否有任何方法可以直接从Wireshark导出'Printable Text Only'。理想情况下,我想要一个包含语句的文本文件。

任何帮助都将受到高度赞赏。

3 个答案:

答案 0 :(得分:4)

终于找到了这样做。首先,使用tshark捕获tns数据包:

tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521,tns > input.txt

然后你可以使用下面的自制brew Ruby脚本从字节转换为文本:

file = ARGV[0]
print_all = ARGV[1]

File.open(file, "r").each {|line|
  line.gsub(",", ":").split(':').each {|byte|
    chr = Integer('0x' + byte).chr
    print chr if ((' '..'~').include?(chr) or chr == "\n") or (print_all.downcase == 'all' if print_all)
  } if !line.chomp.empty?
}

例如:

encode.rb input.txt > output.txt

只会将可打印文本从输入导出到输出

encode.rb input.txt  all > output.txt

会将所有文本从输入导出到输出

答案 1 :(得分:3)

一种简单的方式来查看它们对我有用的只是Right Click -> Follow TCP Stream

注意:不可打印的字符显示为. s。如果在你想要提取的所有文本之间插入一堆这些(就像我一样),将其切换到ASCII,保存并在你喜欢的文本编辑器中打开它(vim for me),然后运行搜索并替换类似于/\.//g

答案 2 :(得分:2)

我不知道如何用TNS做到这一点。但你可以使用tshark做这样的事情,例如查看http请求。

tshark -T fields -e http.request.uri

因此,如果您可以查看TNS解码器中的选项,您应该能够获取该字段并将输出重定向到文件。