Получить шлюз по умолчанию для телефона Android - PullRequest
0 голосов
/ 21 ноября 2011

Я кодирую нативное приложение в 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 Ответ

1 голос
/ 21 ноября 2011

Да, возможно popen () должен работать на любом Android.Но, к сожалению, grep и awk - нет.Посмотрите / proc / net / route - строка, где Destination равен 00000000 - это ваш шлюз по умолчанию.Также, возможно, вы можете использовать сокет NETLINK_ROUTE, хотя я никогда не использовал его и не могу сказать больше.

См. Также этот связанный вопрос .

...