Linux到Android蓝牙网络共享(PAN)

一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述Linux到Android蓝牙网络共享(PAN)相关的知识,希望能为你提供帮助。
我正在使用支持蓝牙功能的[嵌入式] Linux设备,并希望通过蓝牙与android设备共享它的内部网络(未连接到互联网)(尝试过Android 6.x和现在的7.1.2-Lineage OS [rooted]) 。该设置已经适用于Linux或Windows客户端。我阅读了大量的帖子和文档,但我无法让它与Android设备一起使用:
我的Linux设备:dnsmasq作为DHPC服务器,蓝牙启用和“bt-pan”[1]启动并运行(桥接接??口称为bt-pan0)。通过Dbus-Events我自动“信任”任何新的连接设备。设备类(如果重要)使用hciconfig配置为0x020000。
【Linux到Android蓝牙网络共享(PAN)】在我的Android手机上,我配对(自动工作)并连接(使用“Internet访问”)我的Linux设备(热点)。在dnsmasq日志中,我看到连接的设备正确获取了IP地址。
从linux-box我可以在已发布的IP地址上ping手机,我看到一个新的bnep0设备被创建并添加到bt-pan0网桥。
当我通过adb shell连接到我的手机时,我还看到正在使用我的dnsmasq提供的正确IP /网络掩码设置创建的bt-pan设备。不幸的是,当启用Wifi或Mobile-Data时 - 我无法通过它的IP地址ping linux-box。禁用Wifi和移动数据时 - 设置正常。这是我通过adb shell执行的一些命令的输出 - 如果需要更多输出,我将尽快提供它(移动数据IP地址在粘贴时由我修改):

# route Kernel IP routing table DestinationGatewayGenmaskFlags Metric RefUse Iface 192.168.10.0*255.255.255.0U000 bt-pan 123.456.78.16*255.255.255.252 U000 rmnet_data0# ip route get 192.168.10.5 192.168.10.5 via 123.456.78.18 dev rmnet_data0src 123.456.78.17uid 0 cache # ip rule show 0:from all lookup local 10000:from all fwmark 0xc0000/0xd0000 lookup legacy_system 10500:from all oif dummy0 uidrange 0-0 lookup dummy0 10500:from all oif rmnet_data0 uidrange 0-0 lookup rmnet_data0 10500:from all oif bt-pan uidrange 0-0 lookup bt-pan 13000:from all fwmark 0x10063/0x1ffff lookup local_network 13000:from all fwmark 0x100b9/0x1ffff lookup rmnet_data0 13000:from all fwmark 0x100ba/0x1ffff lookup bt-pan 14000:from all oif dummy0 lookup dummy0 14000:from all oif rmnet_data0 lookup rmnet_data0 14000:from all oif bt-pan lookup bt-pan 15000:from all fwmark 0x0/0x10000 lookup legacy_system 16000:from all fwmark 0x0/0x10000 lookup legacy_network 17000:from all fwmark 0x0/0x10000 lookup local_network 19000:from all fwmark 0xb9/0x1ffff lookup rmnet_data0 19000:from all fwmark 0xba/0x1ffff lookup bt-pan 22000:from all fwmark 0x0/0xffff lookup rmnet_data0 23000:from all fwmark 0x0/0xffff uidrange 0-0 lookup main 32000:from all unreachable

bt-pan0设备的dnsmasq配置中,我设置了一个空的default-gw(dhcp-option 3)和一个正确的DNS服务器(dhcp-option 6)。我读到了关于设置dhcp-option 121(无类静态路由)的问题,但这两者都不起作用(DHCP请求不查询121)...
如果有人知道发生了什么或知道为什么这个设置导致了问题 - 我会很高兴终于明白这一点。
[1] https://github.com/mk-fg/fgtk/blob/master/bt-pan
答案我从来没有弄清楚为什么路由不起作用。
幸运的是,我可以设置我正在使用的库的SocketFactory(Paho MQTT)。因此 - 我使用ConnectivityManager查找蓝牙设备及其“网络”对象(提供'getSocketFactory')来设置MQTT中的SocketFactory。然后连接工作。
ConnectivityManager cm =(ConnectivityManager)ctx.getSystemService(CONNECTIVITY_SERVICE); Networks[] nets = cm.getAllNetworks();

...找到蓝牙设备并使用'getSocketFactory'。找到蓝牙设备
cm.getNetworkInfo(network);

很有帮助

    推荐阅读