【问题标题】:Retrieve default gateway of android phone检索安卓手机的默认网关
【发布时间】:2011-11-21 06:29:24
【问题描述】:

我在 android 中编写本机应用程序,我需要在我的应用程序上获取设备的默认网关。这是我当前获取默认网关的代码。

static int get_default_gateway(char *def_gateway, int buf_size)
{
    FILE* pipe;
    char buffer[128];
    char result[2049];

    char cmd[] = "netstat -r | grep ^default | awk '{print $2}'";

    pipe = popen(cmd, "r");
    if (!pipe) return 1;

    memset(result, 0, sizeof(result));

    while(!feof(pipe)) {
        memset(buffer, 0, sizeof(buffer));
        if(fgets(buffer, 128, pipe) != NULL)
        {
              strcat(result, buffer);
        }       
    }
    pclose(pipe);

    memset(def_gateway, 0, buf_size);
    strncpy (def_gateway, result, buf_size );

    return 0;
}

它适用于我的 LG p500,但在某些设备上它不会返回任何内容。

我的问题是:popen() 是否适用于 android?我在某处读到它不包含在仿生中。

还有其他获取默认网关的方法吗?我需要它是用 C 而不是 java 编写的。

谢谢

【问题讨论】:

    标签: android linux networking android-ndk gateway


    【解决方案1】:

    是的,popen() 可能适用于任何 Android。但不幸的是 grep 和 awk - 不是。查看 /proc/net/route - Destination 等于 00000000 的行是您的默认网关。也许你也可以使用 NETLINK_ROUTE 套接字,虽然我从来没有使用过,也不能多说。

    另见this related question

    【讨论】:

    • 谢谢,我相信 grep 和 awk 是问题所在。
    • 另请注意,并非所有 Android 设备都有支持 -r 的 netstat 实现。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多