端口转发python脚本
2021年12月23日lts.py -listen 80 2222
lts.py -slave 10.10.10.10:80 10.10.10.10:3389
#!/usr/bin/env python # coding=utf-8 ''' ==================================================================================== ************************************************************************************ * * lts.py - Port Forwarding. * * Copyright (C) 2017 . * * author:loveshell * @date: 2012-7 * * modify:mosin * @date:2017-4 * @Blog:http://imosin.com * python2.7 bulid * Usage : D:\>lts.py * ============================= Transmit Tool V1.0 =============================== * =========== Code by Mosin & loveshell, Welcome to http://www.imosin.com ======== * ================================================================================ * : * : [Usage of Port Forwarding:] * : * : [option:] * : -listen * : -tran * : -slave * ************************************************************************************ ==================================================================================== ''' import socket import sys import threading import time import select streams = [None, None] LISTEN = "-listen" SLAVE = "-slave" TRAN = "-tran" def usage(): usage = ''' ============================= Transmit Tool V1.0 =============================== =========== Code by Mosin & loveshell, Welcome to http://www.imosin.com ======== ================================================================================ [Usage of Packet Transmit:] lts.py -<listen|tran|slave> <option> lts.py -listen 4444 2222 lts.py -tran 80 10.10.10.10:80 lts.py -slave 10.10.10.10:4444 10.10.10.10:3389 [option:] -listen <ConnectPort> <TransmitPort> -slave <ConnectHost>:<ConnectPort> <TransmitHost>:<TransmitPort> -tran <TransmitPort> <ConnectHost>:<ConnectPort> ''' print usage def create_socket(): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except: print ('[-] Create socket error.') return 0 return sock def switch_stream_flag(flag): if flag == 0: flag = "Server" return flag elif flag == 1: flag = "Client" return flag else: print "[!] Sock Error" def get_stream(flag): if flag == 0: flag = 1 elif flag == 1: flag = 0 else: raise "[!] Socket ERROR!" while True: if streams[flag] == 'Exit': print("[-] Can't connect to the target, Exit!") sys.exit(1) if streams[flag] != None: return streams[flag] else: time.sleep(1) def ex_stream(host, port, flag, server1, server2): flag_status = switch_stream_flag(flag) try: while True: buff = server1.recv(2048) if len(buff) == 0: print "[-] Data Send False. " break print ('[*] %s Data Length %i Recv From => %s:%s' % (flag_status,len(buff),host,port)) server2.sendall(buff) print ('[*] %s:%i Send Data => %s ' % (host,port,flag_status)) except : print ('[-] Have One Connect Closed => %s' %(flag_status)) try: server1.shutdown(socket.SHUT_RDWR) server1.close() except: print ('[!] %s => %s is down error.' % (host,port)) try: server2.shutdown(socket.SHUT_RDWR) server2.close() except: print ('[!] %s => is down error.' % (flag_status)) streams[0] = None streams[1] = None print ('[-] %s Closed.' %(flag_status)) def server(port, flag): host = '0.0.0.0' #端口复用修改 server = create_socket() try: server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((host, port)) server.listen(10) except: print ('[-] Bind False.') while True: conn, addr = server.accept() print ('[+] Connected from: %s:%s' % (addr,port)) streams[flag] = conn server_sock2 = get_stream(flag) ex_stream(host, port, flag, conn, server_sock2) def connect(host, port, flag): connet_timeout = 0 wait_time = 30 timeout = 5 while True: if connet_timeout > timeout: streams[flag] = 'Exit' print ('[-] Not connected %s:%i!' % (host,port)) return None conn_sock = create_socket() try: conn_sock.connect((host, port)) except Exception, e: print ('[-] Can not connect %s:%i!' % (host, port)) connet_timeout += 1 time.sleep(wait_time) continue print "[+] Connected to %s:%i" % (host, port) streams[flag] = conn_sock conn_sock2 = get_stream(flag) ex_stream(host, port, flag, conn_sock, conn_sock2) if __name__ == '__main__': if len(sys.argv) != 4: usage() sys.exit(1) t_list = [] t_argv = [sys.argv[2], sys.argv[3]] for i in [0, 1]: s = t_argv[i] if sys.argv[1] == LISTEN: t = threading.Thread(target=server, args=(int(s), i)) t_list.append(t) elif sys.argv[1] == SLAVE: sl = s.split(':') t = threading.Thread(target=connect, args=(sl[0], int(sl[1]), i)) t_list.append(t) elif sys.argv[1] == TRAN: try: if i == 0: t = threading.Thread(target=server, args=(int(s), i)) t_list.append(t) elif i == 1: sl = s.split(':') t = threading.Thread(target=connect, args=(sl[0], int(sl[1]), i)) t_list.append(t) else: usage() except: usage() sys.exit(0) else: usage() sys.exit(1) for t in t_list: t.start() for t in t_list: t.join() sys.exit(0)
https://github.com/hucmosin/Python_Small_Tool/blob/master/transmitport/lcx.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # a Tcp Port Forwarding and a Port Multiplier (HTTP/SSH) # Author : WangYihang <wangyihanger@gmail.com> import socket import threading import sys def handle(buffer): return buffer def transfer(src, dst, direction): src_name = src.getsockname() src_address = src_name[0] src_port = src_name[1] dst_name = dst.getsockname() dst_address = dst_name[0] dst_port = dst_name[1] while True: buffer = src.recv(0x400) if len(buffer) == 0: print "[-] No data received! Breaking..." break # print "[+] %s:%d => %s:%d [%s]" % (src_address, src_port, dst_address, dst_port, repr(buffer)) if direction: print "[+] %s:%d >>> %s:%d [%d]" % (src_address, src_port, dst_address, dst_port, len(buffer)) else: print "[+] %s:%d <<< %s:%d [%d]" % (dst_address, dst_port, src_address, src_port, len(buffer)) dst.send(handle(buffer)) print "[+] Closing connecions! [%s:%d]" % (src_address, src_port) src.shutdown(socket.SHUT_RDWR) src.close() print "[+] Closing connecions! [%s:%d]" % (dst_address, dst_port) dst.shutdown(socket.SHUT_RDWR) dst.close() def server(local_host, local_port, remote_host, max_connection): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((local_host, local_port)) server_socket.listen(max_connection) print '[+] Server started [%s:%d]' % (local_host, local_port) print '[+] Connect to [%s:%d] to get the content of [%s]' % (local_host, local_port, remote_host) while True: local_socket, local_address = server_socket.accept() print '[+] Detect connection from [%s:%s]' % (local_address[0], local_address[1]) print "[+] Trying to connect the REMOTE server [%s]" % (remote_host) header = local_socket.recv(4) if header == "GET " or header == "POST": print "[+] HTTP connection detected!" remote_port = 80 elif header == "SSH-": print "[+] SSH connection detected!" remote_port = 22 else: print "[+] Can not detect port..." break remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote_socket.connect((remote_host, remote_port)) remote_socket.send(header) print "[+] Tunnel connected! Tranfering data..." # threads = [] s = threading.Thread(target=transfer, args=( remote_socket, local_socket, False)) r = threading.Thread(target=transfer, args=( local_socket, remote_socket, True)) # threads.append(s) # threads.append(r) s.start() r.start() print "[+] Releasing resources..." remote_socket.shutdown(socket.SHUT_RDWR) remote_socket.close() local_socket.shutdown(socket.SHUT_RDWR) local_socket.close() print "[+] Closing server..." server_socket.shutdown(socket.SHUT_RDWR) server_socket.close() print "[+] Server shuted down!" def main(): if len(sys.argv) != 4: print "Usage : " print "\tpython %s [L_HOST] [L_PORT] [R_HOST]" % (sys.argv[0]) print "Example : " print "\tpython %s 127.0.0.1 8888 127.0.0.1 22" % (sys.argv[0]) print "Author : " print "\tWangYihang <wangyihanger@gmail.com>" exit(1) LOCAL_HOST = sys.argv[1] LOCAL_PORT = int(sys.argv[2]) REMOTE_HOST = sys.argv[3] # REMOTE_PORT = int(sys.argv[4]) # auto detect MAX_CONNECTION = 0x10 server(LOCAL_HOST, LOCAL_PORT, REMOTE_HOST, MAX_CONNECTION) if __name__ == "__main__": main()
https://gist.github.com/WangYihang/517fbc8e1875938aa62e942be250cf8e