Maison >développement back-end >Golang >Utilisation du proxy go's socks5
Ce que l'éditeur PHP Youzi vous présentera aujourd'hui, c'est le proxy chaussettes5 implémenté en langage Go. Lors de l'accès au réseau, nous rencontrons souvent des situations dans lesquelles nous devons masquer notre véritable adresse IP ou contourner les blocages du réseau. L'utilisation du proxy chaussettes5 peut nous aider à atteindre ces objectifs facilement. En tant que langage de programmation efficace et concis, le langage Go possède de riches bibliothèques réseau et fonctionnalités de concurrence, et est très approprié pour développer des outils de proxy réseau. Ensuite, nous présenterons en détail comment écrire un serveur proxy chaussettes5 simple et pratique en utilisant le langage Go.
Je veux savoir s'il est possible d'écouter sur un port local, par exemple : 1080ocks5, et d'avoir toutes les connexions sur ce port proxy pour utiliser un hôte externe : portsocks5
func main() { l, err := net.Listen("tcp", "127.0.0.1:1080") if err != nil { fmt.Print(err) } defer l.Close() for { conn, err := l.Accept() if err != nil { fmt.Print(err) } go handle(conn) } } func handle(conn net.Conn) { defer conn.Close() dialect, err := proxy.SOCKS5("tcp", "externalhost:externalport", nil, proxy.Direct) newConn, err := dialect.Dial("tcp", "targethost:targetport") if err != nil { log.Printf("Connection error: %s", err.Error()) } go func() { _, err = io.Copy(newConn, conn) if err != nil { log.Printf("Connection error: %s", err.Error()) } }() _, err = io.Copy(conn, newConn) if err != nil { log.Printf("Connection error: %s", err.Error()) } } func handle(conn net.Conn) { defer conn.Close() }
Je dois obtenir l'adresse de destination et vérifier que la connexion est chaussettes5, puis faire un proxy en utilisant l'adresse IP externe et la transmettre à dialect.dial
On dirait que vous voulez ceci :
Dans ce cas, vous avez juste besoin d'un proxy TCP de base. Votre outil n’a pas besoin de regarder à l’intérieur de la requête chaussettes5, ni de se connecter à la machine distante. Vous souhaitez uniquement transférer toutes les connexions du point de terminaison local vers le point de terminaison distant. proxy.SOCKS5
net.Dial
(au lieu de dialect.Dial
) pour vous connecter à "externalhost :externalport"
et pas besoin de créer un composeur. net.Dial
(而不是 dialect.Dial
)连接到 "externalhost:externalport"
,并且不需要创建 proxy.SOCKS5
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!