Open meishaoming opened 6 years ago
运气比较好,ubuntu 16.04 里带有 mt7610u 的驱动,插入之后 wifi 接口就出来了:
wlx488ad2847259 Link encap:UNSPEC HWaddr 48-8A-D2-84-72-59-3A-30-00-00-00-00-00-00-00-00
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:43871 errors:0 dropped:31443 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10780262 (10.7 MB) TX bytes:0 (0.0 B)
手动把接口设置成 monitor 模式:
sudo ip link set wlx488ad2847259 down
sudo iw dev wlx488ad2847259 set type monitor
sudo ip link set wlx488ad2847259 up
安装 wireshark
sudo apt install wireshark
启动
sudo wireshark
启动之后遇到一个错误,注释掉 /usr/share/wireshark/init.lua
里的倒数第二行:
--dofile(DATA_DIR.."console.lua")
启动 wireshak 之后发现没有扫到自己路由器的数据很少,所有帧的 channel 都是1。可能 wireshark 固定于一个 channel 扫描。
进到路由器设置里看到路由器的 WiFi 在 channel 10,所以在命令行下手动切换网卡的 channel :
sudo iw dev wlx488ad2847259 set channel 10
重新扫描就看到了这个频段的所有帧:
扫到的帧类型有许多,这里只关心三种:
Beacon frame 是 AP 定时发出来的帧,也称为「信标帧」。其中携带了 AP 的基本信息,有 AP 的 MAC 地址(BSSID)、SSID、支持的速率、工作频率、国家信息等。
Probe Request 由 STA 发出,用于探测周围的 SSID。如果指定了 SSID,则对应的 AP 会返回 Probe Response 作为响应。
从上一篇的抓包结果来看,STA 会发出 Probe Request 帧,其中就包含 STA 的信息。WiFi 探针就是不断监听 Probe Request 帧来获取所有 STA 信息。
Probe Request 有两种类型:
对每个抓到的 Probe Request 帧,我们可以得到的信息有:
但是现在的 iOS 8 和 Android 8.0 以后的机器在 WiFi 探测接做都采用了随机 MAC 的特性。
参考链接:
在淘宝上买了一个 WiFi 探针
这个设备允许配置连接一个能够上公网的 WiFi 热点。然后它自己扫描 50s(这个可以配置),然后再尝试连接这个热点并把数据上传到服务器。
其介绍页中配写明了可以上传到自己的服务器中。然而实际测试却意外的发现一点问题:
它先向自己服务器 xinfeng.doit.am 请求一次时间(估计是同步时间),然后再上传到设置的服务器地址。如果请求时间不成功,则不再上传数据。
正好手头有一台刷过 openwrt 的路由器。把它作为热点来抓探针上传的数据包。现在的网络连接是:
WiFi 探针 ~~~~~ openwrt 路由器 ~~~ -> 公网
抓到的包:tcpdump_log.pcap.zip,用 wireshark 打开即可分析它的行为。
curl -v xinfeng.doit.am/iot_api/get_time.php
来测试一个 HTTP POST 消息的 body 内容:
'device_id=DC4F228904F1&device_key=37095147&device_time=2018-10-23#19:00:07&postion_mac=04:95:E6:54:3D:61|Nenyacm,EC:26:CA:DE:5A:3F|TP-LINK_5A3F,78:11:DC:00:E5:E2|FMTech&message=B0:FC:36:B0:3A:57,34:96:72:55:E9:53,sogood-2G,5.62,0 \r\n78:11:DC:4C:D7:F0,78:11:DC:00:E5:E2,FMTech,5.23,1 \r\nDC:4F:22:89:04:F1,78:11:DC:00:E5:E2,FMTech,3.65,1 \r\nF8:34:41:3E:C3:3F,EC:26:CA:DE:5A:3F,TP-LINK_5A3F,3.65,0 \r\nE4:0E:EE:98:B0:02,04:95:E6:54:3D:61,Nenyacm,3.16,0 \r\n78:11:DC:7D:E2:AE,34:96:72:55:E9:53,sogood-2G,3.92,1 \r\n60:14:B3:BB:8C:6D,34:96:72:55:E9:53,sogood-2G,4.53,0 \r\nAC:07:5F:95:CD:B9,FC:37:2B:4B:CD:39,ChinaNet-G5iN,6.98,0 \r\n60:D8:19:84:A1:A1,EC:26:CA:D7:13:88,SOGOOD_VIP_2G,6.98,0 \r\n80:56:F2:84:2A:BE,34:96:72:55:E9:53,sogood-2G,4.87,1 \r\n80:19:34:07:56:F2,78:44:FD:F0:F7:FC,9000,8.06,0 \r\n54:4E:90:31:70:33,8C:A6:DF:A6:E1:67,TXJRC203,8.06,0 \r\n60:14:B3:C4:6D:F3,78:44:FD:F0:F7:FC,9000,7.50,0 \r\nC8:3D:D4:A9:1D:43,EC:26:CA:DE:5A:3F,TP-LINK_5A3F,4.22,0 \r\n'
参数名字 | 参数含义 | 示例 |
---|---|---|
device_id | 设备ID,默认为设备的MAC地址。 | 60019487F37F |
device_time | 上传时间 | 2018-03-14#10:47:38 |
device_key | 设备的key,主要目的,是检验数据的合法性,默认为设备id+ “2018doit”,md5,然后取前8个字节。开发时可以不处理此字段。 | 设备id:60019487F37F追加:2018doit 追加后为:60019487F37F2018doit Md5取前8个字节:f95b911d |
postion_mac | 位置mac | 24:24:01:0D:4A:FA| new_mesh,24:24:02:0C:8F:3D| new_mesh,24:24:02:0A:52:D1|new_mesh |
message | MAC地址列表, 每一个MAC由\r\n分隔, 每一行为逗号分隔, 第一列表示手机MAC, 第二列表示路由mac, 第三列表示路由名称(如果为空表示没有名称), 第四列表示采集设备与手机的距离, 第5列表示是否已经连接路由 |
98:9C:57:D8:EB:F9,BC:5F:F6:14:4F:DF,szub,33.98,0 54:DC:1D:C1:C0:50,08:10:7A:3D:C9:64,ChinaNet-bktech,19.11,0 08:10:7A:3D:C9:64,54:DC:1D:C1:C0:50,,19.11,0 08:10:7B:15:50:00,34:96:72:D1:AB:71,KP,36.52,1 60:01:94:88:4D:74,BC:D1:77:32:E7:2E,Doit_Old,9.31,1 F4:B7:B3:9A:01:20,20:6B:E7:A2:F8:87,wisephone1,29.43,0 B0:59:47:33:0F:ED,20:6B:E7:A2:F8:87,wisephone1,31.62,0 24:F0:94:C3:3C:5F,78:44:FD:45:F1:EC,111,25.48,1 74:DF:BF:53:C6:1F,EC:26:CA:2C:66:8E,sunflowers-2,11.55,0 B0:48:7A:5F:BF:CD,2C:F0:A2:2D:F7:98,,22.07,0 00:4B:F3:0E:AF:57,08:10:7A:3C:5A:F2,ChinaNet-201,36.52,1 54:27:1E:A2:F4:63,FF:FF:FF:FF:FF:FF,,19.11,0 |
在 wireshark 802.11 抓包 中用了一块 mt7601u 的 usb 无线网卡 来抓包。这个 usb 无线网卡的缺点是只支持 802.11 a/b/g/n,不支持 802.11 ac。
选另一个支持 802.11 ac 的 usb 无线网卡 TP-LINK TL-WDN6200 。芯片方案是 realtek 8812au。需要自己编译驱动:
git clone --depth=1 -b v5.1.5 https://github.com/aircrack-ng/rtl8812au.git
make KSRC=/home/sam/jetpack/64_TX2/Linux_for_Tegra/rootfs/usr/src/linux-headers-4.4.38-tegra/
插入 jetson tx2 板子之后的 log :
nvidia@tegra-ubuntu:/tmp$ dmesg
[ 8698.585266] usb 1-2: USB disconnect, device number 5
[ 8698.586010] usbcore: registered new interface driver 8812au
[ 8698.597940] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 6
[ 8698.617632] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 4
[ 8698.624669] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work ignore firmware MBOX_CMD_INC_SSPI_CLOCK request
[ 8698.853999] usb 2-1: new SuperSpeed USB device number 2 using xhci-tegra
[ 8698.874332] usb 2-1: Int endpoint with wBytesPerInterval of 512 in config 1 interface 0 altsetting 0 ep 133: setting to 64
[ 8698.886030] usb 2-1: New USB device found, idVendor=2357, idProduct=0101
[ 8698.892861] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 8698.900073] usb 2-1: Product: 802.11n NIC
[ 8698.904148] usb 2-1: Manufacturer: Realtek
[ 8698.908311] usb 2-1: SerialNumber: 123456
[ 8698.913224] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 6
[ 8700.475806] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
成功的创建了 wlan1 接口,但不太正常的是这里识别为 usb2.0。
安装抓包工具:
sudo apt install aircrack-ng
将网卡设置成 monitor 模式:
sudo ip link set wlan1 down
sudo iw dev wlan1 set type monitor
sudo ip link set wlan1 up
开始扫描:
sudo airodump-ng wlan1 --band abg -M -U --beacons
-M
/--manufacturer
生产厂商-U
/--uptime
--beacons
记录所有 beacon 帧到 dump 文件中还可用其它一些参数:
sudo airodump-ng wlan1 -f 2000 --berlin 600
-f 2000
channel 切换时间 2000ms (2s)--berlin 600
600秒没有抓到包则不再显示该条记录(默认是 120)sudo airodump-ng wlan1 -a -c 153 --bssid 78:11:DC:00:E5:E3
指定抓某个信道的某个MAC地址
在淘宝上又买了另一款 ESP8266 方案的 WiFi 探针,购买地址。
它在给 ESP8266 外部连接了一个 USB 串口芯片 CH340C,这样插入电脑后可以直接从 USB 口把数据读出来。
另外还配了一个 Type C 的 OTG 转接口。插到 Android 手机可以用 APP 读出来再传到云端,可以说也是个非常不错的办法。
它里面打了胶,我暴力拆开废了一个(还好一次性买了两个)。
它每 15 秒返回一次扫描结果,两次(或多次)结果会有重复设备,需要在应用端去重。
Scan done, 7 wifi devices found.
STA[000]: 04:95:E6:5D:19:11, -71
STA[001]: FC:37:2B:4B:CD:39, -77
STA[002]: 64:09:80:51:5B:AC, -80
STA[003]: 04:95:E6:54:3D:61, -78
STA[004]: 78:11:DC:00:E5:E2, -76
STA[005]: D0:6F:82:DD:D6:70, -77
STA[006]: 7A:11:DC:20:E5:E2, -77
Data End.
Scan done, 11 wifi devices found.
STA[000]: D0:6F:82:DD:D6:70, -77
STA[001]: A4:5E:60:E3:25:31, -76
STA[002]: 7C:49:EB:DD:3A:25, -79
STA[003]: FC:37:2B:4B:CD:39, -79
STA[004]: 04:95:E6:54:3D:61, -76
STA[005]: 64:09:80:51:5B:AC, -79
STA[006]: 04:95:E6:5D:19:11, -65
STA[007]: 7A:11:DC:20:E5:E2, -75
STA[008]: 34:96:72:55:E9:53, -78
STA[009]: E8:9E:B4:16:1A:09, -81
STA[010]: 74:C2:46:BF:1D:E7, -65
Data End.
这里记录了在 jetson tx2 开发套件上实现 WiFi 探针功能踩过的一些坑。
最开始想使用 tx2 板载网卡,但发现它不支持 monitor 模式。
然后在淘宝选了一款 esp8266 方案的 WiFi 探针,但受限于整套方案上网条件的限制(只能有一台主机作为出口),这个探针的扫描结果无法上传。
最后还是选了一款支持 802.11ac 的 USB WiFi 网卡,编译驱动,使用 airodump-ng 来抓包,再解析、上传数据。
整个过程记录为几篇:
整个过程用到了两个 USB 无线网卡:水星 MW150US 和 TP-LINK TL-WDN6200 。
为什么会选这两款?因为办公室里就有这两款 USB 网卡,直接拿来用,算是看见什么吃什么。