Я пытаюсь выяснить структуру данных, которая хранится в «буфере» после того, как следующее:C PF_PACKET Link слоя Обработка
sock=socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_IP));
recvfrom(sock, buffer, 2048, 0, NULL, NULL);
Я хотел бы быть способный вставлять данные в структуру данных и читать на уровне канала, уровне IP и уровне TCP, если это TCP-пакет. Я попробовал man-страницы и некоторые файлы заголовков, но их просто повсюду.
Заранее спасибо.
Я посмотрел на пакет 7 человека. На основе справочной страницы указано: «Информация заголовка уровня ссылки доступна в общем формате в sockaddr_ll». Если вы посмотрите на sockaddr_ll, вы увидите, что структура этого объекта не может содержать весь IP-пакет. – Philoxopher
sockaddr_ll содержит только информацию о уровне * заголовка уровня ссылки, а не весь пакет. Другие данные находятся в вашем буфере recv. Формат зависит от протокола, который вы отправляете. Посмотрите на RFC для соответствующего протокола, например. IP, TCP и т. Д. – mark4o
Если вы посмотрите на верхнюю часть страницы руководства, в #includes вы найдете файлы заголовков, которые определяют низкоуровневые пакеты (хотя и не в структурах, они используют определения). Sockaddr_ll просто определяет адрес. –