如何快速又安全的实现端口转发【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.mzph.cn/pingmian/65624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机无法返航紧急处理方式!

一、检查飞行环境 了解禁飞原因和规定:首先,需要了解所在地区的无人机飞行规定,确认是否存在禁飞区或限飞区。如果处于禁飞区,应遵守相关规定,不要强行飞行。 检查天气情况:恶劣的天气条件(如…

NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners

论文速读|BERTs are Generative In-Context Learners 论文信息: 简介: 本文探讨了在自然语言处理(NLP)领域中,上下文学习(in-context learning)的能力,这通常与因果语言模型&#x…

vue3<script setup>中使用Swiper

swiper网址 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 Swiper - The Most Modern Mobile Touch Slider 安装 Swiper npm安装: npm install swiper yarn安装: yarn add swiper 导入带有所有模块(捆绑包)的 Swiper //…

gala-gopher

title: 探索 Gala-Gopher:智能运维的新引擎 date: ‘2024-12-30’ category: blog tags: Gala-Gopher智能运维故障预测性能优化 sig: ebpf archives: ‘2024-12’ author:way_back summary: Gala-Gopher 作为智能运维领域的创新性项目,以其先进的技术和…

安装软件尝试

import sys import subprocess import os from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButtonclass InstallPathDialog(QDialog):"""提示框,用于显示并编辑安装路径"""def __init__(self, file_…

今日收获(C语言)

一.文件的打开 有这样一个结构体,它内部是文件信息区,文件信息区中的变化可以影响到硬盘中的数据。这个结构体的名字是FILE。我们如果想要写代码对文件进行各种操作,就需要一个指向文件信息区的指针,这个指针的类型是FILE*&#…

node.js卸载并重新安装(超详细图文步骤)

卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样,总之是找到自己的nodejs安装路径,下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…

仓颉编程语言:编程世界的 “文化瑰宝”

我的个人主页 在当今编程领域百花齐放的时代,各种编程语言争奇斗艳,服务于不同的应用场景和开发者群体。然而,有这样一种编程语言,它承载着独特的文化内涵,宛如编程世界里一颗熠熠生辉的“文化瑰宝”,那就…

损失函数-二分类和多分类

二分类和多分类的损失函数 二分类 损失函数 L ( y , y ^ ) − ( y l o g ( y ^ ) ) ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) -(ylog(\hat{y})) (1-y)log(1-\hat{y}) L(y,y^​)−(ylog(y^​))(1−y)log(1−y^​) 其中真实标签表示为y(取值为 0 或 1&#…

【模电刷题复习--填空】

如有错误,欢迎各位大佬在评论区批评指正 模电刷题 一、填空题1.本征半导体中,若掺入微量的__五__价元素,则形成___n___型半导体,其多数载流子是自由电子,若掺入微量的__三__价元素,则形成__p__型半导体。其…

Android使用JAVA调用JNI原生C++方法

1.native-lib.cpp为要生成so库的源码文件 2.JNI函数声明说明 NewStringUTF函数会返回jstring JNI函数声明规则 3.JAVA中声明及调用JNI函数 声明: 调用

DAY178内网渗透之内网对抗:横向移动篇入口差异切换上线IPC管道ATSC任务Impacket套件UI插件

1.内网横向移动 1、横向移动篇-入口点分析-域内域外打点 2、横向移动篇-IPC利用-连接通讯&计划任务, 3、横向移动篇-IPC利用-命令模式&工具套件 1.1 横向移动入口知识点 收集到域内用户和凭据后,为后续利用各种协议密码喷射通讯上线提供条件,…

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…

大模型—Ollama 结构化输出

Ollama 结构化输出 Ollama现在支持结构化输出,使得可以按照由JSON模式定义的特定格式来约束模型的输出。Ollama的Python和JavaScript库已经更新,以支持结构化输出。 结构化输出的用例包括: 从文档中解析数据从图像中提取数据结构化所有语言模型响应比JSON模式更可靠和一致开…

欧拉计划 Project Euler 35 题解

欧拉计划 Problem 35 题解 题干思路code暴力筛法rotate函数使用语法示例代码 题干 思路 一个很自然的思路就是暴力找&#xff0c;遍历一百万之内的所有数&#xff0c;也可以先把一百万以内所有的素数筛出来然后从中取选。这里我使用的是暴力算法。 code 暴力 #include <…

JVM常见排查问题的命令及可视化工具

前置&#xff1a; RMI协议&#xff1a;java的一个远程调用协议&#xff0c;在不同的JVM之间可以进行接口的调用&#xff0c;但数据不安全&#xff0c;且仅限java&#xff1b; 一、常见命令及用法 1、jps&#xff1a;与Linux的ps命令有点类似&#xff0c;查看系统中在运行的J…

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题&#xff0c;这里专门写一篇文章进行讲解。包括如何自定义注解&#xff0c;以及注意事项&#xff0c;相信JAVA中很多朋友业写过&#xff0c;但是今天写的是Python哦。。。 2.定义 在 Python…

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…

高效搭建Nacos:实现微服务的服务注册与配置中心

一、关于Nacos 1.1 简介 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统&#xff0c;特别是在微服务架构中。Nacos 提供了简单易用…