Bu sayfa son olarak 2022-01 tarihinde güncellendi ve 0.9.52 yöneltici sürümü için geçerli.

I2P üzerinde birkaç bittorrent istemcisi ve izleyicisi var. I2P adresleme, IP ve kapı numarası yerine bir hedef kullandığından, I2P üzerinde çalışmak için izleyici ve istemci yazılımında küçük değişiklikler gerekir. Bu değişiklikler aşağıda belirtilmiştir. Eski I2P istemcileri ve izleyicileri ile uyumluluk sağlamak için yönergeleri dikkatlice inceleyin.

Bu sayfada, tüm istemciler ve izleyiciler için ortak olan iletişim kuralı ayrıntıları bulunur. Belirli istemci ve izleyiciler, diğer benzersiz özellikleri veya iletişim kurallarını uygulayabilir.

I2P için ek istemci ve izleme yazılımı kapı noktalarını memnuniyetle karşılıyoruz.

Duyurular

İstemciler, eski izleyicilerle uyumluluk için duyuruya genellikle sahte bir port=6881 parametresi ekler. İzleyiciler port parametresini yok sayabilir ve buna gerek duymamalıdır.

ip parametresi, istemcinin base 64. hedefidir, I2P Base 64 alfabesini kullanarak [A-Z][a-z][0-9]-~. Hedefler 387+ bayttır, dolayısıyla Base 64, 516+ bayttır. İstemciler, daha eski izleyicilerle uyumluluk sağlamak için genellikle Base 64 hedefine ".i2p" ekler. İzleyicilere, ".i2p" eklenmesi gerekmemelidir.

Diğer parametreler standart bittorrent ile aynıdır.

İstemciler için geçerli hedefler 387 ve üzeri bayttan oluşur (Base 64 kodlamasında 516 ve üzeri). Şu an normal kabul edilebilecek en fazla değer 475 bayttır. İzleyicinin, kısa yanıtlar vermesi için Base64 kodunu çözmesi gerektiğinden (aşağıya bakın), bir izleyicinin duyurulan hatalı Base64 kodunu çözmesi ve reddetmesi gerekebilir.

Varsayılan yanıt türü, kısa değildir. İstemciler, compact=1 parametresi ile kısa bir yanıt isteyebilir. İzleyici, istendiğinde kısa bir yanıt verebilir, ancak zorunlu değildir.

Yeni I2P istemcilerinin geliştiricilerinin, duyurular için 4444 numaralı kapıdaki HTTP istemci vekil sunucusu yerine kendi tünellerini kullanması şiddetle önerilir. Bunu yapmak hem daha verimlidir hem de izleyici tarafından hedefin dayatılmasını sağlar (aşağıya bakın).

Şu anda UDP duyurusunu/yanıtlarını destekleyen herhangi bir I2P istemcisi ya da izleyicisi bilinmiyor.

Kısa Olmayan İzleyici Yanıtları

Kısa olmayan yanıt, bir I2P "ip" parametresi ile standart bittorrent üzerindeki gibidir. This is a long base64-encoded "DNS string", probably with a ".i2p" suffix.

İzleyiciler, eski istemcilerle uyumluluk için duyuruya genellikle sahte bir port anahtarı ekler ya da duyurudaki port parametresini kullanır. İstemciler port parametresini yok sayabilir ve buna gerek duymamalıdır.

ip anahtarının değeri, yukarıda açıklandığı gibi, istemcinin base 64 hedefidir. İzleyiciler genellikle, daha eski istemcilerle uyumluluk için, duyuru ip parametresinde değilse, Base 64 hedefine ".i2p" ekler. İstemciler için yanıtlara ".i2p" eklenmesi gerekmemelidir.

Diğer yanıt anahtarları ve değerleri standart bittorrent ile aynıdır.

Kısa İzleyici Yanıtları

Kısa yanıtta, "eşler" sözlük anahtarının değeri, uzunluğu 32 baytın katı olan bir tek baytlık dizgedir. Bu dizgede, eşlerin ikili Hedeflerinin birleştirilmiş 32 baytlık SHA-256 karması bulunur. Bu karmanın, hedef dayatması (aşağıya bakın) kullanılmadığı sürece izleyici tarafından hesaplanması gerekir. Bu durumda X-I2P-DestHash veya X-I2P-DestB32 HTTP üst bilgilerinde aktarılan karma, binary olarak dönüştürülebilir ve depolanabilir. Eşler anahtarı var olmayabilir ya da eşler değeri sıfır uzunlukta olabilir.

