如何实现 SSH、HTTP 和 HTTPS 复用端口 自动分流?

infras · 2023-02-07 22:25:56 · 601 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-02-07 22:25:56 的主题,其中的信息可能已经有所发展或是发生改变。

参考 Python 脚本如下,

# -*- 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)

关注本站微信公众号(和以上内容无关)InfraPub ,扫码关注:InfraPub

601 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传