1

Я знаю о программе, которая может "вырезать" (искать) пакеты TCP IP из необработанных двоичных данных. Результаты, которые он представляет, представляют собой MAC-адреса источника и назначения, IP-адреса источника и назначения и несколько других битов (номера портов и т.д.).

Мне любопытно узнать, какие биты данных действуют как сигнатура \ флаг для идентификации таких данных среди массы других двоичных данных? Пример ниже - один из моих собственных IP-пакетов из теста. Первые 6 байтов = MAC-адрес назначения. Следующие 6 байтов, MAC-адрес источника. 0800 - это какой-то маркер, который я сейчас забуду. 45 AB F7 25 - это один IP-адрес, C0 A8 6F A0 - один из моих внутренних IP-адресов и т.д.

Но нет ничего до или после него, чтобы сказать: «Эй, это данные TCP IP». И есть сотни других подобных примеров. Итак, как программное обеспечение нашло его и другие, когда исходные данные - это просто MAC-адрес - а не то, что вы можете легко написать в программе для поиска (что я и хочу сделать сам)?

Какие-нибудь мысли?

Offset       0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15

000000000   00 0C 29 31 24 41 00 50  56 ED A5 46 08 00 45 00     )1$A PVí¥F  E 
000000016   00 28 C0 A8 00 00 80 06  0D 0E 45 AB F7 25 C0 A8    (À¨  €   E«÷%À¨
000000032   6F A0 01 BB 06 AF 7C 3E  0B 51 35 87 6B 87 50 10   o  » ¯|> Q5‡k‡P 
000000048   FA F0 16 C2 00 00 00 00  00 00 00 00 00 00 00 00   úð Â            
000000064   FD 0C AC 83 FB 0A B0 41  B3 B3 F8 71 88 1F 4C 8C   ý ¬ƒû °A³³øqˆ LŒ

2 ответа2

1

Мое предложение, скачать и захватить некоторые данные с Wireshark. Убедитесь, что у вас есть список пакетов, информация о пакетах и опции просмотра байтов пакетов, и начните нажимать на пакеты. в разделе сведений о пакете можно щелкнуть разделы пакета L2, L3 и L4, и он выделит байты, которые соответствуют выбранному вами.

Затем начните с поиска в Интернете, чтобы узнать о заголовках / инкапсуляции Ethernet, IP-заголовках, TCP-заголовках и тому подобном. Википедия часто является хорошей отправной точкой для подобных тем, но в Интернете есть сотни ресурсов. Я выполнил быстрый поиск в поисках изображения, представляющего, как в конечном итоге построен фрейм Ethernet, и нашел его довольно хорошим: http://www.tcpipguide.com/free/t_IPDatagramEncapsulation.htm

Не читал содержимое, но между такими ресурсами и началом игры с частями фрейма в таком инструменте, как Wireshark, вы обнаружите, что есть определенная структура для двоичных данных, и это становится довольно легко отличить друг от друга.

0

Байты 13, 14, 15 являются маркерами IPv4 или IPv6. На приведенном скриншоте показано 00 45 00, поэтому у вас есть пакет IPv4.

Для пакета IPv4 вы смотрите 23-й байт. Это 06, так что у вас есть пакет TCP. Если его 11, у вас есть пакет UDP.

Для пакета IPv6 это 20-й байт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .