Как экспортировать только печатный текст (или любое другое свойство пакета) в wirehark

Короче говоря, я перехватываю SQL-запросы из инструмента поставщика в базу данных Oracle с помощью Wireshark. У него уже есть декодер для протокола TNS (и это здорово), и я могу получить доступ к тексту SQL с помощью

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

Проблема в том, что существует множество пакетов, и щелчок правой кнопкой мыши по каждому из них может занять целую вечность. Мне было интересно, есть ли способ экспортировать «Только текст для печати» прямо из Wireshark. В идеале я хочу иметь текстовый файл с операторами.

Любая помощь будет высоко оценена.


person Petro Semeniuk    schedule 31.12.2010    source источник


Ответы (3)


Я не знаю, как это сделать с TNS. но вы можете сделать что-то подобное с помощью tshark, например, для просмотра http-запросов.

tshark -T fields -e http.request.uri

Поэтому, если вы можете просмотреть параметры в декодере TNS, вы сможете получить это поле и перенаправить вывод в файл.

person Doon    schedule 31.12.2010
comment
Спасибо. Я понял имя поля. Однако в выводе tshark он отображается как поток байтов, а не как строка. Как я могу преобразовать его в строку? Я проверил руководство по tshark, но для меня это не очевидно. - person Petro Semeniuk; 31.12.2010
comment
хм, с http вы получаете текстовый вывод. Вы можете попробовать -T text, но это будет печатать только сводки. точно не уверен.... - person Doon; 31.12.2010
comment
Спасибо, в любом случае. Кодирование из байтового потока в строку - это другая проблема, и "tshark -T fields" - это именно то, что мне было нужно в первую очередь/ - person Petro Semeniuk; 01.01.2011

Наконец нашелся, чтобы сделать это. Во-первых, используйте 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

экспортирует весь текст из ввода в вывод

person Petro Semeniuk    schedule 14.01.2011
comment
Если вы измените File.open(file, "r") на STDIN, вы сможете перенаправить поток: tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521,tns | encode.rb - person Andrzej Jozwik; 05.12.2012

Простой способ посмотреть на них, все, что сработало для меня, это просто Right Click -> Follow TCP Stream.

Примечание: непечатаемые символы отображаются как .s. Если есть куча этих вкраплений между всем текстом, который вы хотите извлечь (как было у меня), переключите его на ASCII, сохраните и откройте в своем любимом текстовом редакторе (у меня vim), затем запустите поиск и заменить аналогичный /\.//g.

person Nick Knowlson    schedule 01.04.2011