设置无线接口但捕获以太网数据
Setted wireless interface but captures ethernet data
我正在使用 libpcap 制作嗅探器,但出现了一些奇怪的行为。
我对网络了解不多,为此我正在制作嗅探器以了解网络的真正工作原理。
在我 运行 嗅探器之前,我在终端上输入 ifconfig
,它 returns:
eth0 Link encap:Ethernet Endereço de HW 44:87:fc:ec:63:08
endereço inet6: fe80::4687:fcff:feec:6308/64 Escopo:Link
UP BROADCASTMULTICAST MTU:1500 Métrica:1
RX packets:38398 errors:0 dropped:1 overruns:0 frame:0
TX packets:28661 errors:0 dropped:0 overruns:0 carrier:2
colisões:0 txqueuelen:1000
RX bytes:24620500 (23.4 MiB) TX bytes:6922586 (6.6 MiB)
IRQ:42
lo Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:294 errors:0 dropped:0 overruns:0 frame:0
TX packets:294 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:18540 (18.1 KiB) TX bytes:18540 (18.1 KiB)
wlan0 Link encap:Ethernet Endereço de HW 00:c1:40:67:04:30
inet end.: 192.168.0.102 Bcast:192.168.0.255 Masc:255.255.255.0
endereço inet6: fe80::2c1:40ff:fe67:430/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:2115 errors:0 dropped:0 overruns:0 frame:0
TX packets:2033 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:947310 (925.1 KiB) TX bytes:571860 (558.4 KiB)
我把网线拔掉了,所以,eth0接口没有ip,用在我的sniffer上是不行的
因此,我将无线网络接口作为参数传递给终端上的程序。
#./sniffer wlan0
还有一段代码:
pcap_t* handler = NULL;
handler = pcap_open_live(argv[1], 65535, 1, 1000, errbuf);
if((datalink_value = pcap_datalink(handler)) == DLT_EN10MB)
printf("ETHERNET\n");
else if (datalink_value == DLT_IEEE802_11)
printf("WIRELESS\n");
输出为ETHERNET
。
为什么会发生这种情况,我该如何解决?该设备将其转换为以太网?或者这是内核行为?
我仍然不知道问题是出在我的代码上,还是我不太了解网络和协议的工作原理。
我使用的无线设备是:Mini USB 150Mbps 802.11n/g/b wifi Adapter Comfast WU720N
谢谢。
在 Linux 上,您需要在监控模式下捕获才能获得 802.11 headers。如果适配器不处于监控模式,您将只能获得数据帧,而不是管理或控制帧,并且 802.11 header 将被内核变成假以太网 header 并且数据包将提供 header.
较新版本的 libpcap 有一个 API 来请求监控模式,但是,在 Linux 上,API 只有在 libpcap 构建时支持 libnl 时才能正常工作。您可以尝试使用 API(使用 pcap_create()
,然后调用设置捕获选项,然后调用 pcap_activate()
打开设备;其中一个调用应该是 pcap_set_rfmon()
设置监控模式)。如果不行,你必须使用 airmon-ng 来开启监控模式;有关如何执行此操作的信息,请参阅 this part of the Wireshark Wiki。
我正在使用 libpcap 制作嗅探器,但出现了一些奇怪的行为。 我对网络了解不多,为此我正在制作嗅探器以了解网络的真正工作原理。
在我 运行 嗅探器之前,我在终端上输入 ifconfig
,它 returns:
eth0 Link encap:Ethernet Endereço de HW 44:87:fc:ec:63:08
endereço inet6: fe80::4687:fcff:feec:6308/64 Escopo:Link
UP BROADCASTMULTICAST MTU:1500 Métrica:1
RX packets:38398 errors:0 dropped:1 overruns:0 frame:0
TX packets:28661 errors:0 dropped:0 overruns:0 carrier:2
colisões:0 txqueuelen:1000
RX bytes:24620500 (23.4 MiB) TX bytes:6922586 (6.6 MiB)
IRQ:42
lo Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:294 errors:0 dropped:0 overruns:0 frame:0
TX packets:294 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:18540 (18.1 KiB) TX bytes:18540 (18.1 KiB)
wlan0 Link encap:Ethernet Endereço de HW 00:c1:40:67:04:30
inet end.: 192.168.0.102 Bcast:192.168.0.255 Masc:255.255.255.0
endereço inet6: fe80::2c1:40ff:fe67:430/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:2115 errors:0 dropped:0 overruns:0 frame:0
TX packets:2033 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:947310 (925.1 KiB) TX bytes:571860 (558.4 KiB)
我把网线拔掉了,所以,eth0接口没有ip,用在我的sniffer上是不行的
因此,我将无线网络接口作为参数传递给终端上的程序。
#./sniffer wlan0
还有一段代码:
pcap_t* handler = NULL;
handler = pcap_open_live(argv[1], 65535, 1, 1000, errbuf);
if((datalink_value = pcap_datalink(handler)) == DLT_EN10MB)
printf("ETHERNET\n");
else if (datalink_value == DLT_IEEE802_11)
printf("WIRELESS\n");
输出为ETHERNET
。
为什么会发生这种情况,我该如何解决?该设备将其转换为以太网?或者这是内核行为? 我仍然不知道问题是出在我的代码上,还是我不太了解网络和协议的工作原理。
我使用的无线设备是:Mini USB 150Mbps 802.11n/g/b wifi Adapter Comfast WU720N
谢谢。
在 Linux 上,您需要在监控模式下捕获才能获得 802.11 headers。如果适配器不处于监控模式,您将只能获得数据帧,而不是管理或控制帧,并且 802.11 header 将被内核变成假以太网 header 并且数据包将提供 header.
较新版本的 libpcap 有一个 API 来请求监控模式,但是,在 Linux 上,API 只有在 libpcap 构建时支持 libnl 时才能正常工作。您可以尝试使用 API(使用 pcap_create()
,然后调用设置捕获选项,然后调用 pcap_activate()
打开设备;其中一个调用应该是 pcap_set_rfmon()
设置监控模式)。如果不行,你必须使用 airmon-ng 来开启监控模式;有关如何执行此操作的信息,请参阅 this part of the Wireshark Wiki。