Ко мне периодически приходят письма такого содержания: "Как настроить компьютеры, чтобы из дому получать доступ к компьютеру на работе через три файрвола и NAT со всех сторон, но чтобы админ об этом не знал". Хм, какие проблемы — базары трем, проблемы решаем, а если нужно — то и создаем…

 

Мы были перед человеком-автоматом, игрушкой в триста тысяч ценой, умеющей говорить.

Александр Грин, Золотая цепь


Люди довольно часто оказываются в ситуации, когда срочно нужно получить доступ к данным на работе. При этом оба компьютера подключены к интернету через гейтвей и NAT — то есть имеют маскарадные IP-адреса и, естественно, не могут увидеть друг до друга по ftp, telnet или rsh. В данном случае мы не рассматриваем вариант с "третьей точкой", то есть с компьютером, который вы контролируете и который все время находится в сети. (Кстати, у меня таких целых два — но это просто некоторым так повезло.) К тому же вы не всегда можете спланировать работу таким образом, чтобы заранее положить на "третью точку" нужные вам файлы. Я уже не говорю о том, что часто бывает нужен "типа-шелл", а не собственно файлы.


Конечно, если у обоих компов нет никаких сетевых интерфейсов, то данные можно пробросить только DAT-лентами на оленях (вы, может, и не знаете — а на Аляске так когда-то досталялась электронная почта и FIDO, в натуре).


Немного о файрволлах и прочих рестикшинах. Как показывают мои наблюдения, на фирмах чаще всего запрещают доступ к тем трафикам, которые жрут байты. То есть к "мульке" (eMule) и ей подобным и даже — что есть полный позор! — к http. А вот к чему доступ, как правило, есть всегда, так это к почте, часто к ftp, а также — что есть гуд — к аське, то есть ICQ. Гуд, потому что аська — очень "плоский" интерфейс, который потребляет минимум трафика. А это важно в подключениях, где считаются байты: например, Volia Broadband (через TV-кабель), побайтовый xDSL (Cyfra, Optima), а также (важно!) — в подключениях по GPRS. Важно — потому что, если кабельные "траферы" кусают ваш бюджет за каждый мег, то GPRS этот самый бюджет вообще рвет, как Тузик грелку.


Вот именно доступ по GPRS был для меня задачей №1. Некоторые из нас, как известно, имеют привычку садиться в транспортное средство (на велик-мотик, в тачку, на дозу), а потом с утра протирать свои сморщенные революционные глазенки на предмет "ой, а где это я, чувачки? и дайте-ка мне доступ к файлам в офисе, плз". Активный образ жЫзни назыается.


Да, так вот, для такого образа жизни GPRS — самое что ни на есть оно. Конечно, я никогда не работаю через WAP-GPRS, у меня с косоглазием плохо, а вот в качестве модема использовать трубку очень удобно, чего и вам желаю. Короче, второе после так называемого low-ID (то есть временного и локального IP) — это возможность для нашего метода доступа работать через самый "строгий" к трафику вариант, например GPRS.


Третье — это "ленивый" вариант разработки. Как известно из классического труда "Десять благодетелей программиста", лень является одной из основных добродетелей кодера. Как следствие — все, что уже было написано и работает, никто не должен переписывать. И при этом нужно надеяться, что написано уже вообще все и искать до последнего — и только в крайнем случае писать собственный код.


В результате получаем такую постановку, плавно переходящую в будущую архитектуру нашего приложения: есть два компа, оба — за натом, то есть без внешних адресов. Также мы не можем (не хотим, лень, другое) тревожить системного администратора. Далее: подключение должно лояльно относиться к трафику, а поскольку из возможных готовых протоколов мне больше нравится ICQ, то так тому и быть.


Итого: я через аську подключаюсь к удаленному компу, тулю ему какие-то команды, а он мне за это делает приятно в извращенной форме. И последнее — если уж нам придется изучать чужой код, то я выбираю для этой цели что-то, что работает и под Линуксом (где, я, блин, и нахожусь), и под Виндой. В окончательном результате LICQ отпадает, как яйца от кандидата,— и остается последний, единственный и неповторимый Sim, на который перешли все знакомые мне задвиженцы, который я тоже юзаю и который написан на том самом Qt, который, в свою очередь, мне тоже совершенно не чужд.


Да, так вот, взял я этот самый Sim за исходник, почитал доку и — оба-на! В самом Sim’е есть такой плуг (называется Action), который — растопырили уши! — вызывает указанное вами приложение в ответ на любое происходящее действие. В том числе — на приход. В том числе — на приход сообщения. В том числе — от меня, всевидящего. Вот так вот ботик и получит сигнал бедствия. Вот так он и запустит ботика, который отошлет мне все мои файлы.


