使用带有vconfig接口的linux raw socket

时间:2011-06-30 19:51:15

标签: linux sockets

我想使用套接字来传输我的数据包,所以我尝试使用这样的原始套接字。

static int raw_sock = 0;
static struct sockaddr_ll saddr;
static struct ifreq ifr;
static int ifindex;
raw_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
memset(&ifr,0,sizeof(ifr));
memset(&saddr,0,sizeof(saddr));
strcpy(ifr.ifr_name,"eth0");
ioctl(raw_sock,SIOCGIFINDEX,&ifr);
ifindex = ifr.ifr_ifindex;
saddr.sll_family = AF_PACKET;
saddr.sll_ifindex = ifindex;
saddr.sll_protocol = ETH_P_ALL;
sendto(raw_sock,pkt.buffer,pkt.pkt_len,0,(struct sockaddr *)&saddr,sizeof(saddr));

我想要的一切都正常工作但是在我使用

添加了一些vlan界面之后
vconfig add eth0 4000

上述代码与以前不同。它会自动将vlan标记0x81 0x00 0x00 0x00添加到它发送出去的所有数据包中。有没有人有这方面的解决方案。我只想发送所有数据包不受影响。谢谢。

1 个答案:

答案 0 :(得分:1)

尝试从vlan0发送,而不是从eth0发送。