diff --git a/app/src/main/java/com/pkusz/min_vpn_client/GlobalSetting.java b/app/src/main/java/com/pkusz/min_vpn_client/GlobalSetting.java index 1421746..6cfb889 100644 --- a/app/src/main/java/com/pkusz/min_vpn_client/GlobalSetting.java +++ b/app/src/main/java/com/pkusz/min_vpn_client/GlobalSetting.java @@ -17,5 +17,5 @@ public class GlobalSetting { public static boolean openFirewall = true; // 控制是否打开签名 - public static boolean openSig = true; + public static boolean openSig = false; } diff --git a/app/src/main/java/com/pkusz/min_vpn_client/activity/login/LoginActivity.java b/app/src/main/java/com/pkusz/min_vpn_client/activity/login/LoginActivity.java index 820bc5f..2257bfb 100644 --- a/app/src/main/java/com/pkusz/min_vpn_client/activity/login/LoginActivity.java +++ b/app/src/main/java/com/pkusz/min_vpn_client/activity/login/LoginActivity.java @@ -104,8 +104,8 @@ public class LoginActivity extends MINVpnBaseActivity imageView_imgLogo=findViewById(R.id.imgLogo); savePasswordBox=findViewById(R.id.savePasswordBox); // tvLoginWithSMS = findViewById(R.id.tvLoginWithSMS); - tvRegisterNow=findViewById(R.id.tvRegisterNow); - tvResetNow=findViewById(R.id.tvResetNow); +// tvRegisterNow=findViewById(R.id.tvRegisterNow); +// tvResetNow=findViewById(R.id.tvResetNow); etUsername=findViewById(R.id.etUsername); btnLogin=findViewById(R.id.btnLogin); etPassword=findViewById(R.id.etPassword); @@ -158,16 +158,16 @@ public class LoginActivity extends MINVpnBaseActivity // }); // 监听注册按钮 - tvRegisterNow.setOnClickListener(v -> { - System.out.println("即将跳转到注册界面"); - ContextExtensionKt.jumpTo(this, RegisterActivity.class); - }); +// tvRegisterNow.setOnClickListener(v -> { +// System.out.println("即将跳转到注册界面"); +// ContextExtensionKt.jumpTo(this, RegisterActivity.class); +// }); // 监听重置密码按钮 - tvResetNow.setOnClickListener(v -> { - System.out.println("即将跳转到重置界面"); - ContextExtensionKt.jumpTo(this, ResetActivity.class); - }); +// tvResetNow.setOnClickListener(v -> { +// System.out.println("即将跳转到重置界面"); +// ContextExtensionKt.jumpTo(this, ResetActivity.class); +// }); // 显示账号 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -215,6 +215,7 @@ public class LoginActivity extends MINVpnBaseActivity // 2. 解密身份数据 byte[] prikeyRawByte = IdentityEncryptedUtil.hexDecodeString(identityInfo.getString("PrikeyEncrypted")); +// byte[] prikeyRawByte = IdentityEncryptedUtil.decryptedIdentity(rawUsername,rawUsername,identityInfo.getBytes("encryptedIdentityData")); System.out.println("十六进制转换后字符串:"+new String(prikeyRawByte)); Identity identity = new Identity(); identity.setName(identityInfo.getString("IdentityIdentifier")); @@ -248,7 +249,6 @@ public class LoginActivity extends MINVpnBaseActivity if(isSuccess)break; }catch (Exception e){ System.out.println("解密出现异常!!!"); -// e.printStackTrace(); continue; } } @@ -257,11 +257,13 @@ public class LoginActivity extends MINVpnBaseActivity System.out.println("身份unLock失败!"); return; } + System.out.println("unlock身份成功!"); } //4. 保存身份至本地 try { KeyManager.INSTANCE.getKeyChain().getIdentifyManager().saveIdentity(identity,true,false); + System.out.println("成功保存至本地"); } catch (Exception e) { System.out.println("保存身份失败!!"); } @@ -269,6 +271,8 @@ public class LoginActivity extends MINVpnBaseActivity boolean testFlag=false; String password = "YouAreTesting!"; + + if(!testFlag){ if (rawUsername.isEmpty() || rawPassword.isEmpty()) { showWarning("请将信息填写完整"); diff --git a/app/src/main/java/com/pkusz/min_vpn_client/activity/main/MainActivity.java b/app/src/main/java/com/pkusz/min_vpn_client/activity/main/MainActivity.java index 1b92092..3d0203c 100644 --- a/app/src/main/java/com/pkusz/min_vpn_client/activity/main/MainActivity.java +++ b/app/src/main/java/com/pkusz/min_vpn_client/activity/main/MainActivity.java @@ -56,8 +56,8 @@ public class MainActivity extends MINVpnBaseActivity private TextView VPNstatus; private RadioGroup etProxyMode; // private RadioButton ruleProxy; - private RadioButton globalProxy; - private RadioButton serverSettingProxy; +// private RadioButton globalProxy; +// private RadioButton serverSettingProxy; private SpinKitView spinKit; private TinImageView btnConnect; @@ -70,8 +70,8 @@ public class MainActivity extends MINVpnBaseActivity VPNstatus=findViewById(R.id.VPNstatus); etProxyMode=findViewById(R.id.etProxyMode); // ruleProxy=findViewById(R.id.ruleProxy); - globalProxy=findViewById(R.id.globalProxy); - serverSettingProxy=findViewById(R.id.serverSettingProxy); +// globalProxy=findViewById(R.id.globalProxy); +// serverSettingProxy=findViewById(R.id.serverSettingProxy); spinKit=findViewById(R.id.spinKit); btnConnect=findViewById(R.id.btnConnect); @@ -108,11 +108,11 @@ public class MainActivity extends MINVpnBaseActivity // 根据MINVpnAPI显示当前VPN的模式 int flag= MINVpnSettingAPI.INSTANCE.getProxyMode(); - if(flag==1){ - etProxyMode.check(globalProxy.getId()); // 全局,外网 - }else if(flag==2){ - etProxyMode.check(serverSettingProxy.getId());// 服务器设定,内网 - } +// if(flag==1){ +// etProxyMode.check(globalProxy.getId()); // 全局,外网 +// }else if(flag==2){ +// etProxyMode.check(serverSettingProxy.getId());// 服务器设定,内网 +// } etProxyMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override @@ -139,12 +139,12 @@ public class MainActivity extends MINVpnBaseActivity // 执行连接流程 connectVpn(); // 更新选定的模式 - int cacheflag=etProxyMode.getCheckedRadioButtonId(); - if(cacheflag==globalProxy.getId()){ - MINVpnSettingAPI.INSTANCE.updateProxyMode(1); // 全局 - }else if(cacheflag==serverSettingProxy.getId()){ - MINVpnSettingAPI.INSTANCE.updateProxyMode(2);// 服务器设定 - } +// int cacheflag=etProxyMode.getCheckedRadioButtonId(); +// if(cacheflag==globalProxy.getId()){ +// MINVpnSettingAPI.INSTANCE.updateProxyMode(1); // 全局 +// }else if(cacheflag==serverSettingProxy.getId()){ +// MINVpnSettingAPI.INSTANCE.updateProxyMode(2);// 服务器设定 +// } }else{ // 执行断开流程 disconnectVpn(); diff --git a/app/src/main/java/com/pkusz/min_vpn_client/activity/setting/SettingActivity.java b/app/src/main/java/com/pkusz/min_vpn_client/activity/setting/SettingActivity.java index 9cd2bc6..9ac552b 100644 --- a/app/src/main/java/com/pkusz/min_vpn_client/activity/setting/SettingActivity.java +++ b/app/src/main/java/com/pkusz/min_vpn_client/activity/setting/SettingActivity.java @@ -35,21 +35,21 @@ public class SettingActivity extends MINVpnBaseActivity{ @@ -131,97 +131,97 @@ public class SettingActivity extends MINVpnBaseActivity networkResponse = new AtomicReference<>(); + System.out.println("mis主机ip:"+MINVpnSettingAPI.INSTANCE.getMisIpAddress()); Thread netRequestThread = new Thread(() -> { MIS_API mis_api = new MIS_API(MINVpnSettingAPI.INSTANCE.getMisIpAddress(), MINVpnSettingAPI.INSTANCE.getMisTcpPort(), MINVpnSettingAPI.INSTANCE.getMisSslPort()); @@ -165,6 +166,7 @@ public enum MISRequestAPI { System.out.println("加密身份:"+jsonObject.getString("PrikeyEncrypted")); // base64解码 byte[] encryptedIdentity= Base64Helper.Base64BasicDecode(resIdentity); + jsonObject.put("encryptedIdentity",encryptedIdentity); return jsonObject; // diff --git a/app/src/main/java/com/pkusz/min_vpn_client/services/VpnIntranetPreparation.java b/app/src/main/java/com/pkusz/min_vpn_client/services/VpnIntranetPreparation.java index f86ec3b..424e69e 100644 --- a/app/src/main/java/com/pkusz/min_vpn_client/services/VpnIntranetPreparation.java +++ b/app/src/main/java/com/pkusz/min_vpn_client/services/VpnIntranetPreparation.java @@ -24,6 +24,8 @@ import com.pkusz.min_vpn_client.utils.KeyManager; import com.pkusz.min_vpn_client.utils.SM2HelperForConnection; import com.pkusz.min_vpn_client.utils.SM3HelperForConnection; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Set; @@ -318,6 +320,7 @@ public class VpnIntranetPreparation implements VpnPreparationInterface{ break; case 'd': // dns服务器 builder.addDnsServer(fields[1]); +// addRoutesExcept(builder, fields[1], 32); break; case 's': builder.addSearchDomain(fields[1]); @@ -364,6 +367,23 @@ public class VpnIntranetPreparation implements VpnPreparationInterface{ return vpnInterface; } + private void addRoutesExcept(VpnService.Builder builder, String address, int prefixLength) { + try { + byte[] bytes = InetAddress.getByName(address).getAddress(); + for (int i = 0; i < prefixLength; i++) { // each entry + byte[] res = new byte[bytes.length]; + for (int j = 0; j <= i; j++) { // each prefix bit + res[j / 8] = (byte) (res[j / 8] | (bytes[j / 8] & (1 << (7 - (j % 8))))); + } + res[i / 8] ^= (1 << (7 - (i % 8))); + + builder.addRoute(InetAddress.getByAddress(res), i + 1); + } + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } + /** * 生成一个连接指定服务器地址的TCP LogicFace,并进行标识注册 * @param hostIP diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 5a24718..c752dcf 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -72,29 +72,29 @@ app:right_drawable="@drawable/delete" app:tinColor="@color/light_grey" /> - + + + + + + + + + + + - + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c6e576d..07b497a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -79,21 +79,21 @@ - + + + + + + + - + + + + + + + diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index c0e3005..604a00b 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -63,293 +63,293 @@ app:layout_constraintTop_toBottomOf="@id/tvDecoration2" /> - + + + + + - + + + + + + + - + + + + + + + + - - + + + + + + - + + + + + + + - + + + + + + + + - - - + + + + + + + - + + + + + + + - + + + + + + + + - - - + + + + + + + + + + + + + - + + + + + + + + + - - + + + + + + - + + + + + + + - + + + + + + + + - - + + + + + + - + + + + + + + - + + + + + + + + - - + + + + + + - + + + + + + + - + + + + + + + + - - - + + + + + + + + + + + + + - + + + + + + + + + - - - + + + + + + + + + + + + + - + + + + + + + + + - - + + + + + + - + + + + + + + - + + + + + + + + - - - + + + + + + + + + + + + + - + + + + + + + + + - - - + + + + + + + + + + + + + - + + + + + + + + +