2014-01-31 1 views
0

Я захватил некоторые данные приложения в wirehark (сообщения FIX), и мне интересно, есть ли способ экспортировать только слой данных tcp каждого пакета в отдельный файл, по одной строке/строке для каждого пакета.Как я могу экспортировать данные tcp из некоторых пакетов, которые я захватил?

Я думал, что раньше существовала функция tcp.data, но это, похоже, не существует в версии wirehark, которую я использую (v1.10.1).

Я планировал добавить дополнительный столбец в настройках Wireshark и настроить его на «custom», а затем поместить tcp.data в поле. Затем экспортируем этот столбец в текстовый файл.

Заранее благодарим за любые идеи или предложения.

PS. другая идея, которую я имел, заключалась в том, чтобы написать сценарий для синтаксического анализа файла захвата и эффективно отрубить верхние заголовки перед данными уровня tcp, но это займет какое-то время - надеюсь, уже существует способ сделать это в самом проводе.


UPDATE 1: Расширение решения Исаака, я пришел со следующим, однако это на самом деле печатать весь сегмент TCP, а не только данные из внутри сегмента. Я также попробовал tcp.segment_data, но это также приводит к той же проблеме, в которой выдается больше, чем полезная нагрузка tcp. К сожалению, на данный момент лучший вариант выглядит как ручной анализ файла pcap. Кто-нибудь еще имеет какие-либо предложения, или, возможно, определить, что я ошибался в синтаксисе команды tshark?

tshark -r capture_chopped.pcap -c4 -2 -R "(tcp.len > 0)" -T fields -d tcp.port==2634,echo -e tcp.segment -w - > output.2 

UPDATE 2 - Устранено: я обнаружил, что каждый вариант с tshark не предоставил всю информацию мне нужно, поэтому я пошел с созданием своего собственного сценария Perl выплывать в FIX строки сообщения из файла pcap. Скрипт Perl приведен ниже, если он полезен кому-либо еще в аналогичной ситуации с файлом PCAP.

ответ

0

В конце концов я обнаружил, что создание сценария perl для анализа файла PCAP было достаточным для моих нужд - главным образом из-за того, что другие варианты использования tshark по-прежнему нуждались бы в дополнительной дополнительной очистке/манипуляции (например.преобразование HEX в двоичный файл), поэтому сценарий казался лучшим подходом ко мне.

Сценарий perl включен здесь, если он полезен для кого-либо еще.

use strict; 
use warnings; 

my $in_file = shift || die "must give input pcap file as argument here. \n"; 

my $out_file = 'fix_output.txt'; 

open (my $out_fh, ">", $out_file) || die "error opening output file: [$out_file]. $! \n"; 
open (my $in_fh , "<", $in_file) || die "error opening input file: [$in_file]. $! \n"; 

my $pcap_blob = do { 
    local $/ = undef; 
    <$in_fh>; 
}; 

my @FIX_strings = $pcap_blob =~ m/(8=FIX\.4\.0.*10=\d\d\d)/g; 

print "found " . scalar @FIX_strings . " FIX messages\n"; 

for (@FIX_strings){ 
    print {$out_fh} $_ , "\n"; 
} 
print "finished writing FIX messages to $out_file\n"; 

close $out_fh; 
close $in_fh; 

print "all done\n"; 
exit; 
3

Вам не нужен скрипт, вы можете использовать встроенный инструмент wirehark, называемый tshark. Он обычно находится по адресу: c: \ Program Files \ Wireshark, если вы установили wirehark в папку по умолчанию.

Затем с помощью следующей командной строки, и он будет делать трюк:

tshark -r c:\captures\your_file.cap -R "(tcp.len > 0)" -T fields -d tcp.port=3868,echo -e echo.data 

Несколько замечаний о выше:

  1. фильтрует TCP-пакеты, которые не имеют полезную нагрузку, удалить если вы хотите идентифицировать пустые

  2. Предполагается, что вы знаете порт протокола, в котором содержится ваш файл, который обычно является разумным предположением. В приведенном выше примере 3868 замените его на протокол, который вы используете.

Затем перенаправьте вывод в файл, и все готово.

+1

Большое спасибо за это - однако это только вывод данных tcp как hex. Можно ли его модифицировать только для вывода данных tcp в двоичном формате? – sparco1500

Смежные вопросы