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

Nis*_*mar 0 wireless mode monitor capture 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);
Run Code Online (Sandbox Code Playgroud)

请帮帮我,我怎样才能设置过滤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地址或从特定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手册页.)