我正在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:XX
或wlan ta XX:XX:XX:XX:XX:XX
之类的筛选器,至少在较新版本的libpcap中是这样。(有关详细信息,请参阅pcap筛选器手册页,或者,如果您没有pcap筛选器的手册页,请参阅tcpdump手册页。)