如何仅在Wireshark中导出可打印的文本(或任何其他数据包属性)
-
14-10-2019 - |
题
长话短说 - 我正在使用Wireshark捕获从供应商工具到Oracle数据库的SQL。它已经具有用于TNS协议的解码器(这很棒),我可以访问SQL的文本
Right Click->Copy->Bytes(Printable Text Only).
问题在于,有大量的数据包,并且对每个数据包进行右键单击可能会花费很长时间。我想知道是否有任何方法可以从Wireshark出口“仅可打印文本”。理想情况下,我想拥有一个带有语句的文本文件。
任何帮助将不胜感激。
解决方案
我不知道该如何使用TNS。但是,您可以使用TSHARK进行类似的操作,例如查看HTTP请求。
tshark -T fields -e http.request.uri
因此,如果您可以查看TNS解码器中的选项,则应该可以抓住该字段并将输出重定向到文件。
其他提示
终于找到了这样做。首先,使用TSHARK捕获TNS数据包:
tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521,tns > input.txt
然后,您可以使用下面的家庭酿造红宝石脚本从字节转换为文本:
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
将将所有文本从输入导出到输出
看着它们所有对我有用的简单方法只是 Right Click -> Follow TCP Stream
.
注意:不可打印的字符显示为 .
s。如果您要提取的所有文本之间都有一堆散布的(与我一样),请将其切换到 ASCII
, ,保存并将其打开在您喜欢的文本编辑器(对我来说是VIM),然后运行搜索并替换类似于 /\.//g
.
不隶属于 StackOverflow