Kısa yanıt desteğinin kullanımı istemciler ve izleyiciler için isteğe bağlı olsa da, normal yanıt boyutunu 90% kadar azalttığı için kullanılması önemle önerilir.

Hedef Dayatma

Hepsi olmasa da bazı I2P bittorrent istemcileri kendi tünelleri üzerinden duyuru yapar. İzleyiciler, bunu zorunlu kılarak ve I2PTunnel HTTP sunucusu tüneli tarafından eklenen HTTP üst bilgilerini kullanarak istemcinin Hedefini doğrulamayı ve sızdırılmasını önlemeyi seçebilirler. Üst bilgiler, aynı bilgi için farklı X-I2P-DestHash, X-I2P-DestB64 ve X-I2P-DestB32 biçimlerindedir. Bu üst bilgiler istemci tarafından taklit edilemez. Hedefleri zorunlu kılan bir izleyici IP duyuru parametresine gerek duymaz.

Birkaç istemci, duyurular için kendi tünelleri yerine HTTP vekil sunucusunu kullandığından, hedefleri zorunlu kılmak, kendi tünelleri üzerinden duyuru yapmaya dönüştürülmemiş istemciler tarafından kullanılmasını önler.

Ne yazık ki, ağ büyüdükçe kötü niyetli davranış miktarı da artacak. Bu nedenle sonunda tüm izleyicilerin hedefleri zorunlu kılmasını bekliyoruz. Hem izleyici hem de istemci geliştiricileri bunu öngörmelidir.

Sunucu Adlarını Duyurma

Torrent dosyalarındaki adres sunucu adlarını duyurusu, genellikle I2P adlandırma standartlarını izler. Adres defterlerindeki sunucu adlarına ve ".b32.i2p" Base 32 sunucu adlarına ek olarak, tam Base 64 hedefi (".i2p" eklenmiş [ya da eklenmemiş?]) desteklenmelidir. Açık olmayan izleyiciler, bu biçimlerden herhangi birinde kendi sunucu adlarını tanımalıdır.

Anonimliği korumak için, istemciler genellikle torrent dosyalarındaki I2P olmayan duyuru adreslerini yok saymalıdır.

İstemci Bağlantıları

İstemciden istemciye bağlantılar, standart TCP üzerinden iletişim kuralını kullanır. Şu anda bilinen bir uTP iletişimi destekleyen I2P istemcisi yok.

I2P, yukarıda açıklandığı gibi adresler için 387+ bayt Hedefler kullanır.

İstemci yalnızca hedefin karma değerine sahipse (bir kısa yanıt ya da PEX gibi), bunu Base 32 ile kodlayıp, ".b32.i2p" ekleyerek, varsa tam hedefi döndürecek olan adlandırma hizmetini sorgulayan bir arama yapmalıdır.

İstemci, kısa olmayan bir yanıtta aldığı bir eşin tam Hedefine sahipse, bunu doğrudan bağlantı kurulumunda kullanmalıdır. Arama için bir Hedefi tekrar Base 32 karma değerine dönüştürmeyin, bu oldukça verimsiz olur.

Ağ Geçişini Engelleme

Anonimliği korumak için, I2P bittorrent istemcileri genellikle I2P dışındaki duyuruları ya da eş bağlantıları desteklemez. I2P HTTP vekil sunucuları genellikle duyuruları engeller. Bilinen bir Bittorrent trafiği destekleyen SOCKS vekil sunucusu yok.

I2P olmayan istemcilerin bir HTTP vekil sunucusu aracılığıyla kullanılmasını önlemek için, I2P izleyicileri genellikle bir X-Forwarded-For HTTP üst bilgisi içeren erişimleri veya duyuruları engeller. İzleyiciler, IPv4 veya IPv6 IP adresleri olan standart ağ duyurularını reddetmeli ve bunları yanıt olarak aktarmamalıdır.

PEX

