急问: 为什么我收不到流经我网卡的ip包(发给非本机的ip包)啊?(代码见内)
#define MAX_ADDR_LEN 16
int main(int argc,char **argv)
{
int sockfd;
struct sockaddr_in addr;
char RecvBuf[MAX_PACK_LEN];
int bind_rc;
int len,addr_len;
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr = inet_addr(INADDR_ANY);
addr_len = sizeof(addr);
sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_UDP);
if(sockfd<0)
{
printf("socket call failed,sockfd=%d\n",sockfd);
exit(1);
}
set_promisc("eth0",sockfd);//设置网卡为混杂模式
while(1)
{
memset(RecvBuf,0,sizeof(RecvBuf));
printf(" begin receive!\n");
if((len = recvfrom(sockfd,RecvBuf,sizeof(RecvBuf),0,(struct sockaddr *)&addr,&addr_len)<0))
{
perror("receive error");
exit(1);}
printf(" receive length: %d\n",len);
DecodeIpPack(RecvBuf, len);
}
close(sockfd);
}
int set_promisc(char* interface,int sock)
{ struct ifreq ifr;
strcpy(ifr.ifr_name,interface);
if(ioctl(sock,SIOCGIFFLAGS,&ifr) == -1)
{
printf("Could not receive flag for the interface.\n");
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC;
if(ioctl(sock,SIOCGIFFLAGS,&ifr) == -1){
printf("Could not set the PROMISC flag.\n");
exit(0);
}
printf("Setting interface:%s:to promisc\n",interface);
}
我已经设置了网卡为混杂模式,怎么还是收不到啊,请高人指点一下!

