博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang tcp转发 remoteAddr错误
阅读量:5127 次
发布时间:2019-06-13

本文共 2652 字,大约阅读时间需要 8 分钟。

Golang tcp 转发

第一版本

accept获取的Conn里的localAddr做为源地址,remoteAddr来做为目的地址

// tcpForwardpackage mainimport (    "fmt"    "net"    "os")func TcpForward(port int) {    lisPort := fmt.Sprint(":", port)    listen, err := net.Listen("tcp", lisPort)    if err != nil {        fmt.Println("fault to listen,err: %s", err.Error())        os.Exit(1)    }    defer listen.Close()    fmt.Println("listenning now!")    for {        fromConn, err := listen.Accept()        if err != nil {            fmt.Println("fault,err: %s", err.Error())            fromConn.Close()            continue        }        go toDial(fromConn)    }}func toDial(fromConn net.Conn) {    toAddr := fromConn.RemoteAddr()    toConn, err := net.Dial("tcp", toAddr.String())    if err != nil {        fmt.Println("fault,err: %s", err.Error())        toConn.Close()    }    fmt.Println("%s to %s", fromConn.LocalAddr().String(), toConn.RemoteAddr().String())    go copy(fromConn, toConn, 512)    go copy(toConn, fromConn, 512)}func copy(f, t net.Conn, n int) {    defer f.Close()    defer t.Close()    var buf = make([]byte, n)    for {        count, err := f.Read(buf)        if err != nil {            fmt.Println("fault,err: %s", err.Error())            break        }        count, err = t.Write(buf[:count])        if err != nil {            fmt.Println("fault,err: %s", err.Error())            break        }    }}

win设置代理,用edge访问网页报错!!!

报错信息:

C:/Go/bin/go.exe build [C:/Users/imcjb/Desktop/egoweb]成功: 进程退出代码 0.C:/Users/imcjb/Desktop/egoweb/egoweb.exe  [C:/Users/imcjb/Desktop/egoweb]Hello World!C:\Users\imcjb\Desktop\egoweb\egoweb.exelistenning now!fault,err: %s dial tcp 127.0.0.1:53391: connectex: No connection could be made because the target machine actively refused it.panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x18 pc=0x6154cf]goroutine 20 [running]:main.toDial(0x6f4a20, 0xc000092038)    C:/Users/imcjb/Desktop/egoweb/tcpForward.go:36 +0x3bfcreated by main.TcpForward    C:/Users/imcjb/Desktop/egoweb/tcpForward.go:26 +0x2dbfault,err: %s dial tcp 127.0.0.1:53392: connectex: No connection could be made because the target machine actively refused it.panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x18 pc=0x6154cf]goroutine 19 [running]:main.toDial(0x6f4a20, 0xc000092030)    C:/Users/imcjb/Desktop/egoweb/tcpForward.go:36 +0x3bfcreated by main.TcpForward    C:/Users/imcjb/Desktop/egoweb/tcpForward.go:26 +0x2db错误: 进程退出代码 2.

错误猜测

这里的remoteaddr返回的其实是转发前的真实ip,而非目的ip

代码部分还有一个小问题println、sprintf使用错误,他们的参数是interface{}

转载于:https://www.cnblogs.com/boxker/p/11041049.html

你可能感兴趣的文章
js日期时间函数(经典+完善+实用)
查看>>
步进指令与顺控程序设计
查看>>
记一次数据库异常恢复
查看>>
随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比...
查看>>
python3(1)
查看>>
简单聊聊智能硬件的固件测试
查看>>
pat1042. Shuffling Machine (20)
查看>>
霓虹灯的效果
查看>>
学习进度六
查看>>
Spring Boot干货系列:(七)默认日志logback配置解析
查看>>
PHP - 判断php是否对表单数据内的特殊字符自动转义
查看>>
简易商城 [ html + css ] 练习
查看>>
Linux 下Makefile教程
查看>>
[转]MSP430另一种UART实现
查看>>
myeclipse部署多个web工程
查看>>
tcp_协议基础
查看>>
layui弹窗 之 iframe关闭
查看>>
【BZOJ2565】最长双回文串 Manacher
查看>>
There is no PasswordEncoder mapped for the id "null"
查看>>
windows10 conda python多版本切换
查看>>