I2P PEX, temel olarak ut_pex kullanır. Resmi bir ut_pex teknik özelliği varmış gibi görünmediğinden, yardım almak için libtorrent kaynağına bakmak gerekebilir. eklenti el sıkışmasında "i2p_pex" olarak tanımlanan bir eklenti iletisidir. "added", "added.f" ve "dropped" olmak üzere 3 anahtara kadar kodlanmış bir sözlük içerir. Eklenen ve bırakılan değerlerin her biri, uzunluğu 32 baytın katı olan tek bir bayt dizgesidir. Bu bayt dizgeleri, eşlerin ikili hedeflerinin birleştirilmiş SHA-256 karmalarıdır. Bu, yukarıda belirtilen i2p eşlerinin kısa yanıt biçimindeki sözlük değeriyle aynı biçimdedir. added.f değeri, varsa, ut_pex üzerindekiyle aynıdır.

DHT

DHT desteği, 0.9.2 sürümünden başlayarak i2psnark istemcisine eklenmiştir. BEP 5 ile öngörülen farklılıklar aşağıda açıklanmıştır ve değişebilir. DHT destekleyen bir istemci geliştirmek istiyorsanız I2P geliştiricileri ile görüşün.

Standart DHT ile farklı olarak, I2P DHT, el sıkışma seçeneklerinde veya PORT iletisinde bir bit kullanmaz. Eklenti el sıkışmasında "i2p_dht" olarak tanımlanan bir eklenti iletisiyle tanıtılır. Her ikisi de tamsayı olan "port" ve "rport" olmak üzere iki anahtarlı kodlanmış bir sözlük içerir.

Kısa düğüm bilgisinde listelenen UDP veri şeması) kapı numarası, yinelenebilir (imzalı) veri şemalarını almak için kullanılır. Bu, duyurular dışında sorgular için kullanılır. Buna "sorgu kapı numarası" diyoruz. Bu, eklenti iletisindeki "port" değeridir. Sorgular, 17 numaralı I2CP iletişim kuralını kullanır.

Bu UDP kapı numarasına ek olarak, sorgu kapı numarası + 1 değerine eşit ikinci bir veri birimi kapı numarası kullanıyoruz. Bu kapı, yanıtlar, hatalar ve duyurular için imzasız (ham) veri birimlerini almak için kullanılıyor. Yanıtlar sorguda gönderilen belirteçleri içerdiğinden ve imzalanması gerekmediğinden bu kapı numarası verimliliği artırır. Buna "yanıt kapı numarası" diyoruz. Bu, eklenti iletisindeki "rport" değeridir. 1 + sorgu kapı numarası olmalıdır. Yanıtlar ve duyurular, 18 numaralı I2CP iletişim kuralını kullanır.

Kısa eş bilgisi 4 bayt IP + 2 bayt kapı numarası yerine 32 bayttır (32 bayt SHA256 karma). Eş kapı numarası yoktur. Bir yanıtta, "değerler" anahtarı, her biri tek bir kısa eş bilgisi içeren dizgelerin bir listesidir.

Compact node info is 54 bytes (20 byte Node ID + 32 byte SHA256 Hash + 2 byte port) instead of 20 byte Node ID + 4 byte IP + 2 byte port. In a response, the "nodes" key is a single byte string with concatenated compact node info.

Güvenli düğüm kimliği gereksinimi: Çeşitli DHT saldırılarını daha zor hale getirmek için, düğüm kimliğinin ilk 4 baytı, hedef karmasının ilk 4 baytı ile eşleşmelidir ve düğüm kimliğinin sonraki iki baytı, hedef karmasının kapı numarası ile exclusive-ORed değerinin sonraki iki baytı ile eşleşmelidir.

Bir torrent dosyasında, izleyicisiz torrent sözlüğü "düğümler" anahtarı TBD'dir. Bir sunucu dizgesi ve bir kapı numarası tamsayısını içeren bir liste listesi yerine 32 baytlık ikili dizgelerin (SHA256 karmaları) bir listesi olabilir. Alternatifler: Birleştirilmiş karmalara sahip tek bir bayt dizgesi ya da yalnızca dizgelerin bir listesi.

Veri Şeması (UDP) İzleyicileri

İstemcilerde ve izleyicilerde henüz UDP izleyici desteği bulunmuyor. BEP 15 ile öngörülen farklılıklar aşağıda açıklanmıştır ve değişebilir. Veri şeması duyurularını destekleyen bir istemci veya izleyici geliştirmek istiyorsanız, I2P geliştiricileri ile görüşün.

See Proposal 160.

Ek Bilgiler