2011-11-21 2 views
0

나는 안드로이드에서 네이티브 응용 프로그램을 코딩하고 있으며 응용 프로그램에서 장치의 기본 게이트웨이를 가져와야합니다. 다음은 현재 게이트웨이에서 기본 게이트웨이를 가져 오는 코드입니다.안드로이드 전화의 기본 게이트웨이 검색

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에서 작동합니까? 나는 그것이 생체 공학에 포함되지 않은 어딘가를 읽었다.

기본 게이트웨이를 가져 오는 다른 방법이 있습니까? 나는 그것을 java가 아닌 C로 작성해야한다.

고맙습니다.

답변

1

그래, 아마도 popen()은 모든 Android에서 작동해야합니다. 그러나 불행하게도 grep과 awk는 그렇지 않습니다./proc/net/route - 행을 살펴보십시오. 여기서 Destination은 00000000이 기본 게이트웨이입니다. 또한 NETLINK_ROUTE 소켓을 사용할 수도 있지만 사용하지는 않았지만 더 말할 수는 없습니다.

도 참조하십시오. this related question.

+0

감사합니다. grep과 awk가 문제라고 생각합니다. – kuchi

+0

모든 Android 장치가 -r을 지원하는 netstat 구현을 가지고있는 것은 아닙니다. – bleater

관련 문제