Maison >développement back-end >Golang >Utilisation du proxy go's socks5

Utilisation du proxy go's socks5

WBOY
WBOYavant
2024-02-09 09:45:10855parcourir

Utilisation du proxy gos 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.

Contenu de la question

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

Solution de contournement

On dirait que vous voulez ceci :

  1. Un outil qui écoute sur votre ordinateur local sur un port spécifique via TCP
  2. Vous pouvez effectuer des requêtes de protocole ocks5 sur ce port et il devrait toutes les transmettre à un autre serveur chaussettes5 sur une autre machine distante.
  3. Le serveur chaussettes5 se charge d'établir une connexion avec la cible dans la requête du protocole chaussettes5

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

Votre code actuel fonctionnera pour la plupart, à l'exception du fait que vous devez utiliser 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer