在安卓系统中,我能否获取路由表条目?

17

有没有一种方法可以在Android中获取路由表条目?

请分享相关信息。

6个回答

18

感谢Paul M的提示!

在我的Android 6.0.1(LineageOS)上

/system/bin/ip route show table 0

显示所有表的路由

/system/bin/ip route show table rmnet0
显示在rmnet0成为活动接口(移动数据)时使用的路由表。
/system/bin/ip route show table wlan0

显示当wlan0处于活动状态时使用的路由表。

在“开发者选项”中,即使wlan0处于活动状态,也可能保持rmnet0处于活动状态。但是同时只能使用一个接口(和一个路由表)。

当WiFi连接到网络但没有Internet链接时,将选择接口rmnet0作为主接口,并使用来自rmnet0表的路由表。

当WiFi具有Internet链接时,将使用wlan0作为主接口,并使用“ip route show table wlan0”作为当前路由表。

您可以通过将“table xxx”添加到路由字符串中来像往常一样使用ip命令添加或删除任何路由表中的路由。

例如:

/system/bin/ip route delete table wlan0 default via 192.168.7.1 dev wlan0  proto static
/system/bin/ip route add table wlan0 192.168.7.0/24 dev wlan0 proto kernel scope link src 192.168.7.10 metric 327

每次接口上下线、租约续订等操作都会覆盖所有路由表。


在Android平台上,这个答案提供的信息比其他命令(“route”或“netstat”)更多。 - Tzunghsing David Wong
在我的两台Linux桌面电脑(LM19 + Fedora 33)和使用Termux(来自F-Droid)的Android设备上,ip -4 route show table 0 | grep 'default via' | grep wlan0 都能正常工作。我有一个脚本想要在桌面电脑和手机之间共享,所以这非常完美。 - zpangwin
有没有办法同时启用 WLAN 和 RMNET,但在 RMNET 数据上激活默认路由?我相信有,但我不知道怎么做... - Zibri

14

可以通过 ADB 获取它。

使用以下命令可以获取路由表:

$ cat /proc/net/route

你也可以在程序中执行这些命令。我找到了这篇文章来讨论这个选项,但是没有答案。如果你能详细说明最终想要的是什么,我可以编辑我的回答并尽力帮助你。

这可能是一条复杂但有用的链接 :)


请问您能否提供一下命令`adb cat /proc/net/route'没有运行的情况。 - Vivo
@sealz 我怎么才能以编程的方式来写这个? - Umang Kothari
"可能很复杂但可能有用的链接"的链接已经失效。 - Daniele Ricci

7
adb shell "ip route show"

我发现使用解析更加有用且易于处理。


4

使用Android设备桥(ADB)

  • 打开命令提示符(Windows)或终端(Mac和Linux)

  • 使用cd命令切换到android sdk目录下的platform-tools目录

  • Windows

    adb shell cat /proc/net/route

    Mac和Linux

    ./adb shell cat /proc/net/route


你可以安装以下APK,它会给你提供很多信息 https://play.google.com/store/apps/details?id=com.mankind.ipconfig&hl=en - Durai Amuthan.H

3

Android没有只使用一个路由表,因此查看默认或主要表并不总是有用的!

如果您运行命令“ip rule list”,则会看到有多少个路由表;“lookup nnnn”是表格。然后,您可以使用“ip route show table 1006”查看特定表。

很抱歉我无法告诉您哪个路由表一定是您想查看的。


0

只需安装Termux或其他适用于安卓的终端模拟器,即可愉快地使用 shell。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接