我想从Android WiFi AP(接入点)接收UDP数据包。我打算用libpcap接收广播包,所以我不需要在网络中关联STA(Associated Station)来节省时间。
我写了一个发送UDP数据包到192.168.43.255的Android应用程序,通常它可以工作 - 在BSS中注册后,我可以在STA上接收数据包。问题是当在BSS中注册否 STA时,AP会不发送UDP数据包。从应用程序的角度来看,数据包是通过套接字发送的,没有任何错误/异常,但是没有使用wireshark嗅探器检测到它们(在非关联的PC上运行,扫描AP通道)。当我连接到AP(来自其他Android手机)时,在wireshark日志中显示的UDP数据包 。
从日志中我看到,在STA从AP收到802.11帧“关联响应”后,会出现UDP数据包。一旦STA从具有“Deauthentication”帧的BSS分离,UDP数据包就不会被发送到空中(但Android应用程序仍会发送它们而没有任何错误)。
我尝试通过原始套接字发送UDP数据包(作为本机NDK应用程序,在inet上找到一个示例),结果相同(否定)。
我认为Android WiFi代码经过优化,在BSS中没有STA时不会发送UDP数据包。我想禁用这种“优化”,是否可能?它在Linux AP中是相同的,还是特定于Android的功能?我使用TI开发板AM335x入门套件,我正在从源代码构建Android ROM,所以我几乎可以改变一切,只是我不知道它在哪里))任何想法都表示赞赏。
我可能尝试不通过UDP数据包发送我的数据,但通过自定义的802.11帧,只有UDP对我来说似乎更容易,并且它可以通过标准的Android Java API工作。对于802.11帧方法,我需要通过NDK工作,可能是jNetpcap(java libpcap包装器移植到Android),所以对我来说它看起来不那么容易。
我必须说我在这方面不是很好(WiFi网络),所以我可能会问一些转储......
关于我的用例 - 我需要通过WiFi从快速移动的对象(汽车)收集数据,这就是为什么我认为在没有STA关联程序的情况下在单个WiFi帧中发送数据会很好。我想广播数据,没有限制,在BSS中至少有一个STA。
提前致谢, 麦克