[英]Set IP_HDRINCL with PF_PACKET error in 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并显示错误消息“ Protocol not available”。如果我将PF_PACKET
更改为PF_INET
则设置了这些选项,但是我必须使用PF_PACKET
。因此有一种方法可以设置此选项与上面创建的套接字?
谢谢你
PF_PACKET
套接字没有我要设置的问题中要求的任何选项。 该选项仅在类型为SOCK_RAW
PF_INET
或PF_INET6
套接字上可用。
如果希望内核添加IP标头,则必须使用PF_INET
套接字。
您可以改为执行以下操作:
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
这意味着套接字是设置了IP_HDRINCL的原始套接字。 如果使用getsockopt
检查套接字的值,则会看到IP_HDRINCL已设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.