tcp udp proxy

article/2025/9/21 1:30:23

服务目的

首先如下图所示:
在这里插入图片描述
作为一个内外网的通信,必须使用tcp 和 udp 的proxy 把内网和外网打通,比如中间是一个有两个网卡的路由器,打通以后,由proxy 发送数据到服务端,服务端按照上图处于外网。

服务端测试

使用python 来写服务端测试永远是一个好主意

使用python写一个服务端,也可以使用py写一个tcp服务端,同样的道理

import socket
host = "192.168.0.109"
port = 7000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host, port))
print("udp server start on port:", port)
while True:data, addr = sock.recvfrom(1024)print("Receive data = %s" % data)if data == b"exit":sock.sendto(b"Goodbye!\n", addr)continuesock.sendto(b"Hello %s!\n" % data, addr)

以上简单实现了一个udp服务端,下面使用go 写一个udp 客户端

udp 客户端


使用go写一个udp客户端,也 可以使用go写一个tcp 客户端。同样的道理
```go
package mainimport ("fmt""net"
)func main() {conn, err := net.Dial("udp", "127.0.0.1:7000")if err != nil {fmt.Println("net.dial err:", err)return}defer conn.Close()conn.Write([]byte("are you ready?"))buf := make([]byte, 4096)n, err := conn.Read(buf)if err != nil {fmt.Println("conn.Read err:", err)return}fmt.Println("server back:", string(buf[:n])) 
}

转发服务

下面使用go写一个tcp 转发服务


package mainimport ("flag""fmt""io""net""os""strings""sync"
)var lock sync.Mutex
var trueList []string
var ip string
var list stringfunc main() {flag.StringVar(&ip, "l", ":6000", "-l=0.0.0.0:6000 指定服务监听的端口")flag.StringVar(&list, "d", "127.0.0.1:1789,127.0.0.1:1788", "-d=127.0.0.1:1789,127.0.0.1:1788 指定后端的IP和端口,多个用','隔开")flag.Parse()trueList = strings.Split(list, ",")if len(trueList) <= 0 {fmt.Println("后端IP和端口不能空,或者无效")os.Exit(1)}server()
}func server() {lis, err := net.Listen("tcp", ip)if err != nil {fmt.Println(err)return}defer lis.Close()for {conn, err := lis.Accept()if err != nil {fmt.Println("建立连接错误:%v\n", err)continue}fmt.Println(conn.RemoteAddr(), conn.LocalAddr())go handle(conn)}
}func handle(sconn net.Conn) {defer sconn.Close()ip, ok := getIP()if !ok {return}dconn, err := net.Dial("tcp", ip)if err != nil {fmt.Printf("连接%v失败:%v\n", ip, err)return}ExitChan := make(chan bool, 1)go func(sconn net.Conn, dconn net.Conn, Exit chan bool) {_, err := io.Copy(dconn, sconn)fmt.Printf("往%v发送数据失败:%v\n", ip, err)ExitChan <- true}(sconn, dconn, ExitChan)go func(sconn net.Conn, dconn net.Conn, Exit chan bool) {_, err := io.Copy(sconn, dconn)fmt.Printf("从%v接收数据失败:%v\n", ip, err)ExitChan <- true}(sconn, dconn, ExitChan)<-ExitChandconn.Close()
}func getIP() (string, bool) {lock.Lock()defer lock.Unlock()if len(trueList) < 1 {return "", false}ip := trueList[0]trueList = append(trueList[1:], ip)return ip, true
}

go 语言本身实现了协程,以上程序并没有实现产品化,只是一个代码示例,读者需要自己补充写好。


http://chatgpt.dhexx.cn/article/D9YlGWVd.shtml

相关文章

UDP-RTP协议解析

一、RTP协议 数据传输协议RTP&#xff0c;用于实时传输数据。RTP报文由两部分组成&#xff1a;报头和有效载荷 二、RTP的会话过程 当应用程序建立一个RTP会话时&#xff0c;应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成&#xff0c;有两个端口&a…

UDP 理解

这里需要指出的一点是&#xff0c;伪首部完全是虚拟的&#xff0c;它并不会和用户数据报一起被发送出去&#xff0c;只是在校验和的计算过程中会被使用到&#xff0c;伪首部主要来自于运载UDP报文的IP数据报首部&#xff0c;将源IP地址和目的IP地址加入到校验和的计算中可以验证…

关于TCP/UDP

目录 1、TCP协议 1.1 TCP协议格式 1.2 TCP协议原理 2、UDP协议 在学习TCP/UDP之前先来了解以下整体的通信传输&#xff0c;它是一个向下封装、向上分用的过程&#xff1a; 这是TCP/IP四层模型&#xff0c;所以要想实现通讯&#xff0c;通过TCP建立和断开连接是至关重要的&a…

UDP详解

1、UDP数据包格式 UDP 是User Datagram Protocol的简称&#xff0c; 中文名是用户数据报协议&#xff0c;是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09; 参考模型中一种无连接的传输层协议&#xff0c;提供面向事务的简单不可靠信息传…

TCPUDP相关介绍

TCP and UDP TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是面向连接的协议&#xff0c;也就是说&#xff0c;在收发数据前&#xff0c;必须和对方建立可靠的连接。 一个TCP连接必须要经过三次握手才能建立起来。断开连接需要四次挥手才…

TCPUDP

TCP&#xff1a;面向连接的服务&#xff0c;可靠的进程到进程的通信协议。&#xff08;因为TCP里面封装了端口号&#xff0c;端口号就意味着一个服务&#xff0c;进程&#xff09;&#xff1b;应用场景&#xff1a;如&#xff1a;文件传输&#xff1b;HTTP应用层协议 UDP&…

TCP/UDP

Tcp / ip : 应用层、传输层、网络层、网络接口层 查看本机ip&#xff1a; windons r &#xff08;进入交互换环境&#xff09;ipconfigping 本机ip 查看本机网络有无问题 端口&#xff1a; 知名端口(固定端口)&#xff1a;0—1023动态端口&#xff1a;程序可以设置的端口 1…

UDP协议的详细解析

UDP数据报 一、UDP的概述&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09; UDP是传输层的协议&#xff0c;功能即为在IP的数据报服务之上增加了最基本的服务&#xff1a;复用和分用以及差错检测。 UDP提供不可靠服务&#xff0c;具有TCP所没有的优…

UDP协议详解

一、UDP协议概述 传输层另一个重要的协议就是用户数据报协议 UDP。UDP 只在 IP 的数据报服务之上增加了很少一点的功能&#xff0c;这就是复用和分用的功能以及差错检测的功能。 <注> UDP(User Datagram Protocol&#xff0c;用户数据报协议) UDP的主要特点是&#xff1a…

截图文字识别工具

tkinter程序源码&#xff1a;初识Python&#xff0c;如有不足请多指教。 import tkinter as tk import keyboard # 安装&#xff1a; pip install keyboard from PIL import ImageGrab # pip install pillow import time from aip import AipOcr # pip install baidu-a…

电脑截图如何快速识别文字?3分钟教会你快速截图识别怎么做

电脑截图已经成为我们日常生活中的常见操作&#xff0c;无论是工作还是学习&#xff0c;我们都有可能需要截取电脑屏幕上的某个区域进行保存或分享。但是&#xff0c;有时候我们需要识别截图中的文字内容&#xff0c;这时候该怎么办呢&#xff1f;接下来&#xff0c;本文将为大…

python截图识别文字_10几行代码,用python打造实时截图识别OCR|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/ 你一定用过那种“OCR神器”&#xff0c;可以把图片中的文字提取出来&#xff0c;极大的提高工作效率。 &#xff01; 今天&#xff0c;我们就来做一款实时截图识别的小工具。顾名思义&#xff0c;运行程序时&#xff0c;可以…

chrome拓展 --截屏文字识别

文章目录 场景源代码功能实现点击在页面上出现裁剪框百度云文字识别复制选中 参考 场景 因为学习通题目都加密了复制过来也无法进行搜题 无奈写了这个插件 为什么使用插件的形式 而不是脚本 &#xff1f; 使用了html2canvas结果是比的是dom文字变成了加密过的 无法识别 于是使用…

微信怎么识别图片文字?其实操作很简单

微信作为中国最流行的社交媒体应用程序之一&#xff0c;已经成为人们分享照片和信息的主要平台之一。在微信中&#xff0c;用户可以轻松地将照片上传到朋友圈或与朋友共享。然而&#xff0c;在某些情况下&#xff0c;这些照片上可能有一些重要的文字信息&#xff0c;这些信息需…

电脑截图怎么识别文字?识别原理又是什么?

在日常工作和生活中&#xff0c;我们经常需要从图片或截图中提取文字&#xff0c;但是手动输入费时费力&#xff0c;因此电脑截图文字识别技术应运而生。本文将介绍电脑截图文字识别的原理和方法。 OCR技术的原理 OCR是一种光学字符识别技术&#xff0c;其原理是将图片中的文字…

C# 通用OCR识别 文字识别 中文识别

软件说明 基于以下两个开源项目&#xff0c;做了再次封装 https://github.com/paddlepaddle/PaddleOCR PaddleOCRSharp: 本项目是一个基于PaddleOCR的C代码修改并封装的.NET的OCR工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同…

手把手教截图识别文字

点击上方 毛利学python&#xff0c;选择置顶或星标 第一时间送达Python 技术干货&#xff01; 最近不想打字&#xff0c;直接截图然后识别出来文字&#xff0c;不就可以不用打吗&#xff1f;我就是太懒了。 keyboard 这个库让你可以控制和监控输入设备。 对于每一种输入设备&a…

屏幕可以截图识别文字?我来教你

我们经常浏览一些网页的时候&#xff0c;看到一些优美的文字&#xff0c;想将它复制下来&#xff0c;却发现粘贴的时候都是一些乱码之类的&#xff0c;以前我估计你们大多数的人都会选择用手抄&#xff0c;但是今天我来了&#xff0c;我给大家介绍一个非常有用的一个方法&#…

python截图识别文字_Python技术:截图文字识别工具

#01 截图文字识别工具 有时候在海报上面&#xff0c;图片上面&#xff0c;或者PDF文档中&#xff0c;经常出现一些唯美的文字。这个时候想要复制下来才发现不能复制。因为有的是图片&#xff0c;有的是PDF。 可以使用Python制作一个小工具&#xff0c;来识别图片上的文字。但…

这几个截图文字识别软件可以自动识别文字

从事新媒体行业的朋友&#xff0c;是不是经常在电脑桌面上或者在浏览也中临时截图识别文字呢&#xff1f;尤其是为了方便&#xff0c;直接识别图片转为文字的话&#xff0c;我们就可以节省了很多打字的时间。那你们知道怎么截图文字识别吗&#xff1f;今天我来教你们3个非常简单…