2012-01-02 1 views
2

Я пытаюсь выяснить структуру данных, которая хранится в «буфере» после того, как следующее:C PF_PACKET Link слоя Обработка

sock=socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_IP));

recvfrom(sock, buffer, 2048, 0, NULL, NULL);

Я хотел бы быть способный вставлять данные в структуру данных и читать на уровне канала, уровне IP и уровне TCP, если это TCP-пакет. Я попробовал man-страницы и некоторые файлы заголовков, но их просто повсюду.

Заранее спасибо.

ответ

3

Это необработанные биты, которые проходят через провод (уровень 2 OSI). man page for packet объясняет это довольно хорошо.

Что я хотел бы сделать, это получить результат этого и сравнить его с выходом сеанса Wireshark, просматривающим те же данные. Затем вы должны иметь возможность сопоставить эти два и посмотреть, что происходит.

+0

Я посмотрел на пакет 7 человека. На основе справочной страницы указано: «Информация заголовка уровня ссылки доступна в общем формате в sockaddr_ll». Если вы посмотрите на sockaddr_ll, вы увидите, что структура этого объекта не может содержать весь IP-пакет. – Philoxopher

+1

sockaddr_ll содержит только информацию о уровне * заголовка уровня ссылки, а не весь пакет. Другие данные находятся в вашем буфере recv. Формат зависит от протокола, который вы отправляете. Посмотрите на RFC для соответствующего протокола, например. IP, TCP и т. Д. – mark4o

+0

Если вы посмотрите на верхнюю часть страницы руководства, в #includes вы найдете файлы заголовков, которые определяют низкоуровневые пакеты (хотя и не в структурах, они используют определения). Sockaddr_ll просто определяет адрес. –

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

  • Нет связанных вопросов^_^