⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdragonfly.java

📁 httptunnel.jar httptunnel java 源码
💻 JAVA
字号:
package net.jumperz.app.MDragonfly;

import java.io.*;
import java.util.*;
import java.net.*;
import net.jumperz.net.*;
import net.jumperz.security.MSecurityUtil;
import net.jumperz.util.*;
import java.security.cert.*;
import java.security.cert.Certificate;
import java.security.*;
import java.security.spec.*;

import javax.net.ssl.SSLSocket;

public final class MDragonfly
{
private MThreadPool threadPool;
private String logFileName;
private int threadCount;
private int port;
private int targetPort;
private String host;
private String targetHost;

private static MDragonfly instance;

private static final String USAGE		= "Usage: java net.jumperz.app.MDragonfly.MDragonfly CONFIGURATION_FILE";
//--------------------------------------------------------------------------------------
public static MDragonfly getInstance()
{
return instance;
}
//--------------------------------------------------------------------------------------
public static void main( String[] args )
throws Exception
{
if( args.length == 1 )
	{
	instance = new MDragonfly( args[ 0 ]);
	instance.start();
	}
else
	{
	System.out.println( USAGE );
	return;
	}
}
//--------------------------------------------------------------------------------------
private MDragonfly( String configFileName )
throws Exception
{
loadConfig( configFileName );
MStandardLogger.getInstance().addStream( new FileOutputStream( new File( logFileName ), true ) );
MStandardLogger.getInstance().addStream( System.out );
}
//--------------------------------------------------------------------------------------
private void loadConfig ( String configFileName )
throws Exception
{
MConfig config = MConfig.getInstance();
config.load( configFileName );

logFileName		= config.getLogFileName();
threadCount		= config.getThreadCount();
port			= config.getPort();
targetPort		= config.getTargetPort();
host			= config.getHost();
targetHost		= config.getTargetHost();
}
//--------------------------------------------------------------------------------------
public void start()
throws Exception
{
MStandardLogger.getInstance().log( "Dragonfly@JUMPERZ.NET started. local=" + host + ":" + port + " remote=" + targetHost + ":" + targetPort );
KeyStore keyStore = generateKeyStore();
MSslAcceptor sslAcceptor = new MSslAcceptor( keyStore, host, port );
MSslAcceptorObserver observer = new MSslAcceptorObserver( sslAcceptor );
sslAcceptor.register1( observer );

threadPool = new MThreadPool( threadCount );
threadPool.addCommand( sslAcceptor );
}
//--------------------------------------------------------------------------------------
public void connect( SSLSocket clientSideSocket )
{
MConnector connector = new MConnector( targetHost, targetPort );
MConnectorObserver observer = new MConnectorObserver( connector, clientSideSocket );
connector.register1( observer );
threadPool.addCommand( connector );
}
//--------------------------------------------------------------------------------------
public void startSession( SSLSocket clientSideSocket, Socket serverSideSocket )
{
try
	{
	MStreamConnector downStreamConnector
	 = new MStreamConnector( serverSideSocket.getInputStream(), clientSideSocket.getOutputStream() );
	 
	MStreamConnector upStreamConnector
	 = new MStreamConnector( clientSideSocket.getInputStream(), serverSideSocket.getOutputStream() );

	MAccessLogger accessLogger =
	new MAccessLogger
		(
		clientSideSocket,
		clientSideSocket.getInetAddress().getHostAddress(),
		clientSideSocket.getPort(),
		serverSideSocket.getLocalAddress().getHostAddress(),
		serverSideSocket.getLocalPort(),
		upStreamConnector
		);
	upStreamConnector.register1( accessLogger );

	threadPool.addCommand( downStreamConnector );
	threadPool.addCommand( upStreamConnector );
	}
catch( IOException e )
	{
	e.printStackTrace();
	try
		{
		clientSideSocket.close();
		}
	catch( IOException e2 )
		{
		e2.printStackTrace();
		}
	try
		{
		serverSideSocket.close();
		}
	catch( IOException e2 )
		{
		e2.printStackTrace();
		}
	}
}
//--------------------------------------------------------------------------------------
private KeyStore generateKeyStore()
throws Exception
{
MConfig config = MConfig.getInstance();

String certificateFileName	= config.getCertificateFileName();
String privateKeyFileName	= config.getPrivateKeyFileName();
String algorithm		= config.getAlgorithm();

return MSecurityUtil.generateKeyStore( certificateFileName, privateKeyFileName, algorithm );
}
//--------------------------------------------------------------------------------------
public void exit()
{
threadPool.stop();
System.exit( 0 );
}
//--------------------------------------------------------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -