基於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不會報毒,本來嘛,作為網絡工具常用的功能罷了,只不過在滲透中也能成為有用的小工具。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM