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

Pet*_*iuk 3 sql oracle tns packet-capture wireshark

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

Right Click->Copy->Bytes(Printable Text Only). 
Run Code Online (Sandbox Code Playgroud)

问题是有大量的数据包,右键单击每个数据包可能需要很长时间。我想知道是否有任何方法可以直接从 Wireshark 导出“仅可打印文本”。理想情况下,我想要一个带有语句的文本文件。

任何帮助将不胜感激。

Pet*_*iuk 5

终于找到了做这个。首先使用tshark抓tns包:

tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521,tns > input.txt
Run Code Online (Sandbox Code Playgroud)

然后你可以使用下面的自制 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?
}
Run Code Online (Sandbox Code Playgroud)

例子是:

encode.rb input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

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

encode.rb input.txt  all > output.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 如果将 `File.open(file, "r")` 更改为 STDIN,则可以重定向流:`tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521, tns | 编码.rb` (2认同)