Tento překlad byl vytvořen pomocí strojového učení a nemusí být 100% přesný. Zobrazit anglickou verzi

BOB - Basic Open Bridge

Zastaralé API pro správu destinací

Varování - Zastaralé

Není určen pro použití v nových aplikacích. BOB, jak je zde specifikován, podporuje pouze typ podpisu DSA-SHA1. BOB nebude rozšířen o podporu nových typů podpisů nebo dalších pokročilých funkcí. Nové aplikace by měly používat SAM V3 .

Podpora BOB byla odstraněna z nových instalací Java I2P od verze 1.7.0 (2022-02). Stále bude fungovat v Java I2P původně nainstalovaném jako verze 1.6.1 nebo starší, i po aktualizacích, ale není podporována a může se kdykoli pokazit. BOB je stále podporována i2pd od května 2025, ale aplikace by se měly přesto migrovat na SAMv3 z výše uvedených důvodů. Viz dokumentace i2pd pro jakékoli rozšíření API zde zdokumentovaného, které jsou podporována i2pd.

V tomto bodě již většina dobrých nápadů z BOB byla začleněna do SAMv3, které má více funkcí a je více využíváno v praxi. BOB může stále fungovat na některých instalacích (viz výše), ale nezískává pokročilé funkce dostupné pro SAMv3 a v podstatě není podporován, kromě i2pd.

Jazykové knihovny pro BOB API

Přehled

KEYS = pár klíčů veřejný+soukromý, tyto jsou BASE64

KEY = veřejný klíč, také BASE64

ERROR jak název napovídá vrací zprávu "ERROR "+DESCRIPTION+"\n", kde DESCRIPTION je popis toho, co se pokazilo.

OK vrací "OK" a pokud mají být vrácena data, jsou na stejném řádku. OK znamená, že příkaz je dokončen.

Řádky DATA obsahují informace, které jste požadovali. Na jeden požadavek může připadnout více řádků DATA.

POZNÁMKA: Příkaz help je JEDINÝ příkaz, který má výjimku z pravidel… může skutečně nevrátit nic! Toto je záměrné, protože help je příkaz pro ČLOVĚKA a ne pro APLIKACI.

Připojení a verze

Veškerý stavový výstup BOB je po řádcích. Řádky mohou být ukončeny \n nebo \r\n, v závislosti na systému. Po připojení BOB vypíše dva řádky:

BOB version
OK

Aktuální verze je: 00.00.10

Upozorňujeme, že předchozí verze používaly hexadecimální číslice velkými písmeny a neodpovídaly standardům verzování I2P. Doporučuje se, aby následující verze používaly pouze číslice 0-9.

Historie verzí

VersionI2P Router VersionChanges
00.00.100.9.8current version
00.00.00 - 00.00.0F development versions
## Příkazy

UPOZORNĚNÍ: Pro AKTUÁLNÍ podrobnosti o příkazech POUŽIJTE vestavěný příkaz nápovědy. Jednoduše se připojte telnetem na localhost 2827 a zadejte help, abyste získali úplnou dokumentaci ke každému příkazu.

Příkazy nikdy nezastarávají ani se nemění, nicméně nové příkazy se čas od času přidávají.

COMMAND     OPERAND                             RETURNS
help        (optional command to get help on)   NOTHING or OK and description of the command
clear                                           ERROR or OK
getdest                                         ERROR or OK and KEY
getkeys                                         ERROR or OK and KEYS
getnick     tunnelname                          ERROR or OK
inhost      hostname or IP address              ERROR or OK
inport      port number                         ERROR or OK
list                                            ERROR or DATA lines and final OK
lookup      hostname                            ERROR or OK and KEY
newkeys                                         ERROR or OK and KEY
option      key1=value1 key2=value2...          ERROR or OK
outhost     hostname or IP address              ERROR or OK
outport     port number                         ERROR or OK
quiet                                           ERROR or OK
quit                                            OK and terminates the command connection
setkeys     KEYS                                ERROR or OK and KEY
setnick     tunnel nickname                     ERROR or OK
show                                            ERROR or OK and information
showprops                                       ERROR or OK and information
start                                           ERROR or OK
status      tunnel nickname                     ERROR or OK and information
stop                                            ERROR or OK
verify      KEY                                 ERROR or OK
visit                                           OK, and dumps BOB's threads to the wrapper.log
zap                                             nothing, quits BOB

