2015-12-04 3 views
0

Я написал программу, которая может создать именованный канал, а затем записать в него пакеты, а затем прочитать его с помощью wirehark (создание именованного канала в качестве интерфейса -> wireshark -k -i tmp/myfifo). Ниже приведен список байтов, который был отправлен в трубу.Что такое формат libpcap?

D4 C3 B2 A104 0008 0000 00 00 0000 00 00 00FF FF 00 0001 00 00 00AA 77 9F 4790 A2 04 004d000000 4d00000000 00 00 00 00 0000 00 00 00 00 0008 004500003f00 0040 00 403A3c837f 00 00 017f 00 00 01A0 0100 0148 69 20 74 68 69 73 20 69 73 20 5061 72 76 61 74 68 69 20 66 72 6f 6d20 56 49 54 20 55 6e 69 76 65 72 7369 74 79 

D4C3B2A1 0400 0800 00000000 00000000 FFFF0000 01000000 -Global заголовок
AA779F47 90A20400 4d000000 4d000000 заголовок -пакета
00 00 00 00 00 0000 00 00 00 00 00 08 00 -ethernet заголовок
4500 003f 00 00 40 00 40 3A3c837f 00 00 017f 00 00 01 -ip заголовок
9B 01 00 01 -icmp заголовок
48 69 20 74 68 69 73 20 69 73 20 5061 72 76 61 74 68 69 20 66 72 6f 6d20 56 49 54 20 55 6e 69 76 65 72 7369 74 79 й, наконец, сообщение

Я попытался открытием Wireshark, отправив его шестнадцатеричный формат, а также его строковый код ASCII к интерфейсу (трубе). Но в обоих случаях, когда я открываю wirehark, он подсказывает, что это «Unrecognized libpcap format». В соответствии с форматом Libpcap в ссылки ниже, байты подставили

[1] Формат Libpcap файл по Wireshark: https://wiki.wireshark.org/Development/LibpcapFileFormat [2] код питона пример для создания PCAP файла: http://www.codeproject.com/Tips/612847/Generate-a-quick-and-easy-custom-pcap-file-using-P

Что именно должно Я посылаю так, чтобы проводники могли нюхать?

ответ

1

Если мы посмотрим на the man page for the pcap file format, мы видим, что вам нужно отправить, как последовательность байтов, все целые значения многобайтовыми быть в порядке байт машины выписывая байтовый поток:

  • 4-байтовое магическое число со значением 0xA1B2C3D4 для разрешения микросекундного временного штампа или A1B23CD4 для разрешения наносекундного временного штампа;
  • 2-байтовый номер главной версии со значением 2;
  • 2-байтовый младший номер версии со значением 4;
  • 4-байтовое смещение часового пояса со значением 0;
  • 4-байтовый индикатор точности временной отметки со значением 0;
  • 4-байтовое значение длины снимка - если вы явно не обрезали пакеты с произвольной фиксированной длиной, введите здесь большое значение, например 262144;
  • 4-байтовое значение типа заголовка канального уровня, от the list of LINKTYPE_ values.

Таким образом, если ваша машина малозначительна - как любой компьютер с x86-совместимым процессором будет (то есть 32-разрядный IA-32 или 64-разрядный x86-64, AMD или Intel или .. ,), поэтому, если вы делаете это на ПК или на базе Intel на базе Mac, ваша машина малозначна - последовательность байтов будет для захвата с отметками времени с микросекундным разрешением и с пакетами, являющимися Ethernet-пакетами с каждым началом пакета с заголовком Ethernet, начинаются с:

D4 C3 B2 A1 (magic number) 
00 02 (major version number) 
00 04 (minor version number) 
00 00 00 00 (time zone offset) 
00 00 00 00 (time stamp accuracy) 
00 04 00 00 (snapshot length = 262144) 
00 00 00 01 (link-layer header type value, LINKTYPE_ETHERNET) 

Затем, после этого, вы бы выписать для каждого пакета, поток байт для заголовка, содержащего, все целые значения многобайтовыми быть в порядке байтов машины выписывание поток байтов, заголовок каждого пакета с:

  • временную метку 4 байта «секунды» значение, представляющее собой количество секунд, прошедших с 1 января 1970, 00:00:00 UTC (a st andard UN * X time stamp);
  • 4-байтовая метка времени «микросекунды», представляющая количество микросекунд с этой секунды;
  • 4-байтовое значение, указывающее количество байтов пакетных данных для этого пакета в потоке;
  • 4-байтовое значение, указывающее количество байтов, которое было у пакета до, было произвольно отрезано на длину моментального снимка - если оно не было отрезано, это будет таким же, как количество байтов данных пакета ;

и затем будут содержать необработанные байты пакетных данных без прокладки.

+0

Таким же образом я послал пакеты
'D4C3B2A1 0400 0800 00000000 00000000 FFFF0000 01000000' -Global заголовка
' AA779F47 90A20400 4d000000 4d000000 '-пакет заголовка
' 00 00 00 00 00 0000 00 00 00 00 00 08 00 '-ethernet header
'4500 003f 00 00 40 00 40 3A3c837f 00 00 017f 00 00 01' -ip заголовок
'9B 01 00 01' -icmp header
и, наконец, сообщение - '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 73 20 5061 72 76 61 74 68 69 20 66 72 6f 6d20 56 49 54 20 55 6e 69 76 65 72 7369 74 79
в то время как я дал так, что это подсказывает, что не в формате libpcap ' – PLP

+0

Привет, пожалуйста см. отредактированный вопрос ... eventhough, я отправил на интерфейс (здесь именованный канал) в байтах wirehsark не rec ognizing it, .. и показывая ошибку как «Unrecognized libpcap format» – PLP

+1

Пожалуйста, покажите данные, которые вы пишете в трубе, * по одному байту за раз *, что означает «показывать две шестнадцатеричные цифры за раз» - т.е. , если вы отправили байт со значением 0xD4, за которым следует байт со значением 0xC3, за которым следует байт со значением 0xB2, за которым следует байт со значением 0xA1, покажите его как 'D4 C3 B2 A1', а не как 'D4C3B2A1'. Попробуйте, например, запустить вашу программу, записав ее в '/ tmp/myfifo', а также запустив команду' od -tx1/tmp/myfifo', чтобы точно определить, какие байты записываются в '/ tmp/myfifo'. –