检索android手机的默认网关

时间:2011-11-21 06:29:25

标签: android linux networking android-ndk gateway

我在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编写。

谢谢

1 个答案:

答案 0 :(得分:1)

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

另见this related question