使用 raspberry pi 中的 tcpdump/tshark 读取 WLAN Link 层包
Read WLAN Link Layer packages using tcpdump/tshark in raspberry pi
我有一个 raspberry pi,一个 WLAN 棒 (Ralink Technology, Corp. RT5370),处于监控模式并安装了 tcpdump (+tshark)。
现在我想从退休之家的患者使用的 WLAN 腕带设备读取 link 层包。此设备每秒发送 link 层数据,以便接入点使用指纹识别进行检测。这个包的内容并不重要,只需要RSSI值和设备的MAC。
现在我想用我的 rPi 检测病人何时对着自己的平门整齐,以便自动打开它。为此,Pi 需要接收此 LLC 包,以便我可以使用相关的 RSSI 值来计算距离。
使用 Wireshark 和 Windows (Airpcap) 我可以毫无问题地读取这些 LLC 包。输出例如:
35748 152.953461000 00:00:00_00:00:00 57:01:ff:00:00:00 LLC 62 I,N(R)=0,N(S)=0; DSAP NULL LSAP 个人,SSAP 0x1e 命令
如果我在 raspbian 上使用 tcpdump 或 tshark 做同样的事情,我根本收不到数据。
tcpdump(命令是 sudo tcpdump llc -i wlan1)returns
tcpdump:'llc' 仅支持原始 ATM
看起来我的 linux/driver 无法将 link 层数据传递给 tcpdump。如何启用它?
感谢您的任何提示
更新
感谢 Guy Harris,我找到了解决方案
sudo tcpdump -e -i wlan1 type data
returns 所有 LLC 包和 -e 值添加所有类型的 mac。输出是这样的,其中 TA 是设备的 MAC。我使用 python 逐行解析它以获取我需要的数据
02:56:21.346146 11.0 Mb/s 2462 MHz 11b -53dB signal antenna 1 RA:01:40:96:00:00:03 (oui Unknown) TA:00:18:8e:40:62:03 (oui Unknown) DA:00:00:00:00:00:00 (oui Ethernet) SA:00:00:00:00:00:00 (oui Ethernet) LLC, dsap Null (0x00) Individual, ssap OSI (0xfe) Response, ctrl 0x0b: Unnumbered, 0b, Flags [Response], length 24
BR
斯特凡
tcpdump: 'llc' supported only on raw ATM
首先,过滤器 在 所有 command-line 标志之后,包括 -i
,所以,如果您要捕获带过滤器的wlan1,你要的是
sudo tcpdump -i wlan1 {filter}
这就是 tcpdump 的工作方式 - 过滤器在 所有 command-line 标志和这些标志的参数之后出现,包括 -i
、-r
,等等
其次,"llc" 意味着非常具体的东西 - 来自 "pcap-filter" 手册页(对于旧版本的 libpcap 和 tcpdump,它在 tcpdump 手册页中,但过滤器表达式不是' tcpdump 无法理解,libpcap 可以理解,tcpdump 用于捕获和读取捕获文件的库):
llc True if the packet is an ATM packet, for SunATM on Solaris, and
is an LLC-encapsulated packet.
在 802.11 上,所有 802.11 数据帧都有一个 802.2 LLC header,所以你想要
tcpdump -i wlan1 type data
这将过滤掉管理和控制帧(没有 802.2 LLC headers)。
我有一个 raspberry pi,一个 WLAN 棒 (Ralink Technology, Corp. RT5370),处于监控模式并安装了 tcpdump (+tshark)。
现在我想从退休之家的患者使用的 WLAN 腕带设备读取 link 层包。此设备每秒发送 link 层数据,以便接入点使用指纹识别进行检测。这个包的内容并不重要,只需要RSSI值和设备的MAC。
现在我想用我的 rPi 检测病人何时对着自己的平门整齐,以便自动打开它。为此,Pi 需要接收此 LLC 包,以便我可以使用相关的 RSSI 值来计算距离。
使用 Wireshark 和 Windows (Airpcap) 我可以毫无问题地读取这些 LLC 包。输出例如:
35748 152.953461000 00:00:00_00:00:00 57:01:ff:00:00:00 LLC 62 I,N(R)=0,N(S)=0; DSAP NULL LSAP 个人,SSAP 0x1e 命令
如果我在 raspbian 上使用 tcpdump 或 tshark 做同样的事情,我根本收不到数据。
tcpdump(命令是 sudo tcpdump llc -i wlan1)returns
tcpdump:'llc' 仅支持原始 ATM
看起来我的 linux/driver 无法将 link 层数据传递给 tcpdump。如何启用它?
感谢您的任何提示
更新
感谢 Guy Harris,我找到了解决方案
sudo tcpdump -e -i wlan1 type data
returns 所有 LLC 包和 -e 值添加所有类型的 mac。输出是这样的,其中 TA 是设备的 MAC。我使用 python 逐行解析它以获取我需要的数据
02:56:21.346146 11.0 Mb/s 2462 MHz 11b -53dB signal antenna 1 RA:01:40:96:00:00:03 (oui Unknown) TA:00:18:8e:40:62:03 (oui Unknown) DA:00:00:00:00:00:00 (oui Ethernet) SA:00:00:00:00:00:00 (oui Ethernet) LLC, dsap Null (0x00) Individual, ssap OSI (0xfe) Response, ctrl 0x0b: Unnumbered, 0b, Flags [Response], length 24
BR 斯特凡
tcpdump: 'llc' supported only on raw ATM
首先,过滤器 在 所有 command-line 标志之后,包括 -i
,所以,如果您要捕获带过滤器的wlan1,你要的是
sudo tcpdump -i wlan1 {filter}
这就是 tcpdump 的工作方式 - 过滤器在 所有 command-line 标志和这些标志的参数之后出现,包括 -i
、-r
,等等
其次,"llc" 意味着非常具体的东西 - 来自 "pcap-filter" 手册页(对于旧版本的 libpcap 和 tcpdump,它在 tcpdump 手册页中,但过滤器表达式不是' tcpdump 无法理解,libpcap 可以理解,tcpdump 用于捕获和读取捕获文件的库):
llc True if the packet is an ATM packet, for SunATM on Solaris, and
is an LLC-encapsulated packet.
在 802.11 上,所有 802.11 数据帧都有一个 802.2 LLC header,所以你想要
tcpdump -i wlan1 type data
这将过滤掉管理和控制帧(没有 802.2 LLC headers)。