I 설정을 사용하여 원시 패킷 소켓 다음 : 다음설정 IP_HDRINCL이라는
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
나도 잘 모르겠다. ... 이것은 내가 일하는 다른 사람의 코드이다. 뭐 좀 물어봐도 될까요? PF_PACKET을 올바르게 사용하고있을 때 커널이 ip 헤더를 추가하지 않는다는 것을 이해합니까? 커널이 헤더를 추가합니까? 아니면 수동으로해야합니까? 원본 주소 및 대상 주소 등을 보유하고 있습니까? 고마워요. – mtahmed
예. PF_PACKET 소켓이 커널에 의해 추가 된 헤더를 얻지 못한다는 것을 이해합니다. "OSI 레이어"가 무엇인지 확실하지 않습니다. 직접 헤더를 만들어야하며, 처리해야하는 헤더를 정확히 파악하기 위해 문서를 읽어야합니다. – Mat