1

我想分析网络流量,但不是通过连接它只需打开 wifi 并在混杂模式下嗅探数据包(IEEE 802.11 帧)

我已经尝试过 libpcap,但它可能会在内部更改 datalinktype,因为我正在提供 wifi 接口

descr=pcap_open_live("en1", MAXBYTES2CAPTURE, 1, 512, errbuf);

(我们知道 mac OS x 有 en1 作为 wifi 接口)

现在当我这样做时

printf("%s", pcap_datalink_val_to_name( pcap_datalink(descr)));

它给了我结果"ethernet"
我尝试使用wireshark捕获数据包而不连接到我的wifi网络并且它有效!我能够在Beacon , Acknowledgement and Authentication frames不连接到我的 wifi 网络的情况下进行捕捉。

现在:

  1. 我是否必须为此制作网卡驱动程序,或者 libpcap 可以做到这一点?如果是的话怎么做?
  2. Wireshark 是否为此制作了某种驱动程序?如果是,请帮助我在它的源代码中找到它。
    • 我已经尝试过 Apple 的 CFNetwork,但如果不连接到网络,它也无法捕获。
    • 如果我对某些用户空间代码有一些建议,那将非常有帮助,因为内核级编码有点凝灰岩:(

我在 xCode 4.5.1 中的 MacOS 10.7 上编码

更新:
我已经这样做了:

descr=pcap_create("e1", errbuf);
pcap_set_rfmon(descr, 0);
pcap_set_promisc(descr, 0);
pcap_activate(descr);    
descr=pcap_open_live("en1", 2048, 1, 512, errbuf);                   

是的,wifi 上有一个小监视器图标,我可以嗅探数据包,但只有当我连接到网络时,我想在没有连接到 wifi 时做同样的事情,比如捕获信标和确认帧意味着我们的数据包通过网卡检测到可用的wifi网络

4

1 回答 1

2

If you're running on Snow Leopard or later (which you are, as you're running Lion), you should use the new pcap_create()/pcap_activate() APIs, and turn on monitor mode by calling pcap_set_rfmon() between the pcap_create() and pcap_activate() calls.

That's what Wireshark 1.6.0 and later do if you check the monitor mode checkbox, and what tcpdump 1.0.0 and later, and TShark and dumpcap in Wireshark 1.6.0 and later, do if you specify the -I command-line flag.

By default, Wi-Fi interfaces on many OSes, including but not limited to OS X, supply Ethernet headers, not 802.11 headers, which is why pcap_datalink_val_to_name(pcap_datalink(descr)) is reporting Ethernet headers. On Linux and OS X, you have to go into monitor mode to get 802.11 headers; on *BSD, you can get 802.11 headers without going into monitor mode.

You do not need your own driver to go into monitor mode on OS X; Wireshark does not supply its own drivers.

于 2012-10-29T18:54:38.393 回答