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



我正在C中编写一个无线数据包嗅探器程序。我已经使用airmon ng将我的无线接口设置为监视器模式,现在我正在接口"mon0"上嗅探。我使用的是linux(ubuntu 10.10)。

我想设置MAC地址作为数据包的过滤器。我做了如下所示,但上面写着"mon0未分配IPV4地址"

 pcap_lookupnet(dev,&net,&mask,errbuf);
    printf("%sn",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: %sn", dev, errbuf);
        return 2;
    }
    if(pcap_compile(handle,&fp,argv[0],0,net)==-1){
        fprintf(stderr,"Error calling pcap_compilen");exit(1);}
    if(pcap_setfilter(handle,&fp) == -1){
        fprintf(stderr,"Error setting filtern");exit(1);}
    /* The call pcap_loop() and pass our callback function */
    pcap_loop(handle, 10, my_callback, NULL);

请帮我,我如何设置MAC地址的过滤器??

"未分配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筛选器手册页,或者,如果您没有pcap筛选器的手册页,请参阅tcpdump手册页。)

最新更新