3

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

Right Click->Copy->Bytes(Printable Text Only). 

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

任何帮助将不胜感激。

4

3 回答 3

5

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

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

然后您可以使用下面的自制 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

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

于 2011-01-14T00:57:43.433 回答
3

查看对我有用的所有内容的一种简单方法是Right Click -> Follow TCP Stream.

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

于 2011-04-01T20:43:48.310 回答
2

我不知道如何用 TNS 做到这一点。但是您可以使用 tshark 执行类似的操作,例如查看 http 请求。

tshark -T fields -e http.request.uri

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

于 2010-12-31T04:56:11.400 回答