如何获得网关IP详细信息, 使用Wifimanager是一种选项,但是如果没有WiFi,当通过USB网络共享连接Android设备时如何找到网关、DNS和其他详细信息。
如何获得网关IP详细信息, 使用Wifimanager是一种选项,但是如果没有WiFi,当通过USB网络共享连接Android设备时如何找到网关、DNS和其他详细信息。
我正在使用安卓2.3.4上的CyanogenMod 7.2,然后只需打开终端模拟器并输入:
$ ip addr show
$ ip route show
在 Android 7 上可以工作:
ip route get 8.8.8.8
输出结果将为: 通过网关 8.8.8.8 ...
netstat -rn
或ip route show
都可以工作,但在Android上只有ip route get
会显示网关。 - tmm1ip route show
只输出广播地址,而 ip route get
可以正常工作。 - Yeung我想把这个答案发布为近期Android版本(CM11/KitKat/4.4.4)用户的更新。我没有在TouchWiz或旧的Android版本上测试过,所以可能会有差异。
以下命令可以在所有常规位置运行(ADB、终端模拟器、shell脚本、Tasker)。
列出所有可用属性:
getprop
获取WiFi接口:
getprop wifi.interface
WiFi属性:
getprop dhcp.wlan0.dns1
getprop dhcp.wlan0.dns2
getprop dhcp.wlan0.dns3
getprop dhcp.wlan0.dns4
getprop dhcp.wlan0.domain
getprop dhcp.wlan0.gateway
getprop dhcp.wlan0.ipaddress
getprop dhcp.wlan0.mask
以上命令将输出信息,无论WiFi是否实际连接。ifconfig wlan0
netcfg | awk '{if ($2=="UP" && $3 != "0.0.0.0/0") isup=1} END {if (! isup) exit 1}'
使用以下任一方法获取wlan0的IP地址(仅在其已连接时):
ifconfig wlan0 | awk '{print $3}'
netcfg | awk '/^wlan0/ {sub("(0\\.0\\.0\\.0)?/[0-9]*$", "", $3); print $3}'
为了全面准确地获取您的公网IP地址,您需要使用外部服务。要获取您的公网IP,请执行以下操作:
wget -qO- 'http://ipecho.net/plain'
获取你的公共主机名:
wget -qO- 'http://ifconfig.me/host'
或者直接通过你的IP地址获取你的公共主机名:
(nslookup "$(wget -qO- http://ipecho.net/plain)" | awk '/^Address 1: / { if ($NF != "0.0.0.0") {print $NF; exit}}; /name =/ {sub("\\.$", "", $NF); print $NF; exit}') 2>/dev/null
注意:上述的 awk
命令似乎过于复杂,只是因为它能够处理来自不同版本的 nslookup
的输出。Android 包含了一个最简版本的 nslookup
作为 busybox
的一部分,但也有一个独立的版本(通常包含在 dnsutils
中)。
getprop dhcp
命令。 - Aero Wang打开终端
$ adb -s UDID shell
$ ip addr | grep inet
or
$ netcfg | grep inet
DNS服务器是通过以下方式获取的
getprop net.dns1
更新:从Android Nougat 7.x开始,ifconfig已经存在,而netcfg已经消失。因此,可以使用ifconfig来查找IP和网络掩码。
请尝试以下方法:
ConnectivityManager connectivityManager = ...;
LinkProperties linkProperties = connectivityManager.getLinkProperties(connectivityManager.GetActiveNetwork());
for (RouteInfo routeInfo: linkProperties.getRoutes()) {
if (routeInfo.IsDefaultRoute() && routeInfo.hasGateway()) {
return routeInfo.getGateway();
}
}
RouteInfo.hasGateway
调用是 API 级别 29,但 RouteInfo.getGateway
在 API 级别 21 仍然有用。另外需要注意的是,ConnectivityManager.GetActiveNetwork
已在 API 级别 29 中被弃用。 - Brentip route list match 0 table all scope global
default via 192.168.1.1 dev wlan0 table wlan0 proto static
这个解决方案将为您提供网络参数。请查看此解决方案
安装终端模拟器应用程序,然后从命令提示符中运行iproute
以查看路由表。不需要root权限。我不知道如何获取DNS服务器。没有/etc/resolv.conf
文件。您可以尝试nslookup www.google.com
并查看它对您的服务器报告了什么,但在我的手机上,它报告了0.0.0.0
,这并不太有帮助。