确定Android VPN接口/ IP?

deb*_*cey 5 java vpn android

我正在尝试确定android中PPTP VPN接口的名称,因此我可以将其列为我的应用程序中的可绑定接口.由于Android中没有VPN API,我想我可以使用直接Java来查找它.

当我使用标准Java来获取接口列表时,即.

ArrayList<NetworkInterface>  allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
Run Code Online (Sandbox Code Playgroud)

我看到一些有趣的东西:

当手机在802.11X Wifi上时

  • tiwlan0(wifi接口)
  • ppp0(VPN)

当手机在Verizon Only上时

  • ppp0(通常是VPN)
  • ppp1(通常是VZ网络)

所以 - 我需要一种方法来消除VZ接口.您可以从Android API获取NetworkInfo对象,如下所示:

ConnectivityManager conMan = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] infoList = conMan.getAllNetworkInfo(); 
Run Code Online (Sandbox Code Playgroud)

该方法存在一些问题:

  • VPN没有显示出来
  • 网络信息对象中的名称/字段与Java NetworkInterface对象中的任何内容都不对应

我看到它的方式有几种方法可以从所有接口列表中消除VZ接口:

  1. 按名称(即如果Android给我一个列表中包含"ppp1"的话我可以消除ppp1,因为Android列表中不包含VPN)
  2. 通过IP(即,如果我能找出VZ IP地址,我可以使用Java的NetworkInterface对象消除与该IP的接口).

不幸的是,看起来这两个选项都不可能,因为名称不匹配,我无法弄清楚如何从Android操作系统获取VZ IP.

那么 - 还有其他人尝试过类似的东西吗?有没有办法问Android操作系统哪些接口有IP地址?

在此先感谢 - 所有的帮助表示赞赏.

PS.我试图避免强制用户输入要绑定的有效IP范围(或特定IP).

ajp*_*les 1

编辑:这里一种可能的选择是使用 android 本机工具包进行 JNI 系统调用。读取 /dev/ 的目录列表和 ppp* 的 grep。假设第一个是3G/4G连接,后面一个是VPN。