Skip to content

Instantly share code, notes, and snippets.

@weiyang-github
Forked from WangYihang/port-forwarding.py
Created November 27, 2018 06:35
Show Gist options
  • Save weiyang-github/f8b94d29b86caba902631c7b87654e83 to your computer and use it in GitHub Desktop.
Save weiyang-github/f8b94d29b86caba902631c7b87654e83 to your computer and use it in GitHub Desktop.

Revisions

  1. @WangYihang WangYihang revised this gist Oct 12, 2017. 1 changed file with 12 additions and 4 deletions.
    16 changes: 12 additions & 4 deletions port-forwarding.py
    Original file line number Diff line number Diff line change
    @@ -13,7 +13,7 @@ def handle(buffer):
    return buffer


    def transfer(src, dst):
    def transfer(src, dst, direction):
    src_name = src.getsockname()
    src_address = src_name[0]
    src_port = src_name[1]
    @@ -26,11 +26,16 @@ def transfer(src, dst):
    print "[-] No data received! Breaking..."
    break
    # print "[+] %s:%d => %s:%d [%s]" % (src_address, src_port, dst_address, dst_port, repr(buffer))
    print "[+] %s:%d => %s:%d => Length : [%d]" % (src_address, src_port, dst_address, dst_port, len(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()


    @@ -50,17 +55,20 @@ def server(local_host, local_port, remote_host, remote_port, max_connection):
    print "[+] Tunnel connected! Tranfering data..."
    # threads = []
    s = threading.Thread(target=transfer, args=(
    remote_socket, local_socket,))
    remote_socket, local_socket, False))
    r = threading.Thread(target=transfer, args=(
    local_socket, remote_socket,))
    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!"

  2. @WangYihang WangYihang revised this gist Oct 11, 2017. 1 changed file with 9 additions and 4 deletions.
    13 changes: 9 additions & 4 deletions port-forwarding.py
    Original file line number Diff line number Diff line change
    @@ -12,6 +12,7 @@
    def handle(buffer):
    return buffer


    def transfer(src, dst):
    src_name = src.getsockname()
    src_address = src_name[0]
    @@ -38,8 +39,8 @@ def server(local_host, local_port, remote_host, remote_port, max_connection):
    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:%d]' %(local_host, local_port, remote_host, remote_port)
    print '[+] Server started [%s:%d]' % (local_host, local_port)
    print '[+] Connect to [%s:%d] to get the content of [%s:%d]' % (local_host, local_port, remote_host, remote_port)
    while True:
    local_socket, local_address = server_socket.accept()
    print '[+] Detect connection from [%s:%s]' % (local_address[0], local_address[1])
    @@ -48,8 +49,10 @@ def server(local_host, local_port, remote_host, remote_port, max_connection):
    remote_socket.connect((remote_host, remote_port))
    print "[+] Tunnel connected! Tranfering data..."
    # threads = []
    s = threading.Thread(target=transfer,args=(remote_socket, local_socket,))
    r = threading.Thread(target=transfer,args=(local_socket, remote_socket,))
    s = threading.Thread(target=transfer, args=(
    remote_socket, local_socket,))
    r = threading.Thread(target=transfer, args=(
    local_socket, remote_socket,))
    # threads.append(s)
    # threads.append(r)
    s.start()
    @@ -61,6 +64,7 @@ def server(local_host, local_port, remote_host, remote_port, max_connection):
    server_socket.close()
    print "[+] Server shuted down!"


    def main():
    if len(sys.argv) != 5:
    print "Usage : "
    @@ -77,5 +81,6 @@ def main():
    MAX_CONNECTION = 0x10
    server(LOCAL_HOST, LOCAL_PORT, REMOTE_HOST, REMOTE_PORT, MAX_CONNECTION)


    if __name__ == "__main__":
    main()
  3. @WangYihang WangYihang revised this gist Oct 11, 2017. 1 changed file with 53 additions and 36 deletions.
    89 changes: 53 additions & 36 deletions port-forwarding.py
    Original file line number Diff line number Diff line change
    @@ -6,21 +6,11 @@

    import socket
    import threading
    import sys

    LOCAL_HOST = "127.0.0.1"
    LOCAL_PORT = 8888

    REMOTE_HOST = "192.168.187.130"
    REMOTE_PORT = 80

    MAX_CONNECTION = 0x100

    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)
    def handle(buffer):
    return buffer

    def transfer(src, dst):
    src_name = src.getsockname()
    @@ -30,35 +20,62 @@ def transfer(src, dst):
    dst_address = dst_name[0]
    dst_port = dst_name[1]
    while True:
    buffer = src.recv(0x100)
    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))
    dst.send(buffer)
    # print "[+] %s:%d => %s:%d [%s]" % (src_address, src_port, dst_address, dst_port, repr(buffer))
    print "[+] %s:%d => %s:%d => Length : [%d]" % (src_address, src_port, dst_address, dst_port, len(buffer))
    dst.send(handle(buffer))
    print "[+] Closing connecions! [%s:%d]" % (src_address, src_port)
    src.close()
    print "[+] Closing connecions! [%s:%d]" % (dst_address, dst_port)
    dst.close()

    while True:
    local_socket, local_address = server_socket.accept()
    # print '[+] Detect connection from [%s]' % local_address
    print "[+] Trying to connect the REMOTE server [%s:%d]" % (REMOTE_HOST, REMOTE_PORT)
    remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    remote_socket.connect((REMOTE_HOST, REMOTE_PORT))
    print "[+] Tunnel connected! Tranfering data..."
    # threads = []
    s = threading.Thread(target=transfer,args=(remote_socket, local_socket,))
    r = threading.Thread(target=transfer,args=(local_socket, remote_socket,))
    # threads.append(s)
    # threads.append(r)
    s.start()
    r.start()

    print "[+] Releasing resources..."
    remote_socket.close()
    local_socket.close()
    print "[+] Closing server..."
    server_socket.close()
    print "[+] Server shuted down!"
    def server(local_host, local_port, remote_host, remote_port, 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:%d]' %(local_host, local_port, remote_host, remote_port)
    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:%d]" % (remote_host, remote_port)
    remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    remote_socket.connect((remote_host, remote_port))
    print "[+] Tunnel connected! Tranfering data..."
    # threads = []
    s = threading.Thread(target=transfer,args=(remote_socket, local_socket,))
    r = threading.Thread(target=transfer,args=(local_socket, remote_socket,))
    # threads.append(s)
    # threads.append(r)
    s.start()
    r.start()
    print "[+] Releasing resources..."
    remote_socket.close()
    local_socket.close()
    print "[+] Closing server..."
    server_socket.close()
    print "[+] Server shuted down!"

    def main():
    if len(sys.argv) != 5:
    print "Usage : "
    print "\tpython %s [L_HOST] [L_PORT] [R_HOST] [R_PORT]" % (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 <[email protected]>"
    exit(1)
    LOCAL_HOST = sys.argv[1]
    LOCAL_PORT = int(sys.argv[2])
    REMOTE_HOST = sys.argv[3]
    REMOTE_PORT = int(sys.argv[4])
    MAX_CONNECTION = 0x10
    server(LOCAL_HOST, LOCAL_PORT, REMOTE_HOST, REMOTE_PORT, MAX_CONNECTION)

    if __name__ == "__main__":
    main()
  4. @WangYihang WangYihang revised this gist Oct 11, 2017. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions port-forwarding.py
    Original file line number Diff line number Diff line change
    @@ -13,12 +13,12 @@
    REMOTE_HOST = "192.168.187.130"
    REMOTE_PORT = 80

    MAX_socket = 0x100
    MAX_CONNECTION = 0x100

    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_socket)
    server_socket.listen(MAX_CONNECTION)

    print '[+] Server started [%s:%d]' %(LOCAL_HOST, LOCAL_PORT)

  5. @WangYihang WangYihang created this gist Oct 11, 2017.
    64 changes: 64 additions & 0 deletions port-forwarding.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Tcp Port Forwarding (Reverse Proxy)
    # Author : WangYihang <[email protected]>


    import socket
    import threading

    LOCAL_HOST = "127.0.0.1"
    LOCAL_PORT = 8888

    REMOTE_HOST = "192.168.187.130"
    REMOTE_PORT = 80

    MAX_socket = 0x100

    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_socket)

    print '[+] Server started [%s:%d]' %(LOCAL_HOST, LOCAL_PORT)

    def transfer(src, dst):
    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(0x100)
    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))
    dst.send(buffer)
    print "[+] Closing connecions! [%s:%d]" % (src_address, src_port)
    src.close()
    print "[+] Closing connecions! [%s:%d]" % (dst_address, dst_port)
    dst.close()

    while True:
    local_socket, local_address = server_socket.accept()
    # print '[+] Detect connection from [%s]' % local_address
    print "[+] Trying to connect the REMOTE server [%s:%d]" % (REMOTE_HOST, REMOTE_PORT)
    remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    remote_socket.connect((REMOTE_HOST, REMOTE_PORT))
    print "[+] Tunnel connected! Tranfering data..."
    # threads = []
    s = threading.Thread(target=transfer,args=(remote_socket, local_socket,))
    r = threading.Thread(target=transfer,args=(local_socket, remote_socket,))
    # threads.append(s)
    # threads.append(r)
    s.start()
    r.start()

    print "[+] Releasing resources..."
    remote_socket.close()
    local_socket.close()
    print "[+] Closing server..."
    server_socket.close()
    print "[+] Server shuted down!"