基于Python的跨平台端口转发工具
背景
使用lcx也好,nc也好,总是会被安全防护软件查杀,所以想着自己写一个。顺面学习一下,端口转发的原理。
端口转发的逻辑
端口转发的逻辑很简单开启两个scoket,一个绑定IP端口进行listen,一个连接被转发的内网服务的IP和端口,使用select循环检测,转发信息。
代码
# -*- coding:utf-8 -*-
import os
import select
import socket
from optparse import OptionParser
class PortMap(object):
    def __init__(self, laddr, lport, raddr, rport):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._server = None
        self.laddr = laddr
        self.lport = lport
        self.raddr = raddr
        self.rport = rport
    def run(self):
        try:
            self.server.bind((self.laddr, self.lport))
            self.server.listen(1)
        except Exception, reason:
            print "Create Listen Port Failed!"
            exit(0)
        self.rlist = [self.server]
        self.wlist = []
        self.elist = [self.server]
        while True:
            rs, ws, es = select.select(self.rlist, self.wlist, self.elist)
            for sockfd in rs:
                if sockfd == self.server:
                    self._server, addr = sockfd.accept()
                    self.rlist.append(self._server)
                    try:
                        self.client.connect((self.raddr, self.rport))
                    except Exception, reason:
                        print "Connect Source Port Failed!"
                        exit(0)
                    self.rlist.append(self.client)
                    self.elist.append(self.client)
                    continue
                elif sockfd == self._server:
                    data = sockfd.recv(4096)
                    self.client.send(data)
                elif sockfd == self.client:
                    data = sockfd.recv(4096)
                    self._server.send(data)
if __name__ == "__main__":
    optParser =OptionParser ()
    optParser .add_option ('-R','--raddr',dest ='raddr')
    optParser .add_option ('-l','--laddr',dest ='laddr')
    optParser .add_option ("-P","--rport",dest ="rport")
    optParser .add_option ("-p","--lport",dest ="lport")
    options ,args =optParser .parse_args ()
    maper = PortMap(options.laddr,int(options.lport),options.raddr,int(options.rport))
    mapert.run()
使用
python portmap.py -l 127.0.0.1 -p 4444 -R 172.16.204.137 -P 22
或者编译后
bobac@ubuntu:~/Desktop$ cython portmap.py --embed
bobac@ubuntu:~/Desktop$ ls
backdoor    backdoor.py  dist   hello.c    portmap.py  warcraft3.c
backdoor.c  build        hello  portmap.c  warcraft3   warcraft3.py
bobac@ubuntu:~/Desktop$ gcc `python-config --cflags` -o portmap portmap.c `python-config  --ldflags`
bobac@ubuntu:~/Desktop$ ./portmap -l 172.16.204.137 -p 4433 -R 127.0.0.1 -P 22
效果图


安全软件效果:
包括卡巴斯基、360不会报毒,本来嘛,作为网络工具常用的功能罢了,只不过在渗透中也能成为有用的小工具。

基于Python的跨平台端口转发工具的更多相关文章
- 端口转发工具lcx使用两类
		lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口.它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入 ... 
- 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解
		文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ... 
- psutil一个基于python的跨平台系统信息跟踪模块
		受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ... 
- 初识TPOT:一个基于Python的自动化机器学习开发工具
		1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ... 
- Windows 和 Linux 平台下的端口转发工具
		原文地址: http://unmi.cc/windows-linux-port-forwarding/ 这里记录一下我曾经使用过的几个端口转发工具,即端口映射.端口重定向,和 NAT 也是差不多的概念 ... 
- Windows自带的端口转发工具netsh使用方法_DOS/BAT
		Windows自带的端口转发工具netsh使用方法_DOS/BAT 作者:用户 来源:互联网 时间:2017-02-22 17:24:30 netsh 端口转发 摘要: 下面的代码在windows ... 
- windows端口转发工具(LCX)
		端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法.端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过 ... 
- [原创]小巧免杀的端口转发工具PortTran(附.net源码)
		0x001 简介 PortTran by k8gege.NET版端口转发工具,支持任意权限下转发 0x002 背景工具在2016年左右写的,当时某个内网不知何原故LCX用不了 由于Win2003才刚停 ... 
- rinetd基于内网TCP端口转发
		在Linux系统中大多数情况选择用iptables来实现端口转发,iptables虽然强大,但配置不便,而且新手容易出错.在此分享另一个TCP/UDP端口转发工具rinetd,rinetd体积小巧,配 ... 
随机推荐
- java stream Api
			Stream的简单使用 Stream的使用分为两种类型: Intermediate,一个Stream可以调用0到多个Intermediate类型操作,每次调用会对Stream做一定的处理,返回一个新的 ... 
- python monkey 猴子补丁技术编程,修改python json dumps方法。
			1.猴子补丁就是不改变原有模块的内容的前提下,给原有模块新增方法或者修改原有模块. 一个模块的函数,如果希望改变函数的功能,不改变函数名,通常是库模块,你不可能去修改三方库的源码的,实施起来不方便,而 ... 
- pycharm pro版本激活
			这几天行激活pycharm pro版会遇到问题,license server的网址都不可用了.包括各个网站的百度云的破解资源链接都被和谐了,发现最近jetbrains对盗版管得严. 首次安装在注册界面 ... 
- Git中的文件状态和使用问题解决
			(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstag ... 
- 在CentOS Linux下部署Activemq 5
			准备:安装之前首先安装jdk-1.7.x及以上版本 配置/etc/sysconfig/network文件 和/etc/hosts文件,把主机名的解析做清楚: 如: # cat /etc/sysconf ... 
- 2. Oracle体系结构
			一. Oracle体系结构图 体系结构图如下: 体系结构图看似简单:其中很有玄机.它对Oracle来讲:相当于武功中的心法.配合体系结构来学Oracle:能起到事半功倍的效果.我们平时遇到Oracle ... 
- SpringBoot(九)-- SpringBoot JDBC
			1.属性配置文件(application.properties) # type 可以修改连接池类型,默认采用Tomcat的连接池 # spring.datasource.type=com.alibab ... 
- U3D 游戏引擎之游戏架构脚本该如何来写
			这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏引 ... 
- [Linux] 特殊文件 /dev/zero
			/dev/zero 是类 Unix 系统中一个特殊的文件,当读取该文件时,它会提供无限的空字符 null.它的一个主要用途是提供字符流来初始化数据存储,也就是使用空字符覆盖目标数据.另一个常见的用法是 ... 
- [置顶] 深入探析Java线程锁机制
			今天在iteye上提了一个关于++操作和线程安全的问题,一位朋友的回答一言点醒梦中人,至此我对Java线程锁有了更加深刻的认识.在这里也做个总结供大家参考. 先看几段代码吧! 代码一: public ... 
