2011-11-21 96 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