mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-06-18 04:50:25 +08:00
添加了解析getVPNInfo()的方法,放在了example目录下,已测试通过
This commit is contained in:
@@ -10,7 +10,7 @@ import VMSConnection.TCPNet.Message.BaseStruct;
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class VpnServerInfoRequest extends BaseStruct {
|
||||
public int ID;
|
||||
public int ID; // 本结构体的这个字段其实没用到
|
||||
public String Name;
|
||||
|
||||
public VpnServerInfoRequest(int ID,String name){
|
||||
|
||||
@@ -31,7 +31,7 @@ class SSL_Message extends BaseStruct {
|
||||
public int IsEncrypted=0;
|
||||
public int MType=0;
|
||||
public byte[] Data;
|
||||
public String Nonce ="";
|
||||
public String Nonce =""; // 本结构体的这个字段其实没用到
|
||||
public int Code=0;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package examples;
|
||||
import VMSConnection.BC_API;
|
||||
import VMSConnection.Model.LoginWithSignRequest;
|
||||
import VMSConnection.Model.RegisterWithSignRequest;
|
||||
import VMSConnection.Model.VpnServerInfoRequest;
|
||||
import VMSConnection.Security.BC_KeyManager;
|
||||
import VMSConnection.TCPNet.Message.NetworkResponse;
|
||||
import VMSConnection.Utils.Base64Helper;
|
||||
@@ -30,7 +31,7 @@ public class VPNLoginExample {
|
||||
// 身份信息保存位置
|
||||
public static String identityPath="D:\\TEST\\Identitys\\";
|
||||
// 用户名
|
||||
public static String username="freewill111";
|
||||
public static String username="freesajgl111";
|
||||
// VMS发送来的证书的密码
|
||||
public static byte[] certPasswd="123456".getBytes(StandardCharsets.UTF_8);
|
||||
// 基于用户名的用户身份标识
|
||||
@@ -38,7 +39,7 @@ public class VPNLoginExample {
|
||||
// 注册用户的IP
|
||||
public static String vms_ip="121.15.171.91";
|
||||
// 注册邮箱
|
||||
public static String email="2555627323s111@163.com";
|
||||
public static String email="25556272asjys111@163.com";
|
||||
|
||||
/**
|
||||
* 生成本地密钥,持久化存储到本地硬盘
|
||||
@@ -47,7 +48,7 @@ public class VPNLoginExample {
|
||||
*/
|
||||
public void generateForeverIdentity(String username,String identityPath){
|
||||
// identityName是将username进行base64编码,然后加上"/"
|
||||
String identityName="/"+Base64Helper.Base64PlusEncode(username);
|
||||
String identityName="/"+username;
|
||||
KeyManagerExample.INSTANCE.initKeyChain(identityName,identityPath);
|
||||
}
|
||||
|
||||
@@ -124,15 +125,15 @@ public class VPNLoginExample {
|
||||
.getBytes(),StandardCharsets.UTF_8);
|
||||
System.out.println("pubkey: "+pubKey);
|
||||
// 测试验签
|
||||
try {
|
||||
boolean r=KeyManagerExample.INSTANCE.getKeyChain().getCurrentIdentity().verify(
|
||||
username.getBytes(StandardCharsets.UTF_8),registerSign);
|
||||
System.out.println("测试验签结果:"+r);
|
||||
} catch (IdentityException | AsymKeyException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
boolean rr=new BC_KeyManager().Verify(username.getBytes(StandardCharsets.UTF_8),new String(registerSign),pubKey);
|
||||
System.out.println("测试验签结果2:"+rr);
|
||||
// try {
|
||||
// boolean r=KeyManagerExample.INSTANCE.getKeyChain().getCurrentIdentity().verify(
|
||||
// username.getBytes(StandardCharsets.UTF_8),registerSign);
|
||||
// System.out.println("测试验签结果:"+r);
|
||||
// } catch (IdentityException | AsymKeyException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// boolean rr=new BC_KeyManager().Verify(username.getBytes(StandardCharsets.UTF_8),new String(registerSign),pubKey);
|
||||
// System.out.println("测试验签结果2:"+rr);
|
||||
|
||||
// 3. 构造注册请求包
|
||||
RegisterWithSignRequest request=new RegisterWithSignRequest(1,username,"password",
|
||||
@@ -172,10 +173,16 @@ public class VPNLoginExample {
|
||||
// 2. 签名(签名用户名) & 证书(用户本地保存的证书,注册时接收到的VMS数据)
|
||||
byte[] loginSign= vpnExample.signBytes(username);
|
||||
String cert=vpnExample.exportVMSCert(certPasswd);
|
||||
System.out.println("证书取出: "+cert);
|
||||
|
||||
// 3. 构造登录请求包
|
||||
LoginWithSignRequest loginWithSignRequest=new LoginWithSignRequest(username,
|
||||
"password",cert,loginSign);
|
||||
try {
|
||||
System.out.println("login request: "+loginWithSignRequest.toJson());
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// 4. 调用bc-api,进行登录
|
||||
BC_API bc_api=new BC_API();
|
||||
@@ -190,9 +197,46 @@ public class VPNLoginExample {
|
||||
System.out.println(networkResponse.Code);
|
||||
}
|
||||
|
||||
public VpnServerInfoListExample testGetVPNInfo(){
|
||||
// 1. 生成用户的公钥私钥(有则直接取出)
|
||||
VPNLoginExample vpnExample=new VPNLoginExample();
|
||||
vpnExample.generateForeverIdentity(username,identityPath);
|
||||
|
||||
// 2. 构造vpnserver信息请求包
|
||||
VpnServerInfoRequest vpnServerInfoRequest=new VpnServerInfoRequest(1233,username);
|
||||
try {
|
||||
System.out.println("vpn request: "+vpnServerInfoRequest.toJson());
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// 3. 调用bc-api,进行信息获取
|
||||
BC_API bc_api=new BC_API();
|
||||
bc_api.ip=vms_ip;
|
||||
// 获取vpnserver信息
|
||||
NetworkResponse networkResponse3=bc_api.getVpnServerInfo(vpnServerInfoRequest);
|
||||
try {
|
||||
System.out.println("获取vpn信息的应答: "+networkResponse3.toJson());
|
||||
System.out.println("获取到的vpn信息: "+new String(networkResponse3.Data));
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println(networkResponse3.Code);
|
||||
|
||||
// 4. 解析应答
|
||||
VpnServerInfoListExample list=new VpnServerInfoListExample();
|
||||
boolean flag=list.parseToVpnInfoList(networkResponse3.Data);
|
||||
if(flag){
|
||||
return list;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 测试注册登录
|
||||
public static void main(String[] args){
|
||||
new VPNLoginExample().testRegister();
|
||||
// new VPNLoginExample().testRegister();
|
||||
// new VPNLoginExample().testLogin();
|
||||
VpnServerInfoListExample infoList = new VPNLoginExample().testGetVPNInfo();
|
||||
System.out.println(infoList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package examples;
|
||||
|
||||
import VMSConnection.TCPNet.Message.BaseStruct;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description:
|
||||
* @Version: 1.0.0
|
||||
* @Date: 17:26 2021/8/4
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class VpnServerInfoExample extends BaseStruct {
|
||||
public int ID;
|
||||
public String Name;
|
||||
public String ClientPrefix;
|
||||
public boolean IsInner;
|
||||
public int Mtu;
|
||||
public String IP;
|
||||
public int Port;
|
||||
public String RemotePrefix;
|
||||
public String InnerIP;
|
||||
public int UGroupID;
|
||||
public String TimeStamp;
|
||||
|
||||
/**
|
||||
* 解析并获取InnerIP列表
|
||||
* 例子:"10.0.0.0/24, 172.16.0.0/12, 192.168.0.0/16"
|
||||
* @return
|
||||
*/
|
||||
public ArrayList<String> getInnerIPList(){
|
||||
ArrayList<String> res=new ArrayList<>();
|
||||
if(InnerIP.equals("")){
|
||||
return res;
|
||||
}
|
||||
for (String ipAndMask:
|
||||
InnerIP.split(", ")) {
|
||||
res.add(ipAndMask);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "VpnServerInfoExample{" +
|
||||
"ID=" + ID +
|
||||
", Name='" + Name + '\'' +
|
||||
", ClientPrefix='" + ClientPrefix + '\'' +
|
||||
", IsInner=" + IsInner +
|
||||
", Mtu=" + Mtu +
|
||||
", IP='" + IP + '\'' +
|
||||
", Port=" + Port +
|
||||
", RemotePrefix='" + RemotePrefix + '\'' +
|
||||
", InnerIP='" + InnerIP + '\'' +
|
||||
", UGroupID=" + UGroupID +
|
||||
", TimeStamp='" + TimeStamp + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package examples;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description:
|
||||
* @Version: 1.0.0
|
||||
* @Date: 17:28 2021/8/4
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class VpnServerInfoListExample {
|
||||
private ArrayList<VpnServerInfoExample> vpnServerInfoList=new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 将json数组解析为VPNInfoList
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public boolean parseToVpnInfoList(byte[] data){
|
||||
try {
|
||||
vpnServerInfoList.clear();
|
||||
JSONArray jsonArray = JSONArray.parseArray(new String(data));
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
VpnServerInfoExample vpnserverinfo = new VpnServerInfoExample();
|
||||
vpnserverinfo.unJson(jsonArray.get(i).toString().getBytes(StandardCharsets.UTF_8),
|
||||
vpnserverinfo);
|
||||
vpnServerInfoList.add(vpnserverinfo);
|
||||
}
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<VpnServerInfoExample> getVpnServerInfoList(){
|
||||
return this.vpnServerInfoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "VpnServerInfoListExample{" +
|
||||
"vpnServerInfoList=" + vpnServerInfoList +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package examples;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description:
|
||||
* @Version: 1.0.0
|
||||
* @Date: 17:35 2021/8/4
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class TestVpnInfoList {
|
||||
@Test
|
||||
public void testVpnInfoList(){
|
||||
String ss="[{\"ID\":1,\"Name\":\"内网服务器\",\"ClientPrefix\":\"/min/gdcni19\",\"IsInner\":true,\"" +
|
||||
"Mtu\":1500,\"IP\":\"121.15.171.82\",\"Port\":14922,\"RemotePrefix\":\"/min/gdcni12/vpnserver\"," +
|
||||
"\"InnerIP\":\"10.0.0.0/24, 172.16.0.0/12, 192.168.0.0/16\",\"UGroupID\":1,\"TimeStamp\":\"1635248741\"}," +
|
||||
"{\"ID\":2,\"Name\":\"外网服务器\",\"ClientPrefix\":\"/min/gdcni9\",\"IsInner\":false,\"Mtu\":1500,\"" +
|
||||
"IP\":\"14.215.134.202\",\"Port\":14922,\"RemotePrefix\":\"/hk/vpnserver\",\"InnerIP\":\"\",\"UGroupID" +
|
||||
"\":1,\"TimeStamp\":\"1635248742\"}]";
|
||||
VpnServerInfoListExample list=new VpnServerInfoListExample();
|
||||
boolean flag=list.parseToVpnInfoList(ss.getBytes(StandardCharsets.UTF_8));
|
||||
if(flag){
|
||||
System.out.println(list);
|
||||
System.out.println(list.getVpnServerInfoList().get(0)
|
||||
.getInnerIPList());
|
||||
System.out.println(list.getVpnServerInfoList().get(0)
|
||||
.getInnerIPList().get(0));
|
||||
System.out.println(list.getVpnServerInfoList().get(1)
|
||||
.getInnerIPList());
|
||||
System.out.println(list.getVpnServerInfoList().get(1)
|
||||
.getInnerIPList().size());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user