2011-06-30 63 views
0

我想使用套接字來傳輸我的數據包不變,所以我嘗試使用這樣的原始套接字。使用Linux原始套接字與vconfig接口

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)); 

一切都正常工作,因爲我想,但我後加用

vconfig add eth0 4000 

一些VLAN接口上面的代碼不會像以前那樣工作。它會自動將vlan標記0x81 0x00 0x00 0x00添加到所有傳出的數據包中。有沒有人有解決這個問題。我只想發送所有數據包。謝謝。

回答

1

嘗試從vlan0發送,而不是從eth0發送。