Jakmile je vše nastaveno, všechny TCP sockety mohou a budou se blokovat podle potřeby, a není třeba žádných dalších zpráv do/z příkazového kanálu. To umožňuje routeru řídit rychlost toku dat bez výbuchů OOM chyb jako SAM, který se zadusí při pokusu protlačit mnoho streamů dovnitř nebo ven jedním socketem – to se nemůže škálovat, když máte hodně připojení!

Co je také pěkné na tomto konkrétním rozhraní je, že psaní čehokoli pro rozhraní s ním je mnohem mnohem jednodušší než SAM. Po nastavení není třeba žádné další zpracování. Jeho konfigurace je tak jednoduchá, že lze použít velmi jednoduché nástroje, jako je nc (netcat), aby ukázaly na nějakou aplikaci. Hodnota spočívá v tom, že lze naplánovat časy spuštění a vypnutí pro aplikaci, aniž by bylo třeba aplikaci změnit nebo ji dokonce zastavit. Místo toho můžete doslova “odpojit” cíl a znovu ho “zapojit”. Dokud se při spouštění mostu používají stejné IP/port adresy a klíče cíle, normální TCP aplikace si to nebude všímat a nezpozoruje to. Bude jednoduše oklamána – cíle nejsou dostupné a nic nepřichází dovnitř.

Příklady

Pro následující příklad nastavíme velmi jednoduché místní loopback připojení se dvěma destinacemi. Destinace “mouth” bude služba CHARGEN z INET superserver daemonu. Destinace “ear” bude místní port, do kterého se můžete připojit pomocí telnetu a sledovat, jak se vysypává pěkný ASCII test.

Příklad dialogu relace

Jednoduchý telnet 127.0.0.1 2827 funguje.

  • A = Aplikace
  • C = Odpověď příkazu BOB.
FROM    TO      DIALOGUE
C       A       BOB 00.00.10
C       A       OK
A       C       setnick mouth
C       A       OK Nickname set to mouth
A       C       newkeys
C       A       OK ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA

POZNAMENEJTE SI VÝŠE UVEDENÝ DESTINATION KEY, VÁŠ BUDE JINÝ!

FROM    TO      DIALOGUE
A       C       outhost 127.0.0.1
C       A       OK outhost set
A       C       outport 19
C       A       OK outbound port set
A       C       start
C       A       OK tunnel starting

V tomto okamžiku nedošlo k žádné chybě, destination s přezdívkou “mouth” je nastavena. Když kontaktujete poskytnutou destination, ve skutečnosti se připojíte ke službě CHARGEN na 19/TCP.

Nyní pro druhou polovinu, abychom mohli skutečně kontaktovat tuto destinaci.

FROM    TO      DIALOGUE
C       A       BOB 00.00.10
C       A       OK
A       C       setnick ear
C       A       OK Nickname set to ear
A       C       newkeys
C       A       OK 8SlWuZ6QNKHPZ8KLUlExLwtglhizZ7TG19T7VwN25AbLPsoxW0fgLY8drcH0r8Klg~3eXtL-7S-qU-wdP-6VF~ulWCWtDMn5UaPDCZytdGPni9pK9l1Oudqd2lGhLA4DeQ0QRKU9Z1ESqejAIFZ9rjKdij8UQ4amuLEyoI0GYs2J~flAvF4wrbF-LfVpMdg~tjtns6fA~EAAM1C4AFGId9RTGot6wwmbVmKKFUbbSmqdHgE6x8-xtqjeU80osyzeN7Jr7S7XO1bivxEDnhIjvMvR9sVNC81f1CsVGzW8AVNX5msEudLEggpbcjynoi-968tDLdvb-CtablzwkWBOhSwhHIXbbDEm0Zlw17qKZw4rzpsJzQg5zbGmGoPgrSD80FyMdTCG0-f~dzoRCapAGDDTTnvjXuLrZ-vN-orT~HIVYoHV7An6t6whgiSXNqeEFq9j52G95MhYIfXQ79pO9mcJtV3sfea6aGkMzqmCP3aikwf4G3y0RVbcPcNMQetDAAAA
A       C       inhost 127.0.0.1
C       A       OK inhost set
A       C       inport 37337
C       A       OK inbound port set
A       C       start
C       A       OK tunnel starting
A       C       quit
C       A       OK Bye!

Teď už jen stačí připojit se pomocí telnet na 127.0.0.1, port 37337, a poslat cílový klíč nebo adresu hostitele z adresáře, se kterým se chceme spojit. V tomto případě se chceme spojit s “mouth”, takže jen vložíme klíč a odešleme ho.

POZNÁMKA: Příkaz “quit” v příkazovém kanálu NEODPOJUJE tunely jako u SAM.

