On Oct 6, 2016, at 10:19 AM, Yang Luo <hslu...@gmail.com> wrote: > I'm working on the new raw 802.11 capture feature with Npcap on Windows these > days. This new raw 802.11 feature doesn't need to install different versions > of Npcap to turn on/off the raw 802.11 mode. In Wireshark, Npcap will provide > two interfaces which can be chosen for each wireless adapter, one normal > interface and another raw 802.11 interface. So when capturing on the normal > interface of a wireless adapter, you will get fake Ethernet traffic. When > capturing on the raw 802.11 interface, you can get raw 802.11 traffic like > mgmt, control and data. This idea is the same as how Linux's raw 802.11 > capture is implemented.
The way Linux's raw 802.11 capture is implemented is a misfeature, not a feature. So is the way macOS's raw 802.11 capture is implemented. Libpcap tries to work around those misfeatures, by: on Linux, by, if you've requested monitor mode with pcap_set_rfmon(), trying to figure out whether the mac80211 mechanism (with a "monN" device created, corresponding to a "wifiN" device) can be used and, if so, creating the "monN" device and capturing on it rather than on the "wifiN" device and, if not, using whatever the driver-specific mechanism is for turning monitor mode on; on macOS, by, if you've requested monitor mode with pcap_set_rfmon(), offering only the DLT_ values that cause monitor mode to be turned on (and, if you haven't, offering only the DLT_ values that *don't* cause monitor mode to be turned on), and, if you haven't requested a DLT_ value, defaulting to a mode that does or doesn't turn monitor mode on, whether or not you've requested it. The goal here is to *hide* the OS-specific details of how you do monitor mode, allowing a command-line program to support a command-line flag such as -I (which tcpdump and the Wireshark programs use) and allowing a GUI program to support a checkbox to request monitor mode. Unfortunately, there are some issues that mean it doesn't usually work on Linux, but I have plans to fix those. > On Linux, we use iwconfig to create a "mon0" for "eth0", then capturing on > "mon0" will get the raw 802.11 traffic. On Linux, we do that only because libpcap usually doesn't do it for you; that's a deficiency in libpcap and needs to be fixed. Having two devices on Windows would be *another* misfeature, and I'd have to make libpcap work around *it*, so that -I and the checkbox work on Windows the same way they work on macOS (and on at least some *BSDs, although I think FreeBSD may have broken that) and the way they will work on Linux once I deal with the libnl issues. So please do *NOT* implement this the way Linux does, with two separate devices - that's the *WRONG* way to do it! (And don't implement it the way macOS does, either - the BIOCSDLT-based hack is another wrong way.) Just implement it in such a way that: if the user hasn't called pcap_set_rfmon(p, 1) before calling pcap_activate(p), capture with monitor mode off, with fake Ethernet headers; if the user *has* called pcap_set_rfmon(p, 1) before calling pcap_activate(p), capture with monitor mode on, with 802.11+radiotap headers; and show only *one* device for a Wi-Fi adapter, which you use both with and without monitor mode. > Since friendly name is shown on Wireshark/dumpcap, its value of the two > interfaces of a wireless adapter must be different, If you don't show the user two interfaces for a Wi-Fi adapter, this is not a problem. > So to summarize, there are several questions: > > 1) Is using "\Devicce\NPF_WIFI_{XXXX}" as the GUID name a good way to > represent the raw 802.11 interface? No. Not *having* a raw 802.11 interface is a good way to do things. > 2) How to let Wireshark output the correct friendly name of the raw 802.11 > interface? Change dumpcap or change libpcap API? Don't have a separate interface, and you don't need to give it a separate friendly name. > 3) How the friendly name of the raw 802.11 interface should be like? Is > adding a "(raw 802.11)" at the end of the original friendly name a good way? Don't have a separate interface, and you don't need to give it a separate friendly name. ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe