2011-06-30 24 views
0

私はパケットをそのまま送信するためにソケットを使いたいので、このようなrawソケットを使ってみました。私が好きなvconfigインターフェイスでlinux rawソケットを使用する

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

eth0の代わりにvlan0から送信してみてください。

関連する問題