news
This commit is contained in:
2
go.mod
2
go.mod
@@ -5,6 +5,7 @@ go 1.25.4
|
||||
require (
|
||||
github.com/libp2p/go-libp2p v0.45.0
|
||||
github.com/libp2p/go-libp2p-kad-dht v0.36.0
|
||||
github.com/multiformats/go-multiaddr v0.16.1
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -53,7 +54,6 @@ require (
|
||||
github.com/mr-tron/base58 v1.2.0 // indirect
|
||||
github.com/multiformats/go-base32 v0.1.0 // indirect
|
||||
github.com/multiformats/go-base36 v0.2.0 // indirect
|
||||
github.com/multiformats/go-multiaddr v0.16.1 // indirect
|
||||
github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect
|
||||
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
|
||||
github.com/multiformats/go-multibase v0.2.0 // indirect
|
||||
|
||||
47
main.go
47
main.go
@@ -17,24 +17,50 @@ import (
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
"github.com/libp2p/go-libp2p/p2p/discovery/routing"
|
||||
dutil "github.com/libp2p/go-libp2p/p2p/discovery/util"
|
||||
"github.com/libp2p/go-libp2p/p2p/host/autorelay"
|
||||
"github.com/multiformats/go-multiaddr"
|
||||
)
|
||||
|
||||
const protocolID = "/onion-chat/1.0.0"
|
||||
|
||||
// IPFS'in resmi Relay sunucuları (Halka açık ve güvenilir)
|
||||
var relayNodes = []string{
|
||||
"/ip4/147.75.83.83/tcp/4001/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
||||
"/ip4/147.75.76.67/tcp/4001/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
|
||||
"/ip4/147.75.109.213/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||
}
|
||||
|
||||
func main() {
|
||||
rendezvousString := flag.String("r", "gizli-tunel-sifresi", "Buluşma noktası için gizli kelime")
|
||||
flag.Parse()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// 1. Libp2p Host'u oluştur (ZORLANMIŞ GİZLİLİK MODU)
|
||||
// 1. Statik Relay Listesini Hazırla
|
||||
var staticRelays []peer.AddrInfo
|
||||
for _, s := range relayNodes {
|
||||
ma, err := multiaddr.NewMultiaddr(s)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
ai, err := peer.AddrInfoFromP2pAddr(ma)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
staticRelays = append(staticRelays, *ai)
|
||||
}
|
||||
|
||||
// 2. Libp2p Host'u oluştur
|
||||
h, err := libp2p.New(
|
||||
libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0", "/ip4/0.0.0.0/udp/0/quic-v1"),
|
||||
libp2p.EnableHolePunching(),
|
||||
libp2p.EnableNATService(),
|
||||
libp2p.EnableRelay(),
|
||||
libp2p.EnableAutoRelay(),
|
||||
// ÖNEMLİ: Kendimizi "Gizli" olarak işaretliyoruz ki sistem bizi Relay kullanmaya zorlasın.
|
||||
|
||||
// MANUEL RELAY AYARI (Hata çözen kısım)
|
||||
// Hazır fonksiyon yerine yukarıdaki listeyi kullanıyoruz.
|
||||
libp2p.EnableAutoRelay(autorelay.WithStaticRelays(staticRelays)),
|
||||
|
||||
libp2p.ForceReachabilityPrivate(),
|
||||
)
|
||||
if err != nil {
|
||||
@@ -44,7 +70,7 @@ func main() {
|
||||
fmt.Printf("[*] Düğüm Başladı ID: %s\n", h.ID())
|
||||
fmt.Println("[*] Küresel ağa bağlanılıyor (Bootstrapping)...")
|
||||
|
||||
// 2. DHT Başlat (ModeClient: Biz sunucu değiliz, sadece istemciyiz diyoruz, daha hızlı bağlanır)
|
||||
// 3. DHT Başlat (ModeClient)
|
||||
kademliaDHT, err := dht.New(ctx, h, dht.Mode(dht.ModeClient))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -54,7 +80,7 @@ func main() {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// 3. Bootstrap Düğümlerine Bağlan
|
||||
// 4. Bootstrap Düğümlerine Bağlan
|
||||
var wg sync.WaitGroup
|
||||
for _, peerAddr := range dht.DefaultBootstrapPeers {
|
||||
peerinfo, _ := peer.AddrInfoFromP2pAddr(peerAddr)
|
||||
@@ -68,13 +94,11 @@ func main() {
|
||||
wg.Wait()
|
||||
fmt.Println("[+] IPFS Ağına Bağlanıldı.")
|
||||
|
||||
// 4. RELAY ADRESİ BEKLEME DÖNGÜSÜ (YENİ)
|
||||
// Relay adresi almadan reklam yaparsak kimse bize bağlanamaz.
|
||||
// 5. RELAY ADRESİ BEKLEME DÖNGÜSÜ
|
||||
fmt.Print("[*] Bir Relay sunucusundan yer ayrılması bekleniyor...")
|
||||
for {
|
||||
hasRelay := false
|
||||
for _, addr := range h.Addrs() {
|
||||
// Adresler içinde /p2p-circuit/ var mı diye bakıyoruz
|
||||
if strings.Contains(addr.String(), "p2p-circuit") {
|
||||
hasRelay = true
|
||||
break
|
||||
@@ -88,15 +112,15 @@ func main() {
|
||||
time.Sleep(time.Second * 1)
|
||||
}
|
||||
|
||||
// 5. Stream Handler
|
||||
// 6. Stream Handler
|
||||
h.SetStreamHandler(protocolID, handleStream)
|
||||
|
||||
// 6. Discovery (Keşif) - ARTIK GÜVENLE YAYIN YAPABİLİRİZ
|
||||
// 7. Discovery (Keşif)
|
||||
routingDiscovery := routing.NewRoutingDiscovery(kademliaDHT)
|
||||
dutil.Advertise(ctx, routingDiscovery, *rendezvousString)
|
||||
fmt.Printf("[*] '%s' frekansında yayın yapılıyor.\n", *rendezvousString)
|
||||
|
||||
// 7. Arkadaşı Ara ve Bağlan
|
||||
// 8. Arkadaşı Ara ve Bağlan
|
||||
go func() {
|
||||
for {
|
||||
peerChan, err := routingDiscovery.FindPeers(ctx, *rendezvousString)
|
||||
@@ -111,7 +135,6 @@ func main() {
|
||||
|
||||
fmt.Printf("[?] Bulunan Peer: %s. Bağlanılıyor...\n", peer.ID)
|
||||
|
||||
// Bağlantıyı daha agresif dene
|
||||
ctxConnect, cancel := context.WithTimeout(ctx, time.Second*30)
|
||||
err := h.Connect(ctxConnect, peer)
|
||||
cancel()
|
||||
|
||||
Reference in New Issue
Block a user