Maison > développement back-end > Golang > le corps du texte

Services cachés persistants dans Golang

WBOY
Libérer: 2024-02-09 12:33:09
avant
914 Les gens l'ont consulté

Services cachés persistants dans Golang

L'éditeur PHP Xinyi vous emmènera explorer les services cachés persistants de Golang. Golang est un langage de programmation efficace connu pour ses excellentes performances et sa concurrence. À l’ère d’Internet où tout va très vite, les services cachés sont devenus une partie importante de nombreuses applications. Ils offrent un moyen sûr et fiable de faire fonctionner les applications pendant de longues périodes tout en masquant leurs informations internes. Cet article présentera comment implémenter des services cachés persistants dans Golang et explorera ses scénarios d'application et ses avantages dans des applications pratiques. Que vous soyez débutant ou développeur expérimenté, vous acquerrez des connaissances utiles et une expérience pratique. Explorons ensemble ce sujet intéressant !

Contenu de la question

J'essaie d'héberger un service caché dans Golang en utilisant github.com/cretz/bine/tor. Mais chaque fois que je démarre le programme, un nouveau service caché (avec une nouvelle adresse .onion) est démarré à la place du service caché précédent.

C'est le code que j'utilise

package main

import (
    "context"
    "fmt"
    "github.com/cretz/bine/tor"
    "log"
    "net/http"
    "time"
)

func main() {
    // Start tor with default config
    fmt.Println("Starting and registering onion service, please wait a couple of minutes...")
    t, err := tor.Start(nil, nil)
    if err != nil {
        log.Panicf("Unable to start Tor: %v", err)
    }
    defer t.Close()
    // Wait at most a few minutes to publish the service
    listenCtx, listenCancel := context.WithTimeout(context.Background(), 3*time.Minute)
    defer listenCancel()
    // Create a v3 onion service
    onion, err := t.Listen(listenCtx, &tor.ListenConf{Version3: true, RemotePorts: []int{80}})
    if err != nil {
        log.Panicf("Unable to create onion service: %v", err)
    }
    defer onion.Close()
    fmt.Printf("Open Tor browser and navigate to http://%v.onion\n", onion.ID)
    fmt.Println("Press enter to exit")
    // Serve the current folder from HTTP
    errCh := make(chan error, 1)
    go func() { errCh <- http.Serve(onion, http.FileServer(http.Dir("."))) }()
    // End when enter is pressed
    go func() {
        fmt.Scanln()
        errCh <- nil
    }()
    if err = <-errCh; err != nil {
        log.Panicf("Failed serving: %v", err)
    }
}


Copier après la connexion

J'ai essayé de forcer le programme à utiliser le même DataDir

t, err := tor.Start(nil, &tor.StartConf{DataDir: "data-dir"})

Mais ça ne marche pas.

Solution de contournement

Vous devez créer et stocker une clé, puis la transmettre à ListenConf :

Voir : https://github.com/cretz/bine/blob/master/tor/listen.go#L56

Remarque :

La bibliothèque que vous utilisez fournit des fonctions pour ce faire.

Voir : https://github.com/cretz/bine/blob/b9d31d9c786616742e39a121b60522e803e96731/torutil/ed25519/ed25519.go#L132

Faites cela une fois et enregistrez privateKeyString :

keyPair, _ := ed25519.GenerateKey()
privateKeyString := hex.EncodeToString(keyPair.PrivateKey())
Copier après la connexion

Puis dans votre code serveur :

privateKeyBytes, _ := hex.DecodeString(privateKeyString)
privateKey := ed25519.PrivateKey(privateKeyBytes)
lc := &tor.ListenConf{
    Key: privateKey,
    Version3: true,
    RemotePorts: []int{80}
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal