Определение Android VPN интерфейса / IP? - PullRequest
5 голосов
/ 27 февраля 2011

Я пытаюсь определить имя интерфейса PPTP VPN в Android, чтобы я мог указать его в качестве привязываемого интерфейса в моем приложении.Поскольку в Android нет VPN API для этого - я подумал, что мог бы использовать прямую Java, чтобы найти ее.

Когда я делаю вашу стандартную Java, чтобы получить список интерфейсов, т. Е.

ArrayList<NetworkInterface>  allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

Я вижу несколько интересных вещей:

Когда телефон работает по 802.11X Wi-Fi

  • tiwlan0 (интерфейс wifi)
  • ppp0 (VPN)

Когда телефон работает только на Verizon

  • ppp0 (обычно VPN)
  • ppp1 (обычно сеть VZ)

Итак - мне нужен способ устранить интерфейс VZ.Вы можете получить объекты NetworkInfo из Android API следующим образом:

ConnectivityManager conMan = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] infoList = conMan.getAllNetworkInfo(); 

Есть несколько проблем с этим методом:

  • VPN не отображается
  • Имена / поля в объектах информации о сети не соответствуют чему-либо в объекте Java NetworkInterface

На мой взгляд, есть несколько способов исключить интерфейс VZ из списка всех интерфейсов.:

  1. Сделайте это по имени (т. Е. Если бы Android дал мне список, в котором было "ppp1", я мог бы удалить ppp1, так как список Android никогда не содержит VPN)
  2. Сделайте это по IP (то есть, если бы я мог определить IP-адрес VZ, я мог бы исключить интерфейс с этим IP, используя объект NetworkInterface Java.)

К сожалению, это не похоже налюбой из этих вариантов возможен, поскольку имена не совпадают, и я не могу понять, как получить IP-адрес VZ от ОС Android.

Итак, кто-нибудь еще пробовал что-то подобное?Есть ли способ спросить у ОС Android, какие интерфейсы имеют IP-адреса?

Заранее спасибо - вся помощь приветствуется.

Дан

PS.Я пытаюсь не заставлять пользователя вводить допустимый диапазон IP-адресов (или определенный IP-адрес) для привязки.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

РЕДАКТИРОВАТЬ: Один возможный вариант здесь, чтобы сделать вызов системы JNI с родной комплект Android.Прочитайте список каталогов / dev / и grep для ppp *.Предположим, что самым ранним из них является соединение 3G / 4g, а последним - VPN.

0 голосов
/ 04 марта 2011

Обнаружено, что это невозможно при использовании текущего API (10).Сообщение об ошибке / запрос функции:

http://code.google.com/p/android/issues/detail?id=15082

...