From b7af675930121be56889c5efd33809136966ed49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20=C3=96zg=C3=BCn?= Date: Thu, 4 Dec 2025 04:03:47 +0300 Subject: [PATCH] news --- go.mod | 2 +- main.go | 47 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index fb97611..ac31f25 100644 --- a/go.mod +++ b/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 diff --git a/main.go b/main.go index 9b14588..fc49d4a 100644 --- a/main.go +++ b/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()