Genel Bakış ========
Bu öneri, i2pcontrol API’sine yeni bilgiler sunarak daha fazla esneklik sağlar. Bu bilgiler, adres defterlerine ekleme, silme, geri alma ve değiştirme işlemlerinin yanı sıra gizli hizmetleri de içerir. Bu öneri aynı zamanda yönlendiriciniz hakkında eşler, haberler, netdb ve daha fazlası gibi daha fazla bilgiyi de ortaya çıkarır.
Motivasyon ==========
Bu teklifin nedeni, uygulamaların bir I2P yönetim arayüzü uygulamasına ve yönetimine olanak tanıyan daha büyük esneklik için I2P API’sine izin vermektir. i2pcontrol’e bu tür bilgileri sunmak, kullanıcıların daha gelişmiş uygulamalar oluşturmasına ve uzaktan yönetim için daha iyi destek sağlamasına olanak tanır.
Tasarım ======
Kullanıcılar i2pcontrol API’siyle etkileşime girdiğinde, yukarıda bahsedilen bilgileri sağlayan yeni uç noktalara erişebilecekler. Örneğin, i2pcontrol API’si, kullanıcıların tünel ve adres defterleri oluşturmak, silmek, almak ve değiştirmek için parametreler girebilecekleri yeni TunnelManager ve AddressBook metodlarını ortaya çıkaracak. Ayrıca, önceden var olan RouterInfo metodu, yönlendirici hakkında bilgi vermek için yeni parametrelere sahip olacaktır.
Güvenlik etkileri =====================
Bu öneriden kaynaklı beklenen ek güvenlik etkileri yoktur çünkü ortaya çıkarılan bilgi zaten diğer yollarla erişilebilirdir. Ancak hassas bilgilere erişimin veya yönlendirici üzerinde kontrolün yetkisiz erişime karşı korunabilmesi için i2pcontrol API’sine erişimde uygun kimlik doğrulama ve yetkilendirme mekanizmalarının yerinde olduğundan emin olmak önemlidir.
API Spesifikasyonu ve Yöntemleri ===========================
Tüm istekler JSON-RPC 2.0 yapısını takip eder:
{
"jsonrpc": "2.0",
"method": "MethodName",
"params": {
// method-specific parameters
},
"id": 1
}
Yöntem - YönlendiriciBilgisi ——————-
Aşağıda, RouterInfo yöntemi için yeni parametreler ve bunların döndürdükleri yer alır:
i2p.router.news- tüm yönlendirici haber girişlerini döndürür.i2p.router.id- yönlendirici karmasını Base64 dizesi olarak veyanulldeğerini döndürür.i2p.router.clockskew- ortalama eş saat sapmasını veyanulldeğerini döndürür.i2p.router.info- seri hale getirilmiş RouterInfo’yu Base64 dizesi olarak veyanulldeğerini döndürür.i2p.router.logs- son yönlendirici günlük mesajlarını döndürür.i2p.router.logs.clear- yönlendirici günlük arabelleğini temizler ve"success"(başarı) döndürür.i2p.router.net.total.received.bytes- başlangıçtan bu yana alınan toplam baytları döndürür. (i2pd’den alınmıştır)i2p.router.net.total.sent.bytes- başlangıçtan bu yana gönderilen toplam baytları döndürür. (i2pd’den alınmıştır)i2p.router.net.total.transit.bytes- başlangıçtan bu yana iletilen toplam transit baytlarını döndürür. (i2pd’den alınmıştır)i2p.router.net.bw.transit.15s- 15 saniyelik ortalama transit bant genişliğini döndürür (bayt/saniye). (i2pd’den alınmıştır)i2p.router.net.tunnels.shareratio- tünel paylaşım oranını döndürür.i2p.router.net.tunnels.participating.info- katılımcı tünel bilgisini döndürür.i2p.router.net.tunnels.i2ptunnel- yapılandırılmış I2PTunnel denetleyici bilgisini döndürür (tümünün hızlı istatistikleri).i2p.router.net.tunnels.exploratory.inbound- keşif amaçlı gelen tünel sayısını döndürür.i2p.router.net.tunnels.exploratory.outbound- keşif amaçlı giden tünel sayısını döndürür.i2p.router.net.tunnels.exploratory.info.list- keşif amaçlı tünel bilgi listesini döndürür.i2p.router.net.tunnels.client.inbound- istemci gelen tünel sayısını döndürür.i2p.router.net.tunnels.client.outbound- istemci giden tünel sayısını döndürür.i2p.router.net.tunnels.client.info.list- istemci tünel bilgi listesini döndürür.i2p.router.net.status.v6- IPv6 ağ durumu kodunu döndürür. (i2pd’den alınmıştır)i2p.router.net.error- IPv4 ağ hatası kodunu döndürür. (i2pd’den alınmıştır)i2p.router.net.error.v6- IPv6 ağ hatası kodunu döndürür. (i2pd’den alınmıştır)i2p.router.net.testing- IPv4 ağının test durumunda olup olmadığını döndürür (0 veya 1). (i2pd’den alınmıştır)i2p.router.net.testing.v6- IPv6 ağının test durumunda olup olmadığını döndürür (0 veya 1). (i2pd’den alınmıştır)i2p.router.net.tunnels.successrate- Son tünel oluşturma başarı oranını (%) döndürür. (i2pd’den alınmıştır)i2p.router.net.tunnels.totalsuccessrate- Başlangıçtan beri toplam tünel oluşturma başarı oranını (%) döndürür. (i2pd’den alınmıştır)i2p.router.net.tunnels.queue- Tünel oluşturma istek kuyruğu boyutunu döndürür. (i2pd’den alınmıştır)i2p.router.net.tunnels.tbmqueue- Tünel Oluşturma Mesajı kuyruğu boyutunu döndürür. (i2pd’den alınmıştır)i2p.router.netdb.peers- bilinen eş hash’lerinin bir listesini döndürür.i2p.router.netdb.activepeers.info- etkin eşler için seri hale getirilmiş RouterInfo verilerini döndürür.i2p.router.netdb.ntcp.limit- NTCP bağlantı sınırını döndürür.i2p.router.netdb.ssu.limit- SSU bağlantı sınırını döndürür.i2p.router.netdb.bannedpeers- yasaklanmış eşleri ve yasaklama ayrıntılarını döndürür.i2p.router.netdb.activepeers.list- etkin eş hash’lerini döndürür.i2p.router.netdb.peers.list- bilinen eş hash’lerini döndürür.i2p.router.netdb.peers.info- bilinen eşler için seri hale getirilmiş RouterInfo verilerini döndürür.i2p.router.netdb.activepeers.stats- etkin eş istatistiklerini döndürür.i2p.router.addressbook.private.list- özel adres defteri girişlerini döndürür.i2p.router.addressbook.local.list- yerel adres defteri girişlerini döndürür.i2p.router.addressbook.router.list- yönlendirici adres defteri girişlerini döndürür.i2p.router.addressbook.published.list- yayınlanan adres defteri girişlerini döndürür.i2p.router.addressbook.subscriptions- abonelik dosya yolunu ve girişlerini döndürür.i2p.router.addressbook.config- adres defteri yapılandırma yolunu ve girişlerini döndürür.
Örnek:
{
"jsonrpc": "2.0",
"method": "RouterInfo",
"params": {
"i2p.router.id": "",
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": "{ data }",
"id": 1
}
Yöntem - Adres Defteri ——————–
AddressBook yöntemi için, adres defterine giriş eklemek ve silmek amacıyla üç parametre/bağımsız değişken gereklidir:
Type- adres defteri türüne karşılık gelir:privatelocalrouterpublished
Hostname- adres defteri girdisiyle ilişkili ana bilgisayar adı veya etki alan adına karşılık gelir.Destination- adres defteri girdisiyle ilişkili hedefe karşılık gelir.Delete- bu parametre isteğe bağlıdır ve bir adres defteri girişini silmek için kullanılır. Bu parametre sağlanmazsa, yöntem adres defterine yeni bir giriş ekler.
Örnek:
{
"jsonrpc": "2.0",
"method": "AddressBook",
"params": {
"Type": "private",
"Hostname": "example.i2p",
"Destination": "exampleDestinationString",
"Delete": "" <--- this parameter is optional
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"success": true or false,
"message": "Deleted/Added (hostname) in (address book type) address book" OR "Failed to delete/add (hostname) to (address book type) address book",
"id": 1
}
Adres Defteri Aboneliklerini düzenlemek için:
SetSubscriptions- bu parametre, bir adres defteri girdisi için abonelikleri ayarlamak üzere kullanılır. Argüman olarak bir dize listesi alır.
Örnek:
{
"jsonrpc": "2.0",
"method": "AddressBook",
"params": {
"SetSubscriptions": ["notbob.i2p", "helloworld.i2p", ...]
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"success": true,
"message": "Successfully modified: /path/to/subscriptions.txt"
}
Adres Defteri Yapılandırması’nı düzenlemek için:
SetConfig- bu parametre, bir adres defteri girdisi için yapılandırmayı ayarlamak amacıyla kullanılır.
Yapılandırma ayarlarını içeren bir JSON nesnesini bağımsız değişken olarak alır.
Mevcut/sık kullanılan yapılandırma parametreleri:
subscriptions- abonelik URL’lerinin listesini içeren dosya.update_delay- saat cinsinden güncelleme aralığı.published_addressbook- yayımlanmış adres defterine giden yol.router_addressbook- yönlendirici adres defterine giden yol.local_addressbook- yerel adres defterine giden yol.private_addressbook- özel adres defterine giden yol.proxy_port- eepProxy portu.proxy_host- eepProxy ana bilgisayar adı.should_publish- yayımlanmış adres defterinin güncellenip güncellenmeyeceğini belirtir.etags- abonelik URL’lerinin etag’lerini içeren dosya.last_modified- abonelik URL’lerinin son değiştirilme zaman damgalarını içeren dosya.log- log dosyası yolu.theme- tema.
Örnek:
{
"jsonrpc": "2.0",
"method": "AddressBook",
"params": {
"SetConfig": {
"subscriptions": "subscriptions.txt",
"update_delay": "12",
"published_addressbook": "../eepsite/docroot/hosts.txt",
"router_addressbook": "hosts.txt",
"local_addressbook": "../userhosts.txt",
"private_addressbook": "../privatehosts.txt",
"proxy_port": "4444",
"proxy_host": "127.0.0.1",
"should_publish": "true",
"etags": "etags.txt",
"last_modified": "last_modified.txt",
"log": "log.txt",
"theme": "light"
}
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"success": true,
"message": "Successfully modified: /path/to/config.txt"
},
"id": 1
}
Yöntem - TünelYöneticisi ——–
TunnelManager yöntemi, I2PTunnel denetleyicilerini oluşturmak, düzenlemek, almak, başlatmak, durdurmak, yeniden başlatmak ve silmek için kullanılır.
Gerekli parametreler:
Name- tünelin adı. Bu, tünelin tanımlayıcısıdır.Action- gerçekleştirilecek işlem:createeditgetstartstoprestartdelete
İsteğe bağlı parametreler:
All- boolean, eylemin tüm tünellerde uygulanıp uygulanmayacağını belirtir. Bu yalnızcastart,stopverestarteylemleri için geçerlidir.
create için desteklenen tünel türleri:
client(istemci)httpclient(HTTP istemcisi)ircclient(IRC istemcisi)socks(SOCKS)socksirc(SOCKS IRC)connectclient(bağlantı istemcisi)streamrclient(akış istemcisi)serverhttpserverhttpbidirserverircserverstreamrserver
Tünel oluşturmak/düzenlemek için ortak parametreler:
Type- tünel türü.createiçin gereklidir.NewName- düzenleme sırasında isteğe bağlı yeni ad.Port- yerel dinleme portu.TargetHostveyaHost- sunucu tünelleri için hedef makine.TargetPort- sunucu tünelleri için hedef port.TargetDestinationveyaDestination- bir hedef gerektiren istemci tünelleri için hedef.StartOnLoad- mantıksal değer, tünel yüklendiğinde başlamalı mı.Description- tünel açıklaması.ReachableBy- tünelin dinlediği arayüz/adres.Shared- mantıksal değer, istemci tüneli paylaşılmalı mı.UseSSL- mantıksal değer, desteklendiği yerlerde SSL etkinleştirilsin mi.TunnelLength- tünel uzunluğu,0ile3arasında.TunnelVariance- tünel varyansı,-2ile2arasında.TunnelQuantity- tünel miktarı,1ile6arasında.TunnelBackupQuantity- yedek tünel miktarı,0ile3arasında.SigType- imzalama anahtarı türü.EncType- şifreleme türü.CustomOptions- özel tünel seçenekleri.
İstemci vekil sunucu seçenekleri:
ProxyListUseOutproxyPluginProxyAuthProxyUsernameProxyPasswordOutproxyAuthOutproxyUsernameOutproxyPasswordOutproxyTypeSSLProxiesJumpList
İstemci yönetim seçenekleri:
ConnectDelayProfileDelayOpenReduceReduceCountReduceTimeCloseCloseTimeNewDestPersistentClientKeyPrivKeyFile
HTTP istemci filtreleme seçenekleri:
AllowUserAgentAllowRefererAllowAcceptAllowInternalSSL
Sunucu seçenekleri:
WebsiteHostnameveyaSpoofedHostBlockAccessInProxiesBlockUserAgentsUserAgentsUniqueLocalAddressPerClientBlockReferersMultiHomingAccessOptionAccessListFilterFilePathMaxConcurrentConnsClientPerMinuteClientPerHourClientPerDayTotalInPerMinuteTotalInPerHourTotalInPerDayPostLimitPostLimitTimePerClientPeriodTotalPeriodTotalBanTime
LeaseSet seçenekleri:
EncryptLeaseSet- aşağıdakilerden biri:disableencrypted (aes)blindedblinded with lookup passwordencrypted (psk)encrypted with lookup password (psk)encrypted with per-user key (psk)encrypted with lookup password and per-user key (psk)encrypted with per-user key (dh)encrypted with lookup password and per-user key (dh)
OptionalLookupLeaseSetClientAuths
Örnek oluştur:
{
"jsonrpc": "2.0",
"method": "TunnelManager",
"params": {
"Name": "example-client",
"Action": "create",
"Type": "client",
"Port": 7656,
"TargetDestination": "exampleDestinationString",
"StartOnLoad": false,
....
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"status": "success - created tunnel example-client" OR "error - { error message }",
"results": [ {/* information about where persistent keys are stored */} ]
},
"id": 1
}
Düzenleme örneği:
{
"jsonrpc": "2.0",
"method": "TunnelManager",
"params": {
"Name": "example-client",
"Action": "edit",
"NewName": "renamed-client",
"Port": 7657,
"TargetDestination": "newDestinationString",
"StartOnLoad": true
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"status": "success - edited tunnel example-client" OR "error - { error message }"
},
"id": 1
}
Örnek al:
{
"jsonrpc": "2.0",
"method": "TunnelManager",
"params": {
"Name": "example-client",
"Action": "get"
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"status": "success - options for example-client" OR "error - { error message }",
"info": {
"client": true,
"status": "running",
"persistentClientKey": false,
"offlineKeys": false,
"targetDestination": "exampleDestinationString",
"localDestination": "exampleBase64Destination",
"destination": "exampleBase64Destination",
"destinationB32": "example.b32.i2p",
"rawConfig": {
"name": "example-client",
"type": "client"
}
}
},
"id": 1
}
Başlat, Durdur, Yeniden Başlat, Örneği Sil. Aynı yapıya sahiptirler, sadece farklı Action parametreleri kullanılır:
{
"jsonrpc": "2.0",
"method": "TunnelManager",
"params": {
"Name": "example-client",
"Action": "start"
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"status": "success - starting tunnel example-client" OR "error - { error message }"
},
"id": 1
}
Yöntem - ClientServicesInfo (i2pd’den alınmıştır) ————————————————-
ClientServicesInfo yöntemi, yönlendirici üzerinde çalışan istemci hizmetleriyle ilgili durum bilgilerini döndürür. Her hizmetin durumunu istemek için, istenen hizmet anahtarlarını (herhangi bir değerle birlikte) params içine ekleyin.
Desteklenen parametreler:
I2PTunnel- yapılandırılmış tünel adlarını adreslerine eşleyen bir harita döndürür ve bu haritaclientveserveralt nesnelerine ayrılır.HTTPProxy- HTTP vekilinin etkin durumunu ve adresini döndürür.SOCKS- SOCKS vekilinin etkin durumunu ve adresini döndürür.SAM- SAM köprüsünün etkin durumunu ve etkin oturum bilgilerini döndürür.BOB- BOB köprüsünün etkin durumunu döndürür. (Java I2P’de kullanım dışıdır; her zamanfalsedöndürür.)I2CP- I2CP sunucusunun etkin durumunu döndürür.
Örnek:
{
"jsonrpc": "2.0",
"method": "ClientServicesInfo",
"params": {
"I2PTunnel": "",
"SAM": ""
},
"id": 1
}
Dönüş:
{
"jsonrpc": "2.0",
"result": {
"I2PTunnel": {
"client": {"my-client": {"address": "example.b32.i2p"}},
"server": {"my-server": {"address": "example.b32.i2p", "port": 8080}}
},
"SAM": {
"enabled": true,
"sessions": {}
}
},
"id": 1
}
Uyumluluk =============
Yeni yöntemlerin ve parametrelerin mevcut işlevselliği etkilemeyecek şekilde eklenmesi nedeniyle, mevcut i2pcontrol API’si ile uyumluluk korunmalıdır. i2pcontrol API’sini kullanan mevcut uygulamalar değişiklik yapılmadan çalışmaya devam etmelidir, bu önerinin sağladığı ek bilgilerden ve yeteneklerden ise yeni uygulamalar yararlanabilir.
Uygulama ==============
Java I2P ——–
Bu öneri henüz Java I2P’de uygulanmadı, ancak kod i2p.plugins.i2pcontrol deposunda çekme isteği #6 altında mevcuttur. Mevcut kodu etkilemeden yeni yöntemlerin test edilmesi ve geliştirilmesi için bu şekilde yapılmıştır. Kod üretim kullanımı için hazır olduğunda ana I2P deposuna i2pcontrol dizini altında entegre edilecektir.
i2pd —-
“(i2pd’den alınan)” olarak işaretlenen yöntemler ve parametreler i2pd’de uygulanmış ve bu teklifte değiştirilmemiştir. i2pd’nin uzantıları bu teklif kapsamında değiştirilmesi gerekmez. Bu teklifte işaretsiz kısım, i2pd’de uygulanmamıştır.
go-i2p ——
go-i2p, yönlendirici konsolu uygulamasını etkinleştirmek ve geliştirmek amacıyla bu öneriyi benimsemeye ve ileride uygulamaya isteklidir.
emissary ——–
Emissary’de benimsenme olasılığı şu anda bilinmiyor, ancak Emissary’nin bu tekliften go-i2p ile aynı şekillerde yararlanması muhtemeldir.
Performans ===========
Performans etkisi beklenmiyor.