首页 > 其他分享 >GO语言实现TCP端口转发

GO语言实现TCP端口转发

时间:2024-04-09 12:22:05浏览次数:12  
标签:err nil fmt 端口 TCP GO net fromcon

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 package main   import (     "fmt"     "log"     "net" )   func main() {     //源端口,目的端口     var fromport, toport int = 2222, 88     fromaddr := fmt.Sprintf("127.0.0.1:%d", fromport)     toaddr := fmt.Sprintf("127.0.0.1:%d", toport)       fromlistener, err := net.Listen("tcp", fromaddr)       if err != nil {         log.Fatal("Unable to listen on: %s, error: %s\n", fromaddr, err.Error())     }     defer fromlistener.Close()       for {         fromcon, err := fromlistener.Accept()         if err != nil {             fmt.Printf("Unable to accept a request, error: %s\n", err.Error())         else {             fmt.Println("new connect:" + fromcon.RemoteAddr().String())         }           //这边最好也做个协程,防止阻塞         toCon, err := net.Dial("tcp", toaddr)         if err != nil {             fmt.Printf("can not connect to %s\n", toaddr)             continue         }           go handleConnection(fromcon, toCon)         go handleConnection(toCon, fromcon)       }   }   func handleConnection(r, w net.Conn) {     defer r.Close()     defer w.Close()       var buffer = make([]byte, 100000)     for {         n, err := r.Read(buffer)         if err != nil {             break         }           n, err = w.Write(buffer[:n])         if err != nil {             break         }     }   }

  

参考链接:GO语言实现TCP端口转发【代码】_苏南生的CSDN博客-CSDN博客

标签:err,nil,fmt,端口,TCP,GO,net,fromcon
From: https://www.cnblogs.com/lvjinlin/p/18123694

相关文章

  • MongoDB 中索引的构建阶段
    1.Xlock收到创建索引的请求时,会在集合上获取排他的X锁。该锁会停止该集合上的所有读/写操作{"t":{"$date":"2024-03-13T05:29:35.925+00:00"},"s":"I","c":"INDEX","id":20438,"ctx":"conn15536&quo......
  • Django后端如何限制上传文件大小
    在Django中,对上传文件大小进行限制可以通过几种不同的方法来实现。这包括在表单层面、视图层面或通过设置Django项目的全局配置。以下是一些常用的方法:方法1:使用Django设置限制文件大小在Django的settings.py文件中,你可以设置DATA_UPLOAD_MAX_MEMORY_SIZE来限制上传文件的大......
  • 在Linux中,什么是端口扫描?如何使用工具如nmap进行端口扫描?
    在Linux中,端口扫描是一种网络诊断和安全审计技术,通过该技术可以发现远程或本地主机上运行的服务及其所使用的网络端口的状态。端口扫描器发送特定类型的网络数据包到目标主机的不同端口号,根据返回的响应判断端口是否开放、关闭或被防火墙屏蔽。端口扫描可以帮助系统管理员检查自......
  • python计算机毕设【附源码】基于html的校园网设计与实现(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在信息技术快速发展的今天,互联网已经成为人们获取信息、交流沟通的重要平台。对于学校而言,拥有一个功能齐全、操作简便的校园网系统显得尤为重要。基于HTML......
  • python计算机毕设【附源码】基于MySQL的房屋中介系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今社会,房地产市场的繁荣发展使得房屋中介行业成为了连接房东与租户、买家之间的重要桥梁。随着互联网技术的不断进步和普及,传统的房屋中介服务方式已经......
  • 解决Docker端口映射后外部访问未开启的端口问题
    在使用Docker时,经常会遇到需要将容器内部的服务映射到宿主机上的端口,以便外部可以访问。但有时候会遇到这样的问题:即使宿主机上未开启对应的端口,外部依然可以通过这些端口直接访问到服务,这可能存在一定的安全隐患。本文将介绍如何解决这个问题。首先,让我们了解一下Docker端......
  • 用Go语言写了一个加班就自动发信息给老婆的脚本
    用Go语言写了一个加班就自动发信息给老婆的脚本。。。原创 磊丰 Go语言圈 2024-04-0908:30 美国 听全文Go语言圈Go语言开发者的学习好助手,分享Go语言知识,技术技巧,学习与交流Go语言开发经验,互动才有助于技术的提升,每天5分钟,助你GO语言技术快乐成长156篇原......
  • 【go】golang中的通道
    通道:channel名词:在goroutine中通信的管道注意:任何时候,同一时刻只能有一个goroutine访问通道进行发送和获取数据通道的顺序:遵循先入先出的规则通道的定义//定义一个通道var变量名chan数据类型//比如:varintChchanint64varstrChchanstringvarmapChchanm......
  • 基于融合语义信息改进的内容推荐算法。Improved content recommendation algorithm in
    引言路漫漫其修远兮,吾将上下而求索。每天一篇论文,做更好的自己。本文读的这篇论文为发表于2023年5月28日的一篇名为《基于融合语义信息改进的内容推荐算法》(基于融合语义信息改进的内容推荐算法)的文章,文章主要介绍了基于内容的推荐技术在电子商务和教育领域的广泛应用,以及传统基......
  • TCP 三次握手与四次挥手面试题(计算机网络)
    TCP基本认识TCP头格式有哪些?  序列号:在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应......