[英]Android VpnService - How to forward intercepted internet traffic ?
[英]Android VpnService - How to check VpnService if it was started?
我有兩個使用VpnService類的應用程序。 但是,同時只能運行一個VPN連接。 創建新接口時,現有接口將被停用,並且我希望新應用程序不啟動vpnservice以避免舊應用程序停用及其VPN連接。 所以我想在調用startService()之前檢查是否啟動了另一個vpnservice。
這有什么api嗎?
據我所知你不能直接檢查。以下是我在我的應用程序中用於檢查VPN連接的方法。
1)為http://jsonip.com進行HTTPGet調用
public static String GetDeviceIp(){
HttpGet req = new HttpGet("http://jsonip.com");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(req);
if (response.getStatusLine().getStatusCode() == 200){
ipaddress=parseJson(response.getEntity().getContent());
}else
{ ipaddress ="EMPTY" }
return ipaddress
}
2)解析json響應並從響應中提取IP地址
public static String parseJson(InputStream in)
{
String iP;
try{
String result;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
sb.append(line + "\n");
}
result = sb.toString();
JSONObject jsonObject = new JSONObject(result);
iP=jsonObject.getString("ip");
}catch (Exception e){
iP="EMPTY";
}
return iP;
}
3)比較VPN服務器Ip和提取的Ip是否相等,如果是,則VPN開啟,否則VPN關閉
public static boolean IsVPNON(){
return GetDeviceIp().equals("VPN-IP address");}
雖然上述方法有效,但它或多或少都是黑客攻擊,需要發送HTTP請求。
由於這似乎是在啟動另一個VPN之前要運行的一次性檢查,因此您可以檢查VPN網絡是否是所有可用網絡的一部分。
private boolean isAnyVpnConnected(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
Network[] networks = connectivityManager.getAllNetworks();
if (networks == null) {
return false;
}
for (Network network : networks) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) &&
!capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) {
return true;
}
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.