Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Servis tersembunyi yang gigih di golang

Servis tersembunyi yang gigih di golang

WBOY
WBOYke hadapan
2024-02-09 12:33:09884semak imbas

Servis tersembunyi yang gigih di golang

PHP Editor Xinyi akan membawa anda menerokai perkhidmatan tersembunyi yang berterusan di golang. Golang ialah bahasa pengaturcaraan yang cekap yang terkenal dengan prestasi dan kesesuaiannya yang cemerlang. Dalam era Internet yang pantas ini, perkhidmatan tersembunyi telah menjadi bahagian penting dalam banyak aplikasi. Mereka menyediakan cara yang selamat dan boleh dipercayai untuk memastikan aplikasi berjalan untuk jangka masa yang lama sambil menyembunyikan butiran dalaman mereka. Artikel ini akan memperkenalkan cara melaksanakan perkhidmatan tersembunyi berterusan dalam golang, dan meneroka senario dan kelebihan aplikasinya dalam aplikasi praktikal. Sama ada anda seorang pemula atau pembangun berpengalaman, anda akan memperoleh pengetahuan yang berguna dan pengalaman praktikal. Mari kita terokai topik menarik ini bersama-sama!

Kandungan soalan

Saya cuba mengehoskan perkhidmatan tersembunyi di golang menggunakan github.com/cretz/bine/tor. Tetapi setiap kali saya memulakan program, perkhidmatan tersembunyi baharu (dengan alamat .onion baharu) dimulakan dan bukannya perkhidmatan tersembunyi sebelumnya.

Ini kod yang saya gunakan

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)
    }
}


Saya cuba memaksa program menggunakan DataDir yang sama

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

Tetapi ini tidak berkesan.

Penyelesaian

Anda perlu mencipta dan menyimpan kunci dan kemudian menyerahkannya ke ListenConf:

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

Nota:

Perpustakaan yang anda gunakan menyediakan fungsi untuk melakukan ini.

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

Lakukan ini sekali dan jimat

: privateKeyString

keyPair, _ := ed25519.GenerateKey()
privateKeyString := hex.EncodeToString(keyPair.PrivateKey())

Kemudian dalam kod pelayan anda:

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

Atas ialah kandungan terperinci Servis tersembunyi yang gigih di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam