急问: 为什么我收不到流经我网卡的ip包(发给非本机的ip包)啊?(代码见内)

#define MAX_PACK_LEN 65535
#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);

}
我已经设置了网卡为混杂模式,怎么还是收不到啊,请高人指点一下!
[1505 byte] By [sf5382] at [2008-1-9]
# 1
你用抓包工具确认有其它机器的包先。
现在都不用HUB了,一般来说也就没有其它机器的包经过了。
rtdb-东临碣石 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 2
我用tcodump测了,有包通过的,但是我的这个程序收不到。我是给另外一台和我直连的机子发了个伪造arp让它给我发包的。不知道程序里有什么问题,望高手指点。
sf5382 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...