Таки буду краток, как говаривал один небезызвестный дядя.
В общем, есть в I2P такая чудная приблуда как BOB — Basic Open Bridge. Протокол сей позволяет создавать/уничтожать I2P тоннели с заданными параметрами. Фактически, вы создаёте точку подключения для своего приложения — например 127.0.0.1:12345 — и работаете с ней как с обычным сетевым адресом, посредством тех же сокетов. Проблема в том, что для инициализации тоннеля надо отправить несколько команд на адрес 127.0.0.1:2827. Протокол текстовый, достаточно простой и в целом удобный… Но для прикладных программ надо ещё проще :)
В результате на C# был написан класс-посредник, позволяющий создавать тоннели i2p в своей программе, не задумываясь над реализацией обмена, работающий вот так:
CBob bob = new CBob();
CBob.DataForCreateTonnel data = new CBob.DataForCreateTonnel();
// Можно задавать, можно не задавать - тогда автоматически сгенерируется
// data.nickTonnel = "abrahas";
data.inHost = "localhost";
data.inPort = 12345;
data.inboundLength = 3;
data.inboundLengthVariance = 2;
data.inboundAllowZeroHop = "false";
data.outHost = "localhost";
data.outPort = 44010;
data.outboundLength = 3;
data.outboundLengthVariance = 2;
data.outboundAllowZeroHop = "false";
bob.SendTonnelOptions(data);
bob.StartTonnel();
Т.е. он позволяет создавать тоннель десятком строчек и не заботиться о внутренней реализации на сокетах. Кстати по поводу внутренней реализации — там использована асинхронная отправка-получение команд-ответов. И очень сильно сырой код — аффтар не пишет постоянно на C#. Код правда документирован, по мере возможностей. Любые улучшения, замечания, и прочее — приветствуется.
Сумасшедший мужчина, неопределённого возраста, наслаждающийся манией преследования. Паталогически недоверчив, эгоистичен, авторитарен. Вторичные диагнозы - программист и поц.
Владеет английским языком на уровне около хренового разговорного. Также знаком с некоторыми другими языками.
Интересуется всем и вся, за счёт чего в любой области знания являются поверхностными, неглубокими.
Характер невыдержанный. Крепость - 55 градусов.
Посмотреть все записи автора Алекс Разгибалов
Класс для общения с BOB в I2P на C#: 7 комментариев
Вопрос немного не по теме, но по направлению (тоже про анонимность и C#).
Подскажите есть что-то подобное на C# для Tor?
Хочется использовать Tor в своей программе и что бы не требовалось установки дополнительных компонент.
Ну, в любом случае вам придётся включать в пакет поставки сам tor — в стандартном виде, или собственную сборку, не так важно. Тут есть два пути — либо юзер ставит две программы — вашу и пакет vidalia bundle раздельно, либо они ставятся одним вашим инсталлятором. Разница не принципиальна — т.е. фактически основное требование — иметь точку для коннекта на компьютере. А затем — в C# сетевые компоненты спокойно смогут работать через прокси, который предоставляет tor. Т.е. скажем, можно задать глобальный прокси 127.0.0.1:8118 для http запросов путём применения класса WebProxy & GlobalProxySelection — по сути, если я понимаю всё верно, работа с тор намного проще — не надо задавать параметры тоннелей и прочего — он сам об этом заботится.
Правильно я понимаю, что использовать BOB можно только для исходящих соединений? Как организовать анонимный сервер на c#? SAM дает какие либо преимущества?
Так BOB по сути это расширенный SAM. Вот смотрите — и BOB и SAM — это интерфейсы создания тоннелей. А с их помощью можно сделать тоннель и серверный и клиентский. По большому счёту это просто системы команд. Когда вы тоннель сделали, можно отправлять в него данные и принимать из него же, просто софт который будет вести обмен, станет пересылать в тоннель созданный (допустим 127.0.0.1:48000) данные вида:
BASE64_ADDRESSAAAA\n
В можно указать обратный адрес вашего тоннеля и идентификатор какой-нибудь, к примеру типа такого пакета:
Сори за нубовый вопрос. А в примере каким образом отослать данные? На этой расстановке параметров работа с i2p закончена, получается? И теперь мы просто через сокеты отправляем на localhost 12345 (inbound) адрес base64/base32 или site.i2p из адресной книги, а затем свои данные. И ответы приходят нам от туда же?
А на сервере, получается, слушаем outbound на localhost 44010?? И туда же отправляем ответы?
В общем и целом да. Честно говоря, я очень давно писал этот классик и не очень хорошо помню, что там где)) Вообще, можно и напрямую с BOB работать, это просто обвязка. И вы можете указывать любой доступный B64 адрес, т.е. не обязательно из адресной книги — просто точку назначения.
Плюс смотря для каких целей. Если это надо именно на C#, то да, лучше samv3 / BOB. А если писать на java, то там есть уже готовая (и обновляемая авторами) Streamr Lib :)
Вопрос немного не по теме, но по направлению (тоже про анонимность и C#).
Подскажите есть что-то подобное на C# для Tor?
Хочется использовать Tor в своей программе и что бы не требовалось установки дополнительных компонент.
Буду благодарен за любую информацию по теме.
Ну, в любом случае вам придётся включать в пакет поставки сам tor — в стандартном виде, или собственную сборку, не так важно. Тут есть два пути — либо юзер ставит две программы — вашу и пакет vidalia bundle раздельно, либо они ставятся одним вашим инсталлятором. Разница не принципиальна — т.е. фактически основное требование — иметь точку для коннекта на компьютере. А затем — в C# сетевые компоненты спокойно смогут работать через прокси, который предоставляет tor. Т.е. скажем, можно задать глобальный прокси 127.0.0.1:8118 для http запросов путём применения класса WebProxy & GlobalProxySelection — по сути, если я понимаю всё верно, работа с тор намного проще — не надо задавать параметры тоннелей и прочего — он сам об этом заботится.
Вообще, на stack overflow это описано немного… Вот:http://stackoverflow.com/questions/1962483/c-using-tor-as-proxy или вот: http://stackoverflow.com/questions/2745268/how-to-use-tor-control-protocol-in-c — там информация кое какая по этому вопросу есть.
Спасибо за подробный ответ.
>юзер ставит две программы – вашу и пакет vidalia bundle
Вот как раз не хочу использовать vidalia.
>включать в пакет поставки сам tor – в стандартном виде, >или собственную сборку
существуют «собственные сборки» на .Net
Правильно я понимаю, что использовать BOB можно только для исходящих соединений? Как организовать анонимный сервер на c#? SAM дает какие либо преимущества?
Так BOB по сути это расширенный SAM. Вот смотрите — и BOB и SAM — это интерфейсы создания тоннелей. А с их помощью можно сделать тоннель и серверный и клиентский. По большому счёту это просто системы команд. Когда вы тоннель сделали, можно отправлять в него данные и принимать из него же, просто софт который будет вести обмен, станет пересылать в тоннель созданный (допустим 127.0.0.1:48000) данные вида:
BASE64_ADDRESSAAAA\n
В можно указать обратный адрес вашего тоннеля и идентификатор какой-нибудь, к примеру типа такого пакета:
DESTINATION_BASE64AAAA\n
«PACKET»:{«address»:»BASE64_BACK_ADDRESSAAAA»},{«DATA»:»BASE64Encoded»}
— что-то вроде формата JSON.
Сори за нубовый вопрос. А в примере каким образом отослать данные? На этой расстановке параметров работа с i2p закончена, получается? И теперь мы просто через сокеты отправляем на localhost 12345 (inbound) адрес base64/base32 или site.i2p из адресной книги, а затем свои данные. И ответы приходят нам от туда же?
А на сервере, получается, слушаем outbound на localhost 44010?? И туда же отправляем ответы?
В общем и целом да. Честно говоря, я очень давно писал этот классик и не очень хорошо помню, что там где)) Вообще, можно и напрямую с BOB работать, это просто обвязка. И вы можете указывать любой доступный B64 адрес, т.е. не обязательно из адресной книги — просто точку назначения.
Плюс смотря для каких целей. Если это надо именно на C#, то да, лучше samv3 / BOB. А если писать на java, то там есть уже готовая (и обновляемая авторами) Streamr Lib :)