GO语言net包怎么实现socket5代理??

liguanfeng · · 1271 次点击 · 开始浏览   
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
package main import ( "fmt" "net" "io" "strconv" ) var ( VER, CONNECT_OK = []byte{5, 0}, []byte{5, 0, 0, 1, 0, 0, 0, 0, 0, 0 } ) func main() { listen, err := net.Listen("tcp", "127.0.0.1:9999") fmt.Println("tcp server start success") if err != nil { fmt.Print(err) return } for { conn, err := listen.Accept() if err != nil { fmt.Println("client conn error ", err) } defer conn.Close() go hanlder(conn) } } func hanlder(conn net.Conn) { bs := make([]byte, 1024) read(conn, bs) writer(conn, VER) read(conn, bs) var ip string for i, v := range bs[4:8] { ip += strconv.Itoa(int(v)) if i != 3 { ip += "." } } client,err := net.Dial("tcp",ip+":80") if err != nil { fmt.Println("create client socket error --> ",err) return } fmt.Println("ip:",ip, "client:",conn.RemoteAddr()) writer(conn, CONNECT_OK) io.Copy(client,conn) io.Copy(conn,client) conn.Close() client.Close() fmt.Println(" success ") //os.Exit(0) } func read(conn net.Conn, bs []byte) (len int) { len, err := conn.Read(bs) if err != nil && err != io.EOF { fmt.Print("conn read err ", err) len = -1 return } bs = bs[:len] fmt.Println("request <--- ", bs, " len ", len) return } func writer(conn net.Conn, bs []byte) (int, error) { len, err := conn.Write(bs) fmt.Println("response ---> ", bs) return len, err }
1271 次点击  
加入收藏 微博
1 回复  |  直到 2016-07-06 09:20:23
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传