linux - 在监控界面上收到数据包,但不是主界面

标签 linux sockets udp wifi tcpdump

我正在从头构建 UDP 数据包(包括 802.11 MAC、LLC、IP 和 UDP header )并使用 LORCON 将它们注入(inject)无线网络。接收主机在常规托管模式下有一个接口(interface) wlan0(但未连接到任何 AP),我添加了一个在监控模式下运行的子接口(interface) 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

对于它的值(value),按照建议设置 net.ipv4.conf.all.rp_filter=0 here没有效果。设置 net.ipv4.ip_forward=1 也不行。启用 net.ipv4.conf.all.log_martians 不会在系统日志中产生任何输出。

欢迎任何关于为什么会这样的指示!

FWIW,机器运行的是 Ubuntu 12.04.3,但内核是 3.5.7。

编辑:这是我刚刚发现的一些有趣的事情:tcpdump -i any 也没有打印任何内容。只有当我显式运行 tcpdump -i mon0 时,我才能看到传入的数据包。为什么要从 -i any 中排除某些内容?

最佳答案

经过多次无果的尝试,我决定干脆把主界面设置成监听模式

iw dev wlan0 set type monitor
ip link set wlan0 promisc on

然后使用pcap提取问题中的数据包。添加对 pcap 的依赖,但它似乎比试图弄清楚数据包进入 Linux 内核要容易得多。可以找到 pcap 的一个很好的介绍 here .

关于linux - 在监控界面上收到数据包,但不是主界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433979/

相关文章:

linux - 如何从 Bash 中的并行子 shell 获取结果?

c - 使用 g_rename 函数编译 GTK+ 应用程序时出错

qt - 在 UDP 套接字上发送大数据

linux - 如何获取自上次使用 bash 修改文件以来的时间(以秒为单位)?

linux - Puppet 代理 3.8.1 在 Ubuntu 14.04 上安装失败

java - 使用 ScheduledExecutorService 时在哪里对计划任务执行最终清理

java - 使用 java 的 radio /碟式套接字 (ZeroMQ)

C++ 应用程序 : discover other IPs on LAN

c# - 使用 Socket 和 SSL 的 SMTP 连接

linux - 如何在套接字关闭时唤醒 select()?