Android Can';t ping网关(如果接入点没有internet连接)
在我的应用程序中,我通过Android Can';t ping网关(如果接入点没有internet连接),android,sockets,android-wifi,Android,Sockets,Android Wifi,在我的应用程序中,我通过WifiManager和WifiConfiguration以编程方式连接到无法访问互联网的接入点。后来,我不得不访问一个连接到它的设备来读取数据——但我没有走那么远 连接到Wifi后,我的DHCP设置正常,但如果我尝试通过键入以下内容ping网关地址: $ adb shell OnePlus6:/ $ ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. ^C --- 192.168.1
WifiManager
和WifiConfiguration
以编程方式连接到无法访问互联网的接入点。后来,我不得不访问一个连接到它的设备来读取数据——但我没有走那么远
连接到Wifi后,我的DHCP设置正常,但如果我尝试通过键入以下内容ping网关地址:
$ adb shell
OnePlus6:/ $ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1015ms
网关无法检查
我怀疑这与Android(9?)将所有流量重新路由到移动数据的情况有关,例如,你仍然可以浏览互联网
您可以很容易地复制这样的问题:
connectionManager = (ConnectivityManager)
context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectionManager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() {
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectionManager.bindProcessToNetwork(network);
} else {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
});
adb
连接您的手机,并ping您的AP地址OnePlus6:/ $ ip route show
10.16.52.64/29 dev rmnet_data0 proto kernel scope link src 10.16.52.67
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.116
好的,我找到了解决办法。必须将当前进程绑定到正确的网络,可以这样做:
connectionManager = (ConnectivityManager)
context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectionManager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() {
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectionManager.bindProcessToNetwork(network);
} else {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
});
您的Android设备是否在wifi连接之上也有数据连接?是的,移动数据总是一次可添加以下命令的结果?ip路由显示(在adb外壳中运行)是的,请查看我的编辑。这很奇怪,路由表似乎还可以。您是否已经尝试跟踪ping数据包的跳数?尝试一个到192.168.1.1的跟踪路由,这样我们就可以看到流量是如何定向的