Это называется "молитва — оружие верующего".


Почему все остальное — sucks


Немного остановимся на том, почему протокол ICQ — это круто, а остальное — это хуже. Порой даже будем абстрагироваться от некоторых наших ограничений и говорить только о грустном и печальном.


Первый "конкурент" нашего бота — это различные программы удаленного управления. Ну, сразу скажем, что все они, начиная от vnc и заканчивая Citrix Metaframe, работают по определенным портам, которые были закрыты еще в первом действии. Во-вторых, все они кидаются графикой, то есть огромными и бесполезными мегабайтами. Уже указанные vnc и Citrix пробрасывают реальные куски экрана, пусть и оптимизируя этот процесс (invalidate по площадям, пересылки по запросу и локальные "догадки" у Citrix) и даже пожимая его на лету. Все равно: в плане трафика пересылка графики — бред полнейший.

 


Для подключения плагина не нужно быть программистом


Несколько отличаются похожие "братья загребали" — X-Windows и ему "иксоподобные". Эти пересылают только GDI-вызовы, что, конечно, уже компактнее — но все равно никому не надо. Ну, по крайней мере, мне совершенно не интересно, как именно расположены окошки — вдоль или поперек, и каким стилем отрисовывается KDE. А в случае с X-Windows сеансом мне это придется узнать.


