我正在用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地址设置过滤器?
答案 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:XX
或wlan ta XX:XX:XX:XX:XX:XX
等过滤器,至少使用较新版本的libpcap。 (有关详细信息,请参阅pcap-filter手册页,如果没有pcap-filter手册页,请参阅tcpdump手册页。)