Created
October 19, 2017 17:45
-
-
Save WangYihang/517fbc8e1875938aa62e942be250cf8e to your computer and use it in GitHub Desktop.
A Simple Port Multiplier.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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://xianzhi.aliyun.com/forum/topic/4/ 这篇文章链接丢了,还有吗?
https://xianzhi.aliyun.com/forum/topic/4/ 这篇文章链接丢了,还有吗?
我也找不到了 T_T,可能是先知的地址结构发生了改变...
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
我觉得应该是得需要先把 IIS 停掉 , 把脚本跑起来以后 , 再让 IIS 监听 127.0.0.1 的 80 端口
但是今天看到一篇文章 : https://xianzhi.aliyun.com/forum/topic/4/
这个文章对端口复用技术讲的很详细 , 这里给了两种解决方案 , 可以学习一下 , 这个文章中的案例应该可以实现热更新