python语言实现_通过端口转发实现跨网络(多网络之间)通信_science_network
本文使用python语言实现了一个端口转发的程序,该程序可以实现多网络之间的信息通信,当然这里有个前提,那就是多个网络都在一台主机上有可以连通的端口。
之所以有这个编写代码的需求,是因为最近使用的science network工具不大好用了,于是就要博士同学发给我一个好用些的来,固然发现同学用的那个工具更好用,效果如下:
虽然这个工具好用,但是用着用着就发现了问题,那就是这个工具只能支持本机上网,而和其他的同类工具不同,其他的同类工具都是可以支持局域网中其他主机的请求的,而这个就导致了一定的问题,比如我需要使用GitHub,使用huggingface,等等,而我一般都是在workstation上用这些应用的,而workstation上的系统又是Linux系统,而这个朋友发给我的这个工具又是只能运行在Windows系统上的,并且最为可气的是这个工具只接收localhost的端口转发,而不能只是局域网中其他主机的请求的,这样就导致我的工作电脑(Linux系统)是无法通过这个工具来连接huggingface这样的应用的,为此就想到了自己编写一个代码来实现这中间的gap。
一开始想的是自己手动编写这样的代码,但是考虑到比较耗时,并且个人使用,也不需要什么代码优化,也不追求什么性能,于是就想到了使用ChatGPT来自动生成一个,于是得到了下面的代码:
import socket
import threading
# 转发函数
def forward(source, destination):
while True:
try:
data = source.recv(4096)
if not data:
break
destination.sendall(data)
except Exception as e:
print(f"Connection error: {e}")
break
# 处理单个客户端连接
def handle_client(client_socket, target_host, target_port):
try:
# 连接到目标地址
target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_socket.connect((target_host, target_port))
# 创建两个线程:分别转发客户端到目标和目标到客户端的数据
threading.Thread(target=forward, args=(client_socket, target_socket)).start()
threading.Thread(target=forward, args=(target_socket, client_socket)).start()
except Exception as e:
print(f"Error handling client: {e}")
client_socket.close()
# 主端口转发逻辑
def start_port_forwarding(local_host, local_port, target_host, target_port):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((local_host, local_port))
server.listen(15)
print(f"[*] Listening on {local_host}:{local_port} and forwarding to {target_host}:{target_port}")
while True:
client_socket, addr = server.accept()
print(f"[*] Accepted connection from {addr}")
threading.Thread(target=handle_client, args=(client_socket, target_host, target_port)).start()
if __name__ == "__main__":
# 配置端口转发信息
LOCAL_HOST = "0.0.0.0" # 本地监听地址
LOCAL_PORT = 8888 # 本地监听端口
TARGET_HOST = "127.0.0.1" # 目标地址(替换为实际地址)
TARGET_PORT = 33210 # 目标端口
# 启动端口转发
start_port_forwarding(LOCAL_HOST, LOCAL_PORT, TARGET_HOST, TARGET_PORT)
事实证明ChatGPT自动生成的这个端口转发代码还是比较好用的,这样就可以在个人手机上也可以看YouTube了。
这里需要注意的是端口的设置,我们可以看到下图中这个工具的本地接受的端口号为HTTP下的33210,于是在我们的这个代码中就需要将TARGET_PORT设置为33210,由于是本地的端口转发,因此本地的IP设置为127.0.0.1,由于我们的这个代码实现的是对局域网中的请求的接收并转发给TARGET_PORT,因此我们的LOCAL_HOST需要设置为0.0.0.0,这样就可以接收局域网中的请求,而如果设置为“127.0.0.1”,那么依然无法实现对局域网中请求的接收。我们的LOCAL_PORT的设置可以比较随意,这个端口号是暴露给局域中的其他主机进行网络设置时使用的。
其他主机上(局域网中其他主机)的网络设置:
这里的IP:192.168.1.110,就是运行这个代码和这个science network的工具的Windows主机的IP地址。
个人github博客地址:
https://devilmaycry812839668.github.io/
python语言实现_通过端口转发实现跨网络(多网络之间)通信_science_network的更多相关文章
- 利用SSH端口转发实现跨机器直接访问
在实际项目测试中经常会遇到数据库操作,但是因为公司安全问题,访问数据库往往需要通过跳板机.但通过跳板机,测试效率大打折扣,因此通过使用SSH端口转发,从而达到跨机器直接访问数据库.实际项目中的应用会比 ...
- 基于Python的跨平台端口转发工具
背景 使用lcx也好,nc也好,总是会被安全防护软件查杀,所以想着自己写一个.顺面学习一下,端口转发的原理. 端口转发的逻辑 端口转发的逻辑很简单开启两个scoket,一个绑定IP端口进行listen ...
- Python的Asyncore异步Socket模块及实现端口转发的例子
Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...
- Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...
- 部署基于python语言的WEB发布环境
一.部署说明 1.python语言介绍 python简介 2.实验环境 实验机器:Vmware虚拟机 8核10G 网卡:桥接模式 系统:centos7.5 防火墙:关闭 Selinux:关闭 网段:1 ...
- selenium2自动化测试实战--基于Python语言
自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- ssh远程端口转发&&windows系统提权之信息收集&&网安工具分享(部分)
一.ssh远程端口转发 背景:当我们在渗透过程中,获取到内网的一台仅有内网IP的服务器后,我们可以通过ssh隧道,将内网某个主机的端口进行远程转发 1.网络拓扑图 假设获取的服务器为web服务器,we ...
- [Python学习笔记1]Python语言基础 数学运算符 字符串 列表
这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...
- SSH 端口转发+内网穿透
用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...
随机推荐
- 痛定思痛,好好做人,从头过一遍PyTorch框架(一)(1.深度学习简介、2.预备知识)
现在是2024年2月24日,13:59,从研一就开始断断续续说要过一遍框架,到现在博一下学期,还一直拖着呢,拖延症太可怕啦,决定好好做人,不拖了,就从现在开始,好好过一遍,呜呜呜呜呜呜呜呜,(罪该万死 ...
- EF Core – 8.0 new features
参考 Docs – What's New in EF Core 8 Support DateOnly and TimeOnly SQL Server 早在 2008 年就已经支持 date 和 tim ...
- mongodb 中rs.stauts()命令参数解析
转载请注明出处: rs.status()命令用于获取MongoDB副本集的状态信息.它提供了关于副本集中各个节点的详细信息,包括节点的健康状况.角色.选举状态等. 以下是查看一个mongo集群状态返回 ...
- QT疑难杂症之QML程序中如何使用文件系统模型QFileSystemModel?
简介 本文介绍了 QML程序中如何使用树状控件TreeView展示QT文件系统模型QFileSystemModel中的数据,并给出了两种实现模式. 目录 QML程序中使用文件系统模型的代码 树状控件自 ...
- PMP——如何区分项目启动会和开踢会?
在PMP考试中非常强调两个重要会议,一个叫做启动会(Initiating Meeting),另一个叫做开踢会议(Kick-off Meeting),俗称两会. 项目启动会的作用是通过发布项目章程来授权 ...
- foobar2000 v1.6.10 汉化版(2022.05.01)
foobar2000 v1.6.10 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- android ion
1. 简介 Android的ION子系统的目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存.说来简单,其实不易.在Soc硬件中,许多设备可以进行DMA,这些设备可能有不 ...
- Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解
本篇借鉴了这篇文章,如果有兴趣,大家可以看看:https://blog.csdn.net/geter_CS/article/details/84857220 1.交叉熵:交叉熵主要是用来判定实际的输出 ...
- iotdb时序数据库常见使用命令
docker 安装IOTDB核心代码: #docker启动 docker run -d -p 6667:6667 -p 31999:31999 -p 8181:8181 --name some-iot ...
- 如何对 Vue 首屏加载实现优化 ?
首屏加载优化是对于 SPA 来说的 ,首次加载所有的 html css js 所需的文件 ,后面就不会因为用户对页面的操作而跳转页面 ,没有跳转页面如何展示不同的内容呢 ? 使用 Vue 的路由机制 ...