JSP端口转发工具 – KPortTran
来源:互联网 发布:字符串压缩算法 c gzip 编辑:程序博客网 时间:2024/06/11 05:24
/KPortTran.jsp?lip = local ip / 本地ip //一般为内网主机IPlp = local port / 本地端口 //一般为内网主机端口rip = remote ip / 远程ip //一般为外网连接者IP,或者内网其他主机rp = remote port / 远程端口 //一般为外网连接者端口lp2 = local port2 / 本地端口2 //本地监听转发时的第二个端口m = mode / 运行模式 //合法的值有:listen tran slave三种
<%@page pageEncoding="GBK"%><%@page import="java.io.*"%><%@page import="java.util.*"%><%@page import="java.nio.charset.*"%><%@page import="javax.servlet.http.HttpServletRequestWrapper"%><%@page import="java.net.*"%><%/*code by KingX*/class KPortTran {public void listen(String port1, String port2) {ServerSocket listenServerSocket = null;ServerSocket outServerSocket = null;try {listenServerSocket = new ServerSocket(Integer.parseInt(port1));outServerSocket = new ServerSocket(Integer.parseInt(port2));} catch (NumberFormatException e) {} catch (IOException e) {}Socket listenSocket = null;Socket outSocket = null;try {while (true) {listenSocket = listenServerSocket.accept();outSocket = outServerSocket.accept();new tranThread(outSocket, listenSocket).start();new tranThread(listenSocket, outSocket).start();Thread.sleep(200);}} catch (Exception e) { }}public void slave(String targetIP, String port1, String srcIP, String port2) throws IOException {InetAddress src = InetAddress.getByName(srcIP);InetAddress dest = InetAddress.getByName(targetIP);int p1 = Integer.parseInt(port1);int p2 = Integer.parseInt(port2);new Server(src, p2, dest, p1, true);}public void tran(String srcIP, String port1, String targetIP, String port2)throws NumberFormatException, IOException {InetAddress src = InetAddress.getByName(srcIP);InetAddress dest = InetAddress.getByName(targetIP);int p1 = Integer.parseInt(port1);int p2 = Integer.parseInt(port2);new Server(src, p1, dest, p2, false);}class tranThread extends Thread {Socket in;Socket out;InputStream is;OutputStream os;public tranThread(Socket in, Socket out) throws IOException {this.is = in.getInputStream();this.os = out.getOutputStream();this.in = in;this.out = out;}private void closeSocket() {try {is.close();os.close();in.close();out.close();} catch (IOException e) {}}@Overridepublic void run() {super.run();byte[] buffer = new byte[4096];int len = -1;try {while (true) {if (in.isClosed() || out.isClosed()|| (len = is.read(buffer, 0, buffer.length)) == -1) {break;} else {os.write(buffer, 0, len);os.flush();}}} catch (IOException e) {closeSocket();} finally {closeSocket();}}}class Server extends Thread {InetAddress src;InetAddress dest;int p1, p2;boolean reverse = false;public Server(InetAddress srcIP, int srcPort, InetAddress targetIP,int targetPort, boolean flag) {this.src = srcIP;this.dest = targetIP;this.p1 = srcPort;this.p2 = targetPort;this.reverse = flag;start();}@Overridepublic void run() {super.run();if (reverse) {try {Socket s = new Socket(src, p1);Socket s2 = new Socket(dest, p2);new tranThread(s, s2).start();new tranThread(s2, s).start();while (true) {if (s2.isClosed() || s.isClosed()) {if (s2.isClosed()) {s2 = new Socket(dest, p2);}if (s.isClosed()) {s = new Socket(src, p1);}new tranThread(s, s2).start();new tranThread(s2, s).start();}Thread.sleep(1000);}} catch (IOException e) {} catch (InterruptedException e) {}} else {ServerSocket ss;try {ss = new ServerSocket(p1, 5, src);while (true) {Socket s = ss.accept();Socket s2 = new Socket(dest, p2);new tranThread(s, s2).start();new tranThread(s2, s).start();}} catch (IOException e) {e.printStackTrace();}}}}}%><%final String localIP = request.getParameter("lip");final String localPort = request.getParameter("lp");final String localPort2 = request.getParameter("lp2");final String remoteIP =request.getParameter("rip");final String remotePort =request.getParameter("rp");final String mode =request.getParameter("m");KPortTran pt = new KPortTran();if (mode.equals("tran")) {pt.tran(localIP, localPort, remoteIP , remotePort);}if (mode.equals("slave")) {pt.slave(localIP, localPort, remoteIP , remotePort);}if (mode.equals("listen")) {pt.listen(localPort, localPort2);}%>
0 0
- JSP端口转发工具 – KPortTran
- JSP端口转发工具–KPortTran
- jsp版本端口转发
- 端口转发工具使用
- 端口转发工具
- linux 端口转发工具
- HTTP tunneling工具-端口转发
- 免费的端口转发工具
- LCX端口转发工具使用
- linux下端口转发工具rinetd
- 端口转发、重定向工具 rinetd
- [喵咪Liunx(3)]端口转发工具rinetd
- lcx端口转发工具的使用
- 端口转发工具lcx使用两类
- 端口转发
- 端口转发
- 端口转发
- 端口转发
- 第十一周项目二求四个数的最大公约数
- arm-linux-gdb程序错误调试
- MyBatis的几种批量操作
- SSL 3.0高危漏洞避免方案
- 除法散列函数之散列值问题
- JSP端口转发工具 – KPortTran
- MySQL更新字段中部分内容&shell脚本执行命令
- VB.NET 章鱼哥出品--入门基础Button控件的使用详解(一)
- 第十一周项目二——求最大公约数(2)
- OS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- 写自定义ListView不能响应OnItemClickListener的解决方案
- 关于C/C++指针符号“*”的书写格式
- Android 使用LruCache 缓存本地图片
- Android1.1 Activity03Acitvity生命周期