繁体   English   中英

在Linux中将IP_HDRINCL设置为PF_PACKET错误

[英]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_INETPF_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM