I Установка сырым Packet сокет, используя следующие:Набор IP_HDRINCL с ошибкой PF_PACKET в Linux
sockFd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
Тогда я пытаюсь установить опцию сокета IP_HDRINCL
с помощью:
int one = 1;
if (setsockopt (sockFd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0)
LogPrint(LOG_UNKNOWN,"Warning: Cannot set HDRINCL!\n");
Но я не могу для установки этой опции (я получаю сообщение об ошибке с errno
92 и сообщение «Протокол недоступен» .Если я меняю PF_PACKET
на PF_INET
, тогда параметры будут установлены, но я должен использовать PF_PACKET
.Так есть способ установить этот параметр с помощью сокет, созданный выше?
Спасибо, кучка.
Я не уверен в этом (вообще), но действительно ли этот вариант имеет смысл для сокетов PF_PACKET? – Mat
Я тоже не знаю ... это чужой код, с которым я работаю. Могу я задать вопрос? Я понимаю, что ядро не добавляет никаких заголовков ip при правильном использовании PF_PACKET? Является ли ядро добавлением заголовков или мы должны сделать это вручную? Вещи, такие как адрес источника и адрес назначения и т. Д.? Спасибо – mtahmed
Да, я понимаю, что сокеты PF_PACKET не получат заголовки, добавленные ядром, но не уверен, что до уровня «OSI». Вам придется сделать их сами (и прочитать документы, чтобы точно определить, какие заголовки вам нужно иметь). – Mat