我正在从头开始构建UDP数据包(包括802.11 MAC,LLC,IP和UDP标头),并使用LORCON将它们注入无线网络。接收主机在常规管理模式下有一个接口wlan0
(但没有连接到任何AP),我添加了一个以监控模式运行的子接口mon0
:
iw dev wlan0 interface add mon0 type monitor
观察监控界面显示数据包已正确接收:
$ sudo tcpdump -vei mon0 udp
tcpdump: WARNING: mon0: no IPv4 address assigned
tcpdump: listening on mon0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes
<time> <signal info> DA:Broadcast BSSID:... SA:... LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Ethernet (0x000000), ethertype IPv4 (0x0800): (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 53)
10.0.0.1.1234 > 255.255.255.255.1234: UDP, length 17
但是,如果我运行sudo tcpdump -vei wlan0
,即使MAC和IP目标地址都设置为广播地址,也不会打印数据包。源地址设置为虚构地址,但我认为这不应该阻止tcpdump
看到数据包吗?
$ ip link
...
7: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 00:21:6a:c5:3e:7a brd ff:ff:ff:ff:ff:ff
8: mon0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ieee802.11/radiotap 00:21:6a:c5:3e:7a brd ff:ff:ff:ff:ff:ff
对于它的价值,按照建议here设置net.ipv4.conf.all.rp_filter=0
无效。也没有设置net.ipv4.ip_forward=1
。启用net.ipv4.conf.all.log_martians
不会在syslog中生成任何输出。
关于为什么会这样做的任何指示都是最受欢迎的!
FWIW,该机器运行的是Ubuntu 12.04.3,但是使用的是3.5.7内核。
编辑:这是我刚刚发现的有趣内容:tcpdump -i any
也没有打印任何东西。只有当我显式运行tcpdump -i mon0
时才能看到传入的数据包。为什么会从-i any
中排除某些内容?
答案 0 :(得分:1)
经过许多无结果的实验,我决定简单地将主界面置于监控模式
iw dev wlan0 set type monitor
ip link set wlan0 promisc on
然后使用pcap提取问题中的数据包。添加对pcap的依赖,但似乎比试图找出Linux内核中的数据包要容易得多。可以找到一个很好的pcap介绍here。