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

时间:2018-01-29 13:09:00

标签: android linux networking bluetooth dnsmasq

我已启用支持蓝牙功能的[嵌入式] 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。

在我的Android手机上,我配对(自动工作)并连接(使用" Internet Access")和我的Linux-Device(Hotspot)。 在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
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0       *            255.255.255.0   U     0      0        0 bt-pan
123.456.78.16      *            255.255.255.252 U     0      0        0 rmnet_data0

# ip route get 192.168.10.5
192.168.10.5 via 123.456.78.18 dev rmnet_data0  src 123.456.78.17  uid 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

1 个答案:

答案 0 :(得分:0)

我从未弄清楚为什么路由无法正常工作。

幸运的是,我可以使用(Paho MQTT)设置库的SocketFactory。 因此 - 我使用ConnectivityManager找到蓝牙设备及其网络' object(提供' getSocketFactory')在MQTT中设置SocketFactory。然后连接工作。

ConnectivityManager cm =(ConnectivityManager)ctx.getSystemService(CONNECTIVITY_SERVICE);
Networks[] nets = cm.getAllNetworks();

...找到蓝牙设备并使用' getSocketFactory'。 查找蓝牙设备

cm.getNetworkInfo(network);

很有帮助