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!
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.
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.
Lakukan ini sekali dan jimat: privateKeyString
keyPair, _ := ed25519.GenerateKey() privateKeyString := hex.EncodeToString(keyPair.PrivateKey())
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!