All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.minlia.cross.client.NgrokClient Maven / Gradle / Ivy

There is a newer version: 1.0.9.RELEASE
Show newest version
package com.minlia.cross.client;

import static com.minlia.cross.constant.Constant.DOMAIN;

import com.minlia.cross.message.MessageSender;
import com.minlia.cross.thread.CmdThread;
import java.io.IOException;
import java.net.UnknownHostException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;

@Slf4j
public class NgrokClient {
	
	String serveraddr= DOMAIN;
	int serverport=4443;
	SSLSocket s;
	SocketFactory sf=null;
	public String ClientId = "";
	public String localhost = "127.0.0.1";
	public int localport = 7719;
	public String protocol = "http";
	public boolean  trfalg=true;
	public long lasttime=0;
	public String authtoken="";
	public List> tunnels = new ArrayList>();  
	

	
	public HashMap> tunnelinfos = new HashMap>();  	
	
	
	 public NgrokClient(String serveraddr,int serverport,String authtoken, Boolean debug){
		 this.serveraddr=serveraddr;
		 this.serverport=serverport;
	 }
	
	

	public NgrokClient(){
	}
	
	public void stop(){
		try {
			s.shutdownInput();;
			s.shutdownOutput();
			s.close();

		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	public void start(){
		s=connectSSL();
		// 发送登录认证
		try {
			MessageSender.SendAuth("",authtoken,s.getOutputStream());
			//启动线程监听
			new CmdThread(this,s).start();
		} catch (IOException e) {

		}
	
	}
	
	
	 public void addTun(String localhost, int localport,String Protocol,String Hostname,String Subdomain,int RemotePort,String HttpAuth){
			
			HashMap tunelInfo = new HashMap();
			tunelInfo.put("localhost", localhost);
			tunelInfo.put("localport", localport+"");
			tunelInfo.put("Protocol", Protocol);
			tunelInfo.put("Hostname", Hostname);
			tunelInfo.put("Subdomain", Subdomain);
			tunelInfo.put("HttpAuth", HttpAuth);
			tunelInfo.put("RemotePort", RemotePort+"");
			tunnels.add(tunelInfo);
			
	 }
	

	/*
	 * 
	 */
	public  SSLSocket  connectSSL(){
		SSLSocket s=null;
		if(sf==null){
			try {
				sf=trustAllSocketFactory();
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		try {
			s = (SSLSocket) sf.createSocket(this.serveraddr, this.serverport);
		    s.startHandshake();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return s;
	}
	
	
	/*忽略证书*/
	public static SSLSocketFactory trustAllSocketFactory() throws Exception{
	    TrustManager[] trustAllCerts = new TrustManager[]{
	            new X509TrustManager() {
	                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
	                    return null;
	                }

	                public void checkClientTrusted(X509Certificate[] certs, String authType) {
	                }

	                public void checkServerTrusted(X509Certificate[] certs, String authType) {
	                }

	            }
	    };
	    SSLContext sslCxt = SSLContext.getInstance("TLSv1.2");
	    sslCxt.init(null, trustAllCerts, null);
	    return sslCxt.getSocketFactory();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy