web | python反向代理tcp连接
web | python反向代理tcp连接
今天在思考如何把内网socket服务直接转发到本机的问题,说白了就是个反向代理的问题,网上一堆人写的乱七八糟,搞的相当复杂,就自己写了个tcp反向代理。
项目地址:https://github.com/Mz1z/Mrp.git
环境:
python3.7+
代码如下:
import asyncio
import sys
# 转发客户端到服务器的流量
async def trans_c2s(reader, r_writer):
while not reader.at_eof():
data = await reader.read(256)
r_writer.write(data)
await r_writer.drain()
r_writer.close()
# 转发服务器到客户端的流量
async def trans_s2c(r_reader, writer):
while not r_reader.at_eof():
r_data = await r_reader.read(256)
writer.write(r_data)
await writer.drain()
writer.close()
async def handle(reader, writer):
addr = writer.get_extra_info('peername')
print(f'> Receive connect: {addr}!')
# 启动反向代理连接
r_reader, r_writer = await asyncio.open_connection(r_addr, r_port)
ret = await asyncio.gather(
trans_c2s(reader, r_writer),
trans_s2c(r_reader, writer)
)
print('close')
# 主服务器进程
async def main():
server = await asyncio.start_server(
handle, "0.0.0.0", port)
addr = server.sockets[0].getsockname()
print(f'Serving on {addr}')
async with server:
await server.serve_forever()
if __name__ == "__main__":
if len(sys.argv) < 4:
print('> usage: Mrp [your_port] [romote_addr] [remote_port]')
exit(1)
port = int(sys.argv[1])
r_addr = sys.argv[2]
r_port = int(sys.argv[3])
asyncio.run(main())
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/17191643.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构