2011-11-21 54 views
0

我在android中编写本机应用程序,我需要在我的应用程序中获取设备的默认网关。这是我现在的代码来获取默认网关。检索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

是的,可能popen()应该可以在任何Android上工作。但不幸的是,grep和awk - 不是。看看/ proc/net/route - 行,其中Destination等于00000000是您的默认网关。也许你可以使用NETLINK_ROUTE套接字,尽管我从来没有使用它,不能多说。请参阅this related question

+0

谢谢我相信grep和awk是问题所在。 – kuchi

+0

请注意,并非所有的Android设备都支持-r的netstat实现。 – bleater