我正在尝试确定安卓系统中PPTP VPN接口的名称,以便在我的应用程序中将其列为可绑定接口。由于安卓系统没有VPN API可以实现这一点,我想我可以使用纯Java来找到它。
当我使用标准的Java代码获取接口列表时,例如:
当我使用标准的Java代码获取接口列表时,例如:
ArrayList<NetworkInterface> allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
我看到了一些有趣的事情:
当手机连接802.11X Wifi时
- tiwlan0(wifi接口)
- ppp0(VPN)
当手机只连接Verizon时
- ppp0(VPN,通常为此)
- ppp1(VZ网络,通常为此)
所以 - 我需要一种方法来消除VZ接口。您可以通过Android API获取NetworkInfo对象,如下所示:
ConnectivityManager conMan = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] infoList = conMan.getAllNetworkInfo();
这种方法存在一些问题:
- VPN不会显示
- 网络信息对象中的名称/字段与Java NetworkInterface对象中的任何内容都不对应
我认为有几种方法可以从所有接口列表中消除VZ接口:
- 按名称(即,如果Android给了我一个包含“ppp1”的列表,我可以消除ppp1,因为Android列表永远不包含VPN)
- 按IP(即,如果我能找出VZ IP地址,则可以使用Java的NetworkInterface对象消除具有该IP的接口。)
不幸的是,似乎这两个选项都不可能,因为名称不匹配,而且我无法弄清楚如何从Android OS获取VZ IP。
那么,还有其他人尝试过类似的事情吗?是否有一些方法可以询问Android OS哪些接口具有IP地址?
提前感谢您的帮助。
Dan
附:我正在尝试避免强制用户输入有效的IP范围(或特定IP)来绑定。