2012-02-06 51 views
0

我正在用C编写一个无线数据包嗅探器程序。我使用airmon-ng将监测模式设置为无线接口,现在我在接口“mon0”上嗅探。我正在使用Linux(Ubuntu 10.10)。使用pcap,MAC地址过滤器的无线嗅探

我想设置MAC地址作为数据包的过滤器。 我都做到了,如下图所示,但它说 “MON0没有IPv4地址分配”

pcap_lookupnet(dev,&net,&mask,errbuf); 
    printf("%s\n",errbuf); 
    /* Open the session in promiscuous mode */ 
    handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf); 
    if (handle == NULL) { 
     printf("Couldn't open device %s: %s\n", dev, errbuf); 
     return 2; 
    } 
    if(pcap_compile(handle,&fp,argv[0],0,net)==-1){ 
     fprintf(stderr,"Error calling pcap_compile\n");exit(1);} 
    if(pcap_setfilter(handle,&fp) == -1){ 
     fprintf(stderr,"Error setting filter\n");exit(1);} 
    /* The call pcap_loop() and pass our callback function */ 
    pcap_loop(handle, 10, my_callback, NULL); 

请帮助我,我怎么可以设置MAC地址过滤?

回答

5

“没有分配IPV4地址”是pcap_lookupnet()的错误。所有这一切意味着您尝试捕获的网络接口没有分配给它的IPv4地址。 airmon-ng做的是为Wi-Fi适配器创建一个“监视器”接口;适配器的常规网络接口可能会分配一个IP地址,但监视器接口不会有。

只有 IP地址重要的地方是ip broadcast过滤表达式;如果您没有过滤IPv4广播地址(您可能不会这样做),则不需要获取IPv4地址。引述pcap_compile()手册页:

如果其被捕获的数据包是不知道的程序,或者如果数据包正在对Linux的“任何”伪接口捕获可以在网络的子网掩码在多个网络上捕获,可以提供值0; IPv4广播地址的测试将无法正确完成,但过滤器程序中的所有其他测试都会正常进行。

所以只需将0作为“net”参数传递给pcap_compile()即可。

如果要搜索发送到特定MAC地址的数据包,可以使用wlan dst XX:XX:XX:XX:XX:XX;如果您想要搜索发送的特定MAC地址的数据包,则可以使用wlan src XX:XX:XX:XX:XX:XX;如果您想要搜索发往或来自特定MAC地址的数据包,则可以使用wlan host XX:XX:XX:XX:XX:XX。如果您关心接入点地址而不是站点地址,则需要使用诸如wlan ra XX:XX:XX:XX:XX:XXwlan ta XX:XX:XX:XX:XX:XX之类的过滤器,至少使用较新版本的libpcap。 (请参阅pcap-filter手册页或如果您没有pcap-filter手册页,请访问tcpdump手册页以了解详细信息。)

+0

我在tcpdump的网页上阅读了您的教程。我试着通过阅读你在stackoverflow上写的东西来学习。你有没有发布关于libpcap的更多说明的网页? – Angs 2013-12-04 14:47:05

+0

不幸的是,没有。 – 2013-12-04 21:30:25