当前位置: 首页 > news >正文

如何快速又安全的实现端口转发【Windows MAC linux通用】

背景

有很多程序是在虚拟机上运行的,返回的url 又是127.0.0.1。在个人电脑上调试需要解决这个问题。端口转发是一个不错的方法

可能的解决办法:

1.修改程序,返回虚拟机的ip (要改代码,换虚拟机还要再改代码)

2.在中间加个nginx(需要额外部署服务)

3.在个人电脑上用本文的脚本,快速开启一个端口转发。把访问127.0.0.1的流量转发到虚拟机上(本文)

本文方法的优势:

1.快速,转发的目的ip和端口方便修改

2.代码公开,安全干净

3.只依赖python3 ,无python三方包依赖

4.windows linux MAC 通用,国产系统国产CPU也能用

本文的不足:

1.需要安装python3

2.本脚本只实现了tcp,未实现udp

正文
依赖:python3

请在电脑上提前安装好python3

适用范围

Windows,MAC,linux都通用

运行此脚本快速实现端口转发

执行如下命令即可实现

python   本脚本.py
或
python3  本脚本.py

脚本正文

import socket
import threading# 转发数据的函数
def forward_data(source, destination):while True:try:data = source.recv(4096)  # 从源读取数据if not data:breakdestination.sendall(data)  # 将数据发送到目标except Exception as e:print(f"Error forwarding data: {e}")break# 处理客户端连接的函数
def handle_client(client_socket, target_host, target_port):try:# 连接到目标地址target_socket = socket.create_connection((target_host, target_port))print(f"Connected to target {target_host}:{target_port}")# 创建两个线程分别转发数据thread1 = threading.Thread(target=forward_data, args=(client_socket, target_socket))thread2 = threading.Thread(target=forward_data, args=(target_socket, client_socket))thread1.start()thread2.start()# 等待线程结束thread1.join()thread2.join()except Exception as e:print(f"Connection error: {e}")finally:client_socket.close()target_socket.close()print("Connection closed")# 主程序
def start_proxy(listen_port, target_host, target_port):server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 也可改为 127.0.0.1server.bind(("0.0.0.0", listen_port))server.listen(5)print(f"Listening on port {listen_port} and forwarding to {target_host}:{target_port}")while True:client_socket, addr = server.accept()print(f"Accepted connection from {addr}")client_handler = threading.Thread(target=handle_client, args=(client_socket, target_host, target_port))client_handler.start()if __name__ == "__main__":#  本地127.0.01监听的端口(TCP)LISTEN_PORT = 8090#  目标地址和目标端口(TCP)TARGET_HOST = "10.9.0.8"TARGET_PORT = 8081start_proxy(LISTEN_PORT, TARGET_HOST, TARGET_PORT)
http://www.lryc.cn/news/511523.html

相关文章:

  • LongLLMLingua: 长上下文场景的智能提示压缩框架
  • Django serializers:把ValidationError处理的更优雅
  • CASA(Carnegie-Ames-Stanford Approach) 模型原理及实践技术
  • 【HarmonyOS之旅】ArkTS语法(一)
  • 【畅购电商】项目总结
  • python|利用ffmpeg按顺序合并指定目录内的ts文件
  • IP属地和所在地不一致什么意思?怎么换成另外一个地方的
  • Hive其十,优化和数据倾斜
  • matlab reshape permute
  • 数据库sql语句单表查询
  • Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解
  • 科技快讯 | 水滴筹成为民政部指定个人求助网络服务平台;小米超级小爱首次向正式版用户开放;腾讯发布全球首个重症医疗大模型
  • 强化特种作业管理,筑牢安全生产防线
  • 跨语言学习之C++ 和 Python 的赋值操作 (等号“=“) 的区别
  • 【操作系统】如何创建一个守护进程
  • 常见显示方案
  • USB Hub 检测设备
  • 安卓开发使用Gemini高效AI开发-Android Studio 中使用Gemini
  • wangEditor富文本插件在vue项目中使用和媒体上传的实现
  • ESP-IDF学习记录(2)ESP-IDF 扩展的简单使用
  • python中函数的用法总结(二阶段)
  • 一份关于 Ubuntu 系统下代理配置的故障排查笔记
  • 使用 Colyseus 构建多人实时白板应用
  • 【探花交友】SpringCache
  • Spring API 接口加密/解密
  • 漏洞扫描:网络安全的 “体检” 与 “防护指南”
  • 【可靠有效】springboot使用netty搭建TCP服务器
  • 机器视觉中的单线程、多线程与跨线程:原理与应用解析
  • 0040__Linux内核4.14版本——drm框架分析(1)——drm简介
  • 珞珈一号夜光遥感数据地理配准,栅格数据地理配准