【问题标题】:Get gateway ip address in android在android中获取网关IP地址
【发布时间】:2011-09-11 09:47:27
【问题描述】:

如何获取网关 IP 详细信息,但是有使用 wifimanager 的选项。如果没有 wify 使用 usb tethering 连接时如何在 android 设备中查找网关、dns 和其他详细信息。

【问题讨论】:

  • 您可以尝试链接中提供的解决方案,该解决方案由 Muhammad Zeeshan 提供。或者您可以使用以下方法实现http跟踪...HTTP Trace
  • 您也可以使用RoutetoHost 这给出了主机的路径,第一个 IP 地址将是网关(如果没有使用代理)。
  • 研究一下Connectivity Manager
  • 实际上网关、DNS 和其他详细信息将可用,但移动运营商对移动用户隐藏。您可以查看 APN 设置以了解更多详细信息。

标签: android ip gateway


【解决方案1】:

我在 android 2.3.4 上使用 cyanogenmod 7.2,然后打开终端模拟器并输入:

$ ip addr show
$ ip route show

【讨论】:

  • 对于 Android 4.4 kitkat,我还使用了终端模拟器应用程序并输入此处提供的命令。它有效。
  • 棒棒糖 5.0.1。也适合我。
【解决方案2】:

我想将此答案发布为更新的 Android 版本 (CM11/KitKat/4.4.4) 用户的更新。我没有用 TouchWiz 或更早的 Android 版本测试过这些,所以 YMMV。

以下命令可以在所有常用位置(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,上述命令都会输出信息。

使用以下任一方法检查 wlan0 是否开启:

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}'

为了彻底起见,要获取面向 Internet 的公共 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 中)。

【讨论】:

  • Android 7.0 没有getprop dhcp
【解决方案3】:

在 Android 7 上运行:

 ip route get 8.8.8.8

输出将是: 8.8.8.8 通过网关...

【讨论】:

  • 谢谢!在大多数 Linux 系统上,netstat -rnip route show 都可以工作,但在 Android 上只有 ip route get 显示网关。
  • 就我而言,ip route show 只是输出广播地址,而ip route get 有效
【解决方案4】:

转到终端

$ adb -s UDID shell
$ ip addr | grep inet 
or
$ netcfg | grep inet

【讨论】:

  • 这篇文章被自动标记为低质量,因为它只是代码。你会通过添加一些文本来解释它是如何工作/如何解决问题的吗?
  • @gung 它没有。那只是自己分配的ip地址,不是网关地址……
【解决方案5】:

DNS服务器是通过

获取的
getprop net.dns1 

更新:从 Android Nougat 7.x 开始,ifconfig 存在,而 netcfg 消失了。所以 ifconfig 可以用来查找 IP 和网络掩码。

【讨论】:

  • 这和网关地址有什么关系?
  • “如果没有 [Wifi] 如何找到网关、dns 和其他详细信息”来自 OP.. 其他答案均未提供该详细信息。
  • 为什么这会列出我不希望我的设备使用的 DNS 服务器 (IPv6),而且它似乎更喜欢使用这些而不是它应该使用的 dhcp.wlan0.dns* 条目?跨度>
  • @rakslice 它没有。有些家用路由器的dns和网关的ip地址和路由器的地址是一样的。
【解决方案6】:

尝试以下方法:

ConnectivityManager connectivityManager = ...;
LinkProperties linkProperties = connectivityManager.getLinkProperties(connectivityManager.GetActiveNetwork());
for (RouteInfo routeInfo: linkProperties.getRoutes()) {
    if (routeInfo.IsDefaultRoute() && routeInfo.hasGateway()) {
        return routeInfo.getGateway();
    }
}

【讨论】:

  • 调用需要 API 级别 29
  • RouteInfo.hasGateway 调用是 API 级别 29,但 RouteInfo.getGateway 可能在 API 级别 21 中仍然有用。另外值得注意的是,ConnectivityManager.GetActiveNetwork 自 API 级别 29 起已弃用。跨度>
【解决方案7】:

这似乎对我很有效。在 Touchwiz 5.1、LineageOS 7.1 和 CyanogenMod 11 上测试。

ip route list match 0 table all scope global

给出类似这样的输出:

default via 192.168.1.1 dev wlan0  table wlan0  proto static

【讨论】:

    【解决方案8】:

    此解决方案将为您提供网络参数。看看这个solution

    【讨论】:

    • 您所指的解决方案使用 wifimanager,当设备未连接到 wify 时,该解决方案不起作用。当设备通过 USB 网络共享或通过 gprs 连接时如何找到这些详细信息。
    【解决方案9】:

    安装终端模拟器应用程序,然后从命令提示符查看路由表运行iproute。不需要root权限。我不知道如何获取 DNS 服务器。没有/etc/resolv.conf 文件。您可以尝试nslookup www.google.com 并查看它为您的服务器报告的内容,但在我的手机上它会报告0.0.0.0,这并没有太大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 2021-12-18
      • 2022-10-12
      • 2014-09-22
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多