gpt4 book ai didi

c - 如何在混杂模式下打开原始 UDP 套接字?

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:21 31 4
gpt4 key购买 nike

我正在尝试打开一个原始套接字来处理 交通。我需要它是混杂的。我看过很多资源,但我完全糊涂了。这是我的代码:

char interface_name[12];
strcpy(interface_name, "eth1");
sd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
if ( sd == -1 ) {
perror("error in opening socket.");
return;
}

if ( setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, interface_name, strlen(interface_name)) == -1 )
{
perror("error in binding sd.");
return;
}
int one = 1;
if ( setsockopt (sd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0)
{
perror("error in setting HDRINCL.");
return;
}
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, interface_name);
if (ioctl(sd, SIOCGIFINDEX, &ifr) < 0) {
perror("ioctl(SIOCGIFINDEX) failed");
return;
}
int interface_index = ifr.ifr_ifindex;
ifr.ifr_flags |= IFF_PROMISC;
if( ioctl(sd, SIOCSIFFLAGS, &ifr) != 0 )
{
perror("ioctl for IFF_PROMISC failed.");
return;
}
struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = interface_index;
mr.mr_type = PACKET_MR_PROMISC;

if (setsockopt(sd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) {
perror("setsockopt(PACKET_MR_PROMISC) failed");
return 1;
}

决赛setsockopt()失败并显示错误消息 “协议(protocol)不可用”
可能是什么原因?有什么建议吗?

最佳答案

这是因为您使用了仅用于 packet(7)SOL_PACKET socket 。对于原始 INET 套接字,您不需要该选项。

关于c - 如何在混杂模式下打开原始 UDP 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595340/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com