Мне нужны:

  1. файлы (возможно, на сетевых ресурсах, куда у меня есть права монтироваться);
  2. почта — в режиме статистики или форварда (то есть, чтобы можно было сказать: "это письмо перешли мне сюда";
  3. способность отдать "мульке" команду "качай ID=59ac8f10b43901, скАтина!!!".

Ну, собственно, и все — а уж как оно там на экране, меня не шкребет.


Также не прокатывает и обычный туннель, который делается командой ip tunnel. У этой команды, во-первых, есть ограничение, согласно которому оба айпишника должны торчать в сети, то есть быть абсолютными и взаимно доступными. Этого мы обещать не можем.


Во-вторых, есть еще одна опасность. Вот представьте: поставили вы мост, подняли "типа-локалку" и стали присоединяться к удаленному компу. Что вы можете сделать? Либо опять откроете ту же жирную X-Windows-сессию, либо же примонтируетесь по nfs, а потом станете на удаленных fs’ках открывать файлы — и при этом OpenOffice будет в режиме AutoSave пробрасывать ваш файл каждый раз по соединению, накручивая мегасы. А уж если вы удаленно откроете файл в MS Word, тот вообще удаленно создаст файл отката с таким к нему трафиком, что замахаетесь деньги провайдеру носить.


Короче, мост это круто — но если вы построите его в среде с оплатой по трафику, то логоньтесь каким-то ssh на худой конец. Опять-таки, в нашем случае обычный мост не катит, хотя можно придумать какой-то IPoverFTP или даже IPoverEMule. Тема интересная и бесконечная.


Наконец, последний, самый близкий по духу и родственный по содержанию вариант — это известный с детства почтовый ботик. Всем он хорош — и тем, и этим, и доступен, и красив.

 

Одна разница небольшая — реактивность, то есть скорость реакции. Кое-где почта ходит очень легко, кое-где — пакетами, по расписанию. Собственно, это не беда — но если есть аська, то она ведь все равно быстрее ходит.

 

Что еще: почту часто читают администраторы и начальство (просто в договоре так и пишут "будем, мол, читать вашу почту"). И если админ найдет ваши странные "письма на Родину", то у него может зародиться подозрение, что вы — шпион вражеский или мало еще какая сволочь. А вы всего-то и хотели, что поработать на выходных.


Короче: мы за почтовые ботики — но это дело исследованное, так что и писать бы не стоило.


Знакомьтесь — Хавик, младший брат Ксаверия


— Ксаверий! Позволь рассказать твою историю!
— Мне все равно,— ответила кукла.

— Я — механизм.


После трех секунд напряженной мысли я тут же придумал имя своему ботику: Ксаверий — так звали известного механического человека из повести Александра Грина "Золотая цепь". Но об ём самом попозже — а пока поговорим о его младшем братике, Хавике.


Идея проста: Хавик получает сообщения по ICQ посредством плуга Sim Action, анализирует адрес отправителя, а также некоторые дополнительные делишки (если вы думаете, что я тут все выложу — то, как говорят индейцы, "фигвам!" — у меня еще не так хорошо отлажена система защиты, чтобы подставлять Хавика под атаку ваших злобных грабалок).


Кстати, мой Хавик даже дает мне ощущение удаленного шелла — правда, очень ограниченного, то есть супербоссом через него невозможно стать в принципе, поскольку нельзя удаленно ввести пароль. Как говорится, "забудьте слово root".

 


Qt Designer — единственно правильный инструмент программиста под Qt


На самом деле я написал с две дюжины скриптов — и мой ботик выполняет их по одному за раз, типа собственной оболочки. Этого мне достаточно для удаленного монтирования на наш сервер рабочей группы (по самбе или nfs) и для того, чтобы паковать там файлы и отсылать мне-себе на почту или выкладывать на ftp. По корявости своей это сильно напоминает удаленное управление в известном трояне Back Orifice — но, как говорится, "имеешь консоль — имеешь кого хочешь".


Не буду скрывать: первым номером был скрипт "прочитать почту или получить файл по ftp/http (если доступно) и подключить новый скрипт к команде такой-то". Ну, типа "set ftp checkmail" ищет исполнимый файл с именем checkmail (скорее, checkmail.py — поскольку я сейчас в большой дружбе с питонами) на нашем условленном сервере (пароли знают только двое) и устанавливает его в качестве новой команды.


В результате я дома за свои деньги не читаю тот спам, который приходит мне на работу — по команде checkmail digest письма аккуратно получает новый скрипт и высылает мне лишь резюме: "прислали 693 письма, из них 691 — галимый спам, два — от
boss@mudila.ru (3000 байт) и от natasha@love.com (40000 байт), а также от неизвестного васи traktorrr@udaff.com (4000 байт)". Так, или почти так.


Следующим моим действием может быть, например, checkmail fwd_whitelist noattch — эта команда перешлет мне почту от тех людей, которые в "белом списке" (обычный текстовый файл на удаленном компе, тоже может обновляться удаленно), причем без удаления с нашего почтового сервера и без всяких аттачментов. Ну, и так далее — и это только одна команда, и то еще скромный набор возможностей.


Что самое главное, так это то, что поверх этого фрэймворка каждый легко сможет построить свои миры, целые "города" скриптов, интегрироваться в любые доступные службы вроде ftp или http — это уж что вам удобнее, те же файлы можно выкладывать в архиве на ftp, или присылать вам по почте, или и то и другое одновременно. То есть получить все что угодно можно где угодно: в интернет-кафе, например,— по ftp, а в таежной глуши лучшим вариантом может оказаться почта. Если есть практика написания скриптов на том же Pyt/home/ac/dev/xalichon сходу, можно срочно написать содержательный код типа sendAllSexPornoNow.py — и поднять его как новую команду.


С другой стороны, кое-кто (типа админа, например) может и расковырять автоматический бинд новой команды или вскрыть пароль архива. Короче, в безопасности я пока не уверен. Так что, хоть в моем случае от админа Леши у меня секретов нет (да и какие могут быть секреты при физическом доступе к моему компу на работе?) — тем не менее, я предпочитаю стратегию "защита через неизвестность", поскольку есть и другие-разные, которые если и не взломают, то завалят моего Хавика спамом или станут брутально энфорсить. Как говорится, чего и вам советую — Сеть так плотно наполнена такими долбожелателями, что вам и не снилось.


Механика


— Что в этом болване? Как он устроен?
— Принцип стенографии, радий, логическая система, разработанная с помощью чувствительных цифр,— вот, кажется, и все, что сохранилось в моем уме.


Вернемся к механике вопроса. Документации у плуга Action — минимум. Или максимум, если в качестве документации рассматривать исходный код. В моем изложении перевод хелпа выглядит следующим образом:

  1. В командной строке можно использовать параметры: &IP, &Mail, &Phone, &Nick, &Unread, &Status, &TimeStatus, &IntervalStatus (по-русски: вместо указанных параметров Sim подставляет в командную строку, которую вы вводите, реальные, участвующие в операции значения).
  2. `command` вызывает команду и подставляет вместо себя вывод команды. Для пользователей Linux тут и так все понятно, а приверженцам MS Windows объяснять все равно бесполезно — ни нормальной консоли, ни командной строки, ни обратных кавычек у них сроду не было, нет и, судя по всему, никогда не будет.
  3. Для событий, связанных с сообщениями, текст сообщения поступает на "линейный вход". Если прога выходит по exit(0), текст будет заменен на стандартный выход программы (оба-на!). Если же эта прога ничего не пишет, месага исчезает (вообще, как и не было). Это сделано для создания фильтров сообщений.

Что в этом хорошо, так это то, что у нас есть один сравнительно небольшой модуль, который "хукает" весть памп Sim’а и позволяет эффективно тырить сообщения из входной очереди. Что и было немедленно реализовано.


Чтобы вы и сами могли "прочувствовать", как работает Хавик, представляю его первую (минус нулевую) версию, с которой-то все и началось. Хавик расположен у меня по адресу /home/ac/dev/xavic, поэтому строка в настройках Sim выглядит так:

 

Setup->Plugins->Action->Message->~/xavic/xavic.py

 

Поскольку сейчас я пишу на Python все то, что раньше писал на Perl, текст выглядит следующим образом:

 

#!/usr/bin/python
import sys
file=open('/tmp/xavic.log','a')
msg=sys.stdin.readlines()
file.write('- '*30+'\n')
for i in msg:file.write(i+'\n')
file.close()

 

В указанном файле /tmp/xavic.log появляется именно то, что вы там можете ожидать,— сообщения ваших контактов. Попробуйте и убедитесь сами. Естественно, в реальной жизни это не сообщения, а команды, которые не записываются (впрочем, записываются тоже), а выполняются с помощью довольно-таки прямолинейной, но гибкой системы вызовов внешних модулей Python.


Ксаверий, собственно (человек в стадии разработки)


— Надеюсь, ваш Ксаверий не говорит, в противном случае я обвиню вас в колдовстве и создам сенсационный процесс.


Собственно, всем хорош Хавик — да только очень уж молчалив. Стандартный механизм Action позволяет перехватывать сообщения и реагировать на них — но не отвечать. А ведь по тексту Ксаверий именно что отвечал на всякие умные вопросы.


Так что Ксаверий — это новый, совершенно независимый плуг для Sim с одноименным названием Xaverius. Он тоже имеет похожее окно настроек, куда можно вставить программу — но, в отличие от Хавика, не "фильтрует" сообщения для пользователя. Напротив — выход программы является "ответкой" для удаленного командира. Кроме того, в Ксаверия не встроена обработка других "событий списка", таких как вставка нового контакта и т.д.,— а только "новое сообщение".


Короче, интересный получается "человечище", хотя некоторые моменты еще не отлажены. Что важно: поскольку механизм подключения тот же (ну и код, конечно, был позаимствован из Action), то все скрипты работают абсолютно так же — так что реально переделок не так много.

 


UML может помочь увидеть то, что в исходном тексте не бросается в глаза


Об интерфейсах Sim и о том, как писать плагины, я расскажу как-нибудь при случае — а вообще-то перед вами код, там уже все написано.


Кстати, один и тот же код дает целых четыре варианта подключения к ICQ-протоколу (и к остальным тоже). Два уже описаны: подключение к "плугу" Action и написание собственного плагина. Два других — это прямая эксплуатация протокола по ICQ-плагину, но это долго и неспортивно, в смысле — не "лениво". Наконец, самый для меня сейчас интересный вариант (и, наверное, самый правильный) — удаленное управление через UINX-сокет /tmp/sim.%user%. Просто этот выгодный вариант первоначально ускользнул от моего внимания — подкупило слово Remote, а ведь это совсем не предписывает все делать именно удаленно. В документации говорится о подключению по telnet — но это тот же шелл, а значит то, что делает римоут кантрол simctrl, то же можем мы делать и сами.


Все команды хорошо "описаны" в plugins/remote/remote.cpp. Правда, в римоутере не реализованы "хаверские" операции принятия и рассылки сообщений (наверное, чтобы усложнить жизнь спамерам), но это дело наживное. Так что сейчас я занят "подкопом" с этой стороны. И, опять-таки, поскольку все закончиться передачей команд в "шелл-мирок" моих скриптов, то и здесь все будет просто. Собственно, это тот механизм, с помощью которого Хавик может стать разговорчивым ботиком.


Как видите, возможностей больше, чем идей, что с ними делать. Но вам, надеюсь, повезет с этим больше.


Что же из этого следует? Следует жить?


— Ксаверий! Что ожидает нас сегодня и вообще?
— Все вы умрете; а ты, спрашивающий меня, умрешь первый.


Как и было обещано, проблемы мы решаем. Но можем и создавать. В некотором смысле моя статья — вредная, скорее создающая проблемы, чем решающая их. Вот жил себе человек, ничего не знал, ни о чем не беспокоился — и вдруг узнает о Sim Action plug-in, вспоминает о Linux, о командной строке, обратных кавычках и еще бог весть о какой ерунде. Что этот человек может теперь сделать? Правильный ответ — все, практически. А может и ничего не делать — я не обижусь. Если пораскинуть ушами, то для программистов все возможно (а админы пусть потом изучают мануалы по вашим полетам).

2005.02.25
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".