我正在用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。
谢谢
发布于 2011-11-21 20:08:31
是的,popen()可能在任何Android上都可以工作。但不幸的是grep和awk -不是。看看/proc/net/route - line,其中Destination equals to 00000000是您的默认网关。也许你可以使用NETLINK_ROUTE套接字,尽管我从来没有用过它,也不能说更多。
https://stackoverflow.com/questions/8208074
复制相似问题