$ telnet 127.0.0.1 37337
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh
"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk
...

Po několika virtuálních mílích tohoto výpisu stiskněte Control-]

...
cdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK
defghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL
efghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=
telnet> c
Connection closed.

Toto se stalo…

telnet -> ear -> i2p -> mouth -> chargen -.
telnet <- ear <- i2p <- mouth <-----------'

Můžete se také připojit k I2P stránkám!

$ telnet 127.0.0.1 37337
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
i2host.i2p
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Fri, 05 Dec 2008 14:20:28 GMT
Connection: close
Content-Type: text/html
Content-Length: 3946
Last-Modified: Fri, 05 Dec 2008 10:33:36 GMT
Accept-Ranges: bytes

<html>
<head>
  <title>I2HOST</title>
  <link rel="shortcut icon" href="favicon.ico">
</head>
...
<a href="http://sponge.i2p/">--Sponge.</a></pre>
<img src="/counter.gif" alt="!@^7A76Z!#(*&%"> visitors. </body>
</html>
Connection closed by foreign host.
$

Docela cool, ne? Zkuste si některé další známé I2P SITES, pokud chcete, neexistující adresy atd., abyste získali představu o tom, jaký výstup očekávat v různých situacích. Většinou se doporučuje ignorovat jakékoli chybové zprávy. Byly by pro aplikaci bezvýznamné a jsou prezentovány pouze pro lidské ladění.

Úklid

Nyní, když jsme s nimi hotovi, ukončeme naše destinace.

Nejprve se podívejme, jaké přezdívky destinací máme.

FROM    TO      DIALOGUE
A       C       list
C       A       DATA NICKNAME: mouth STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: not_set INHOST: localhost OUTPORT: 19 OUTHOST: 127.0.0.1
C       A       DATA NICKNAME: ear STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: 37337 INHOST: 127.0.0.1 OUTPORT: not_set OUTHOST: localhost
C       A       OK Listing done

Dobře, tady jsou. Nejprve odstraníme “mouth”.

FROM    TO      DIALOGUE
A       C       getnick mouth
C       A       OK Nickname set to mouth
A       C       stop
C       A       OK tunnel stopping
A       C       clear
C       A       OK cleared

Nyní odstraňte “ear”, všimněte si, že se to stává, když píšete příliš rychle, a ukazuje vám, jak vypadají typické chybové zprávy ERROR.

FROM    TO      DIALOGUE
A       C       getnick ear
C       A       OK Nickname set to ear
A       C       stop
C       A       OK tunnel stopping
A       C       clear
C       A       ERROR tunnel is active
A       C       clear
C       A       OK cleared
A       C       quit
C       A       OK Bye!

Tichý režim

Nebudu se obtěžovat ukázat příklad přijímací strany mostu, protože je velmi jednoduchý. Existují dvě možná nastavení a přepíná se příkazem “quiet”.

Výchozí nastavení NENÍ tiché a první data, která přijdou do vašeho naslouchajícího socketu, jsou destination, která navazuje kontakt. Jedná se o jeden řádek obsahující BASE64 adresu následovanou novým řádkem. Vše po tom je určeno pro skutečné zpracování aplikací.

V tichém režimu si to představte jako běžné internetové připojení. Žádná extra data vůbec nepřicházejí. Je to stejné, jako kdybyste byli normálně připojeni k běžnému internetu. Tento režim umožňuje formu transparentnosti podobnou té, která je dostupná na stránkách nastavení tunnel v konzoli routeru, takže můžete použít BOB k nasměrování destinace na webový server například, a nemuseli byste webový server vůbec upravovat.

Výhody BOB

Výhoda používání BOB pro tento účel je, jak jsme již diskutovali dříve. Mohli byste naplánovat náhodné doby provozu aplikace, přesměrovat na jiný stroj atd. Jedním z možných použití může být například snaha zmást odhady dostupnosti router-to-destination. Mohli byste zastavit a spustit destination úplně jiným procesem, abyste vytvořili náhodné doby dostupnosti a nedostupnosti služeb. Tímto způsobem byste pouze zastavili možnost kontaktovat takovou službu, aniž byste ji museli vypínat a restartovat. Mohli byste přesměrovat a nasměrovat na jiný stroj ve vaší LAN během aktualizací, nebo nasměrovat na sadu záložních strojů v závislosti na tom, co běží, atd., atd. Pouze vaše představivost omezuje to, co byste s BOB mohli dělat.

Was this page helpful?