2010-07-02 2 views
0

Вот пример «Структура пакета» изображения: http://freesoft.org/CIE/Course/Section3/7.htmКак я могу использовать структуру пакетов из RFC и применить ее к моей программе сокетов?

Допустим, у меня была небольшая программа Python, который прослушал на X порт и захватили этот пакет и сохранили его в переменную «данных».

Как бы вытащить информацию о пакете из данных? Так, например, сказать, что я хотел бы прочитать «версию», это просто:

print data[0:4] ? 

Как бы я получить исходный IP-адрес?

В последнее время я делаю больше сокетов и сталкивался с некоторыми из этих образов «структуры пакета». Мне еще предстоит выяснить, как применять их к моему коду:/

ответ

0

Обратите внимание, что ваш пример показывает IP-заголовок - если вы просто используете сокеты, вы будете не см. Эту информацию (ее уже переварили системные IP-и TCP-стеки).

Если вы хотите захватить необработанные данные, изучите использование libpcap, что позволит использовать сырые пакеты. Вы также можете использовать tcpdump для создания файла с сырыми пакетами.

Что касается структур, вы можете прочитать первые 4 байта, если ваша data была строкой с вашей командой. Вы, скорее всего, захотите кодировать строку как «hex» (или целые числа для нормального представления), иначе вы увидите символы «мусора».

Для более мощной распаковки, use the struct module, которая поставляется с python.

+0

Как бы я прочитал вторую строку этого пакета? Чтобы, скажем, получить поле «Флаги»? Я обязательно посмотрю на структурный модуль. Cheers – dave

+0

Прочитайте его слева направо, сверху вниз. Вторая строка в этом случае - это просто второй байт (бит 0-31 на строку). –