首页 > 其他分享 >Golang实现代理TCP客户端

Golang实现代理TCP客户端

时间:2023-04-23 16:22:08浏览次数:34  
标签:log err nil Fatalln TCP Golang io Copy 客户端

目标网站xxx.com,代理服务器xxxproxy.com,通过代理服务器实现流量转发。

package main

func handle(src net.Conn){
    dst,err:=net.Dial("tcp","xxx.com:80")
    if err!=nil{
        log.Fatalln("Unable to connect out unreachable host")
    }
    defer dst.Close()
    //io.Copy确保第一次来自代理服务器的数据复制到目标主机
    //因为io.Copy函数是一个阻塞函数,阻塞直到关闭连接,所以将其包装进一个groutine中,并行执行。这样handle中的执行就可以继续进行,并可以进行第二次io.Copy
    go func(){
        if _,err:=io.Copy(dst,src);err!=nil{
            log.Fatalln(err)
        }
    }()
    if _,err:=io.Copy(src,dst);err!=nil{
        log.Fatalln(err)
    }
}
func main(){
    listener,err:=net.Listen("tcp","xxxproxy.com:80")
    if err!=nil{
        log.Fatalln("ubable to bin to port")
    }
    for {
        conn,err:=listener.Accept()
        if err!=nil{
            log.Fatalln("Ubable to accept connection")
        }
        go handle(conn)
    }
}

标签:log,err,nil,Fatalln,TCP,Golang,io,Copy,客户端
From: https://www.cnblogs.com/Weber-security/p/17346870.html

相关文章

  • TCP 三次握手过程中客户端发送的 SYN 报文的基本结构
    **以下是SYN报文示意图,展示了TCP三次握手过程中客户端发送的SYN报文的基本结构**。```SegmentHeader+----------------+------------------------------+|......
  • 【spring boot】 重启kafka客户端连接
    背景kafka服务端重建时,kafka客户端会连不上kafka服务端,此时需要重启客户端重连代码实现@ServicepublicclassKafkaConsumerService{privateKafkaConsumer<String,String>consumer;@AutowiredprivateKafkaPropertieskafkaProperties;//在应用......
  • netty之TCP粘包拆包问题解决
    TCP粘包拆包问题解决什么TCP粘包和拆包问题假设客户端向服务端连续发送了两个数据包,分别用ABC和DEF来表示,那么服务端收到的数据可以分为以下三种情况:第一种情况,接收端正常收到两个数据包,即没有发生拆包和粘包的现象。第二种情况,接收端只收到一个数据包,这一个数据包中包含了发送端发......
  • TCP/IP笔记
    OSI模型:(OpenSystemInterconnect)包含七层:物理层,链路层,网络层,传输层,会话层,表示层,应用层TCP/IP协议简化为4层对应OSPI为:应用层:HTTP/FTP/SMTP/Telnet传输层:TCP/UDP网络层:ICMP,IP,IGMP链路层:ARP,RARP应用层: 链路层:交换机MAC-->MAC网络层:IP-->IPMAC表:交换机中MAC和交换机端口对应......
  • golang实现RPC
      一、RPC工作流程:摘自《goweb编程》二、go支持三个级别的RPC(HTTP,TCP,JSONRPC)三、实现http的RPC实例:3.1GORPC的函数只有符合以下条件才能被远程访问函数必须是首字母是大写必须有两个首字母大写的参数第一个参数是接收的参数,第二个参数是返回给客户端的参数,第二......
  • Forest-声明式HTTP客户端框架-集成到SpringBoot实现调用第三方restful api并实现接口
    场景Forest声明式HTTP客户端API框架,让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层,是封装调用第三方restfulapiclient接口的好帮手,是retrofit和feign之外另一个选择。通过在接口上声明注解的方式配置HTTP请求接口。官网:Forest 代码地址:forest:声明式HTTP客户......
  • 2、自动化的客户端证书颁发脚本(内有注释,不可直接复制)
    #!/bin/bashOPENVPN_SERVER=openvpn.mfc001.com(域名或公网地址)PASS=123456remove_cert(){rm-rf/etc/openvpn/client/${NAME}find/etc/openvpn/-name"$NAME.*"-delete}create_cert(){cd/etc/openvpn/easy-rsa./easyrsagen-re......
  • Redis 的Java客户端——Jedis连接池的使用详解
    一.Redis的Java客户端jedis的官方仓库地址:https://github.com/redis/jedisRedis数据结构Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样。1.1引入Redis依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</......
  • 在Golang中配置Logrus
    当你开始使用Golang编写应用程序时,记录应用程序的运行状态和错误信息是至关重要的。为了记录这些信息,你需要使用一个强大的日志库。Logrus是一个流行的日志库,它提供了丰富的功能和易于使用的API。在本文中,我们将介绍如何配置Logrus来记录应用程序的日志信息。安装Logrus首先,你......
  • golang net/rpc inject data to service function
    在golang中,net/rpc库比较牛,只需要写函数,然后使用现成的ServerCodec就可以完成rpc服务了。但是有个问题,service函数的参数都是来自客户端的,如果服务器想为某个特殊的函数注入一些配置或状态参数,就不好弄了。解决方案:修改service函数,比如原来的参数是FuncArgs结构体,现在改成t......