无线嗅探使用pcap,MAC地址过滤器

时间:2012-02-06 05:57:28

标签: capture monitor wireless mode pcap

我正在用C编写无线数据包嗅探器程序。我已经使用airmon-ng将我的无线接口设置为监控模式,现在我正在嗅探“mon0”接口。我正在使用linux(ubuntu 10.10)。

我想将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地址设置过滤器?

1 个答案:

答案 0 :(得分: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地址或从特定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手册页。)