go實現socks5代理
// go實現socks5代理 project main.go
package main
import (
"bytes"
"encoding/binary"
"fmt"
"io"
"log"
"net"
"time"
)
func main() {
log.SetFlags(log.Ltime | log.Lshortfile)
//監聽1314埠
s, err := net.Listen("tcp", ":1314")
if err != nil {
log.Panic(err)
}
//接受客戶端連線
for {
c, err := s.Accept()
if err != nil {
log.Panic(err)
}
go proxy(c)
}
}
func proxy(client net.Conn) {
defer client.Close()
var b [1024]byte
n, err := client.Read(b[:])
if err != nil {
log.Println(err)
return
}
var addr string
//sock5代理
if b[0] == 0x05 {
//回應確認代理
client.Write([]byte{0x05, 0x00})
n, err = client.Read(b[:])
if err != nil {
log.Println(err)
return
}
switch b[3] {
case 0x01:
//解析代理ip
type sockIP struct {
A, B, C, D byte
PORT uint16
}
sip := sockIP{}
if err := binary.Read(bytes.NewReader(b[4:n]), binary.BigEndian, &sip); err != nil {
log.Println("請求解析錯誤")
return
}
addr = fmt.Sprintf("%d.%d.%d.%d:%d", sip.A, sip.B, sip.C, sip.D, sip.PORT)
case 0x03:
//解析代理域名
host := string(b[5 : n-2])
var port uint16
err = binary.Read(bytes.NewReader(b[n-2:n]), binary.BigEndian, &port)
if err != nil {
log.Println(err)
return
}
addr = fmt.Sprintf("%s:%d", host, port)
}
server, err := net.DialTimeout("tcp", addr, time.Second*3)
if err != nil {
log.Println(err)
return
}
defer server.Close()
//回覆確定代理成功
client.Write([]byte{0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
//轉發
go io.Copy(server, client)
io.Copy(client, server)
}
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- go proxy 實現反向代理Go
- 內網穿透之frp+proxifier實現socks5反向代理內網穿透FRP
- Go | Go 結合 Consul 實現動態反向代理Go
- Go 實現常用設計模式(九)代理模式Go設計模式
- SOCKS5代理如何工作?
- HTTP代理和SOCKS5代理IP的不同HTTP
- 設計模式學習-使用go實現代理模式設計模式Go
- 使用netty實現socks5協議Netty協議
- frp搭建http/socks5代理FRPHTTP
- SOCKS5代理是什麼?
- 如何選擇SOCKS5代理?
- 什麼是SOCKS5代理
- SOCKS5代理和HTTP代理有什麼區別?HTTP
- HTTP代理和SOCKS5代理的三大區別HTTP
- CentOS 搭建 Socks5 Proxy 代理伺服器CentOS伺服器
- SOCKS5代理的常見用途?
- SOCKS5代理IP怎麼選?
- Proxifier for Mac(socks5全域性代理客戶端)Mac客戶端
- frp用stcp模式使用socks5代理FRPTCP模式
- SOCKS5代理的三大優勢
- SOCKS5代理的應用場景
- 深入瞭解代理伺服器:Socks5、IP代理與網路安全伺服器
- 深度解析Socks5代理與IP代理的網路應用
- SOCKS5代理的四大優勢
- SOCKS5代理的四個使用場景
- 什麼是SOCKS5代理?如何使用呢?
- SOCKS與SOCKS5代理關係介紹
- 手把手教你如何將SOCKS5代理轉換成HTTP代理?HTTP
- GO實現Redis:GO實現Redis叢集(5)GoRedis
- 【Go】go get 自動代理Go
- Git SOCKS5代理無法生效(已解決)Git
- 一篇瞭解SOCKS5代理地址
- 免費socks5代理伺服器安全嗎?伺服器
- 選擇socks5代理伺服器的方式伺服器
- SOCKS5代理IP的四大優勢
- go 實現btcGo
- GO實現Redis:GO實現Redis的AOF持久化(4)GoRedis持久化
- go mod: 配置代理Go
- Nginx-正向代理實現Nginx