Skip to content

Instantly share code, notes, and snippets.

@snower
Last active June 10, 2023 09:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snower/1239357e50758991f06dd4b6f60f135c to your computer and use it in GitHub Desktop.
Save snower/1239357e50758991f06dd4b6f60f135c to your computer and use it in GitHub Desktop.
SSH、HTTP和HTTPS复用端口自动分流
# -*- coding: utf-8 -*-
# 2023/2/7
# create by: snower
import sevent
PORT = 80
SSH_ADDRES = ("127.0.0.1", 2222)
HTTP_ADDRES = ("127.0.0.1", 8080)
HTTPS_ADDRES = ("127.0.0.1", 4443)
async def do_tcp_port_forward(conn):
buffer = await conn.recv()
data = buffer.join()
forward_address = HTTP_ADDRES
if b'SSH' == data[:3]:
forward_address = SSH_ADDRES
elif b'\x16\x03' == data[:2]:
forward_address = HTTPS_ADDRES
pconn = sevent.tcp.Socket()
pconn.enable_nodelay()
pconn.connect(forward_address)
conn.link(pconn)
async def tcp_port_forward_server():
server = sevent.tcp.Server()
server.enable_reuseaddr()
server.enable_nodelay()
server.listen(("0.0.0.0", PORT))
while True:
conn = await server.accept()
sevent.go(do_tcp_port_forward, conn)
sevent.run(tcp_port_forward_server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment