книги хакеры / журнал хакер / 128_Optimized
.pdf
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
w Click |
to |
BUY |
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-xcha |
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
phreakingw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ПЛАТФОРМАНАГУСЕНИЦАХ |
ВОТТАКОЙРОБОТПОЛУЧИЛСЯУМЕНЯ, ТОЛЬКО |
|
СДРУГИМИДАТЧИКАМИ |
СХЕМАРОБОТА |
|
PORTC.0 = 0xFF;
PORTC.1 = 0x00;
PORTC.2 = 0xFF;
PORTC.3 = 0x00;
«0xFF» означает, чтонавыходебудетлог. «1», а«0x00» — лог. «0». Этойконструкциеймыпроверяем, естьлипередроботомпрепятствиеи скакойоностороны:
if (!(PINB & (1<<PINB.0)))
{
...
}
Еслинафототранзисторпопадаетсветотик-диода, тонаногемикроконтроллераустанавливается«0», ироботначинаетдвижениеназад, чтобы отъехатьотпрепятствия. Потомразворачивается, чтобыснованестолкнутьсяспреградой, изатемопятьедетвперед. Таккакунасдвадатчика, томыпроверяемналичиепреградыдвараза— справаислева, ипотому можемузнать, скакойстороныпрепятствие. Команда«delay_ms(1000)»
XÀÊÅÐ 08 /128/ 09
указываетнато, чтопройдетоднасекунда, преждечемначнетвыполнятьсяследующаякоманда.
СОБРАТЬТЕРМИНАТОРА
Ярассмотрелбольшинствоаспектов, которыепомогуттебесобрать первогоробота. Нонаэтомробототехниканезаканчивается. Если справишьсяспервымэтапом, тоутебяпоявитсякучановыхвозможностей. Можноусовершенствоватьалгоритмробота, — например, что делать, еслипрепятствиенескакой-тостороны, апрямопередроботом? Такженепомешаетустановитьэнкодер— простоеустройство, котороепоможетточнознатьрасположениероботавпространстве. Для наглядностивозможнаустановкацветногоилимонохромногодисплея, которыйбудетпоказыватьуровеньзарядааккумулятора, расстояние допрепятствияиразличнуюотладочнуюинформацию. Непомешает усовершенствоватьдатчики— установитьTSOP (этоик-приемники, которыевоспринимаютсигналтолькоопределеннойчастоты) вместо обычныхфототранзисторов. Помимоинфракрасныхдатчиковсуществуютультразвуковые; стоятподорожеитоженелишенынедостатков, новпоследнеевремянабираютпопулярностьуроботостроителей. Чтобыроботмогреагироватьназвук, былобынеплохоустановить микрофонысусилителем. Нопо-настоящемукласснымясчитаюуста- новкукамерыипрограммированиенаееосновемашинногозрения! ЕстьнаборспециальныхбиблиотекOpenCV, спомощьюкоторыхможно запрограммироватьраспознаваниелиц, движенияпоцветныммаякам имноговсегоинтересного. Всезависит только от твоих фантазии и умений. z
109
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
>>m |
|
||||
w Click |
to |
|
|
|
|
phreaking |
|||||
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
АЛЕКСЕЙ «CLUSTER» АВДЮХИН / CLUSTERRR@CLUSTERRR.COM /
ЧТОНАМСТОИТ «УМНЫЙДОМ» ПОСТРОИТЬ
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
||||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>> phreaking
Делаемфаршизмикроконтроллеровироутера
Вэтойстатьеярасскажуисториюсозданиясобственного«умного дома». Идеястара, какмир, носвойагрегатяподружилсбытовым роутеромотASUS! Этодалополноценныйконтрольнадустройствами посетиспомощьюпрограммногообеспечениядляLinux. Хочешь узнать, каквыжатьиз«железа» роутерамаксимум?
СЧЕГОВСЕНАЧИНАЛОСЬ…
Сдетствауменябыложеланиеавтоматизироватьвсвоейкомнате все, чтотолькоможно. Инымисловами, сделать«умныйдом». И чемумнее, темлучше. Основнаяцель— этодистанционновключать ивыключатьразличныеустройства: лампы, люстру, розеткиипр. Когда-тоянебылзнакомсмикроконтроллерамииделалвсечерез LPT-порткомпьютера. Сказать, чтоэтобылонеудобно— несказать ничего. Компьютеряневыключалникогда, прикаждойперезагрузке вкомнатеначиналась«дискотека», априпереустановкесистемы
вообщеприходилосьсидетьвтемноте. Изучениемикроконтроллеров изменилоситуацию. Язадумалсоздатьустройство, котороебудет выполнятьтежефункции, ноприэтомдолжнолегкоуправлятьсяс компьютераивтожевремябытьнезависимымотнего.
Решениевполнеочевидно. Устройствамиуправляетмикроконтроллер ATmega16, которыйсвязываетсяскомпьютеромчерезCOM-порт. Для включенияивыключенияустройствявзялнесколькоэлектромагнитных реле. Использоватьихоченьпросто: подаемпитание, ионизамыкают контакты. Думаю, тебеужеизвестно, чтологическаяединицананоге микроконтроллераAVR — этопримерно+5 вольт, алогическийноль— соответственно, 0 вольт. Однакоподключатьреленапрямуюнельзя. Во-первых, 5 вольтможетбытьмало. Во-вторых, нельзя, чтобычерезногу микроконтроллерашелслишкомбольшойток. Надоиспользоватьпромежуточныерелеилитранзисторы; соответствующаясхемаприведенана рисунке. Сточкизренияпрошивкиэтосамаяпростаячасть. Записываем логическуюединицувбитсоответствующейноги(врегистреPORTx, гдеx
— буквапорта), исветвкомнатевключается. Записываемноль— выключается. Прощеужточнонекуда. Теперьпросвязьскомпьютеромчерез COM-порт— дляэтогоиспользуетсявстроенныйвмикроконтроллер USART-порт. Примерработыснимподробнорассматривалсявпрошлом
номере(статья«Высокийуровеньпрограммирования, пишемнаСипод AVR»). Нестоитзабыватьотом, чтодолжнабытьвозможностьуправлять всемибезкомпьютера; центральныйблокдолженбытьсамостоятельным устройством. Поэтомуятакжеподключилкмикроконтроллерутекстовый ЖК-дисплейикучукнопок. Спомощьювсегоэтогобылорешенореализоватьпростенькийинтерфейсизнесколькихменю. Аеслиужеесть дисплей, топочемунесделатьвозможностьвыводитьнанегопроизвольнуюинформацию, получаемуюскомпьютера?
ПРАВДА, КРУТО?
Ияэтосделал. Затемначалипоявлятьсядругиеидеи: ДУприемник дляуправленияспультаотлюбоготелевизора, термодатчикидля отображениятемпературынаулицеивкомнате; датчикдвижения дляавтоматическогоотключениясвета, когдаменянет. Проекточень активноразвивался. Протоколдлявзаимодействияскомпьютером усложнился. ДляWindows быларазработанасоответствующаяпрограмма, котораякомандовалаустройствувключать/выключатьлюстру принажатии«горячих» клавишнаклавиатуре, ставилаваське/мирке статус«отошел», еслидатчикдвижениядолгоменянезамечал, выво- дилатекстсообщенийизтойжеаськи/миркинаЖК-дисплей. Атакже делаламногиедругиефишки.
ПОДВОДНЫЕКАМНИ, ИЛИИСПОЛЬЗУЕМСЕТЬ
Привсемэтомначалипроявлятьсядругиетраблы. «Умныйдом» взаимодействовалскомпьютером, нотолькосодним. Амнехотелось, чтобыямогуправлятьвсемслюбогоустройствапосети, будьтомобильныйтелефон, Nintendo DS илижепростоудаленныйкомпьютер. Первоерешение, котороепришловголову, былодостаточнобаналь-
110 |
XÀÊÅÐ 08 /128/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
phreakingw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
РОУТЕРНАСТЕНЕ. ДЛЯCOM-ПОРТАЯВЫВЕЛНЕИС- ПОЛЬЗУЕМЫЕПРОВОДАИЗВИТОЙПАРЫ
СЕТЕВАЯРОЗЕТКАСТАЛАЕЩЕИCOM-РОЗЕТКОЙ
УПРАВЛЯЕМ«УМНЫМДОМОМ» СМОБИЛКИ ВНЕШНИЙВИДУСТРОЙСТВА
ным. Ядоработалпрограмму, котораяобщаетсячерезCOM-портс «умнымдомом», так, чтобыонапринималаподключенияпосети, позволяяуправлятьвсемудаленно.
Витогеявернулсяктому, счегоначинал: компьютерприходилось постояннодержатьвключенным.
Мною были рассмотрены различные способы работы с последовательным портом через сеть. Решение нашлось, когда я приобрел роутер ASUS WL-500gP. Дело в том, что в этом замечательном устройстве крутится Linux, а внутри роутера есть два UART-порта, которые используются на заводе для отладки.
Один из них позволяет работать с системной консолью, а второй совсем никак не используется. Именно это нам и надо! Ничто не мешает превратить UART в COM-порты, используя микросхему MAX3232. Именно так я и сделал. Подробнее фича рассматривалась совсем недавно, в z№ 125 (статья Сергея Долина «Великий и могучий UART»). Итак, мыполучилироутер, гдеестьLinux, сетьи COM-порты— идеальноеустройстводлямоихцелей, таккакработает круглосуточно, нешумитиэлектричествакушаетмало. Саппаратной точкизрениярешениенайдено, нокакбытьссофтом? Иязадался вопросомпрограммированияподроутер.
XÀÊÅÐ 08 /128/ 09 |
111 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
>>m |
|
|||
w Click |
to |
|
|
|
phreaking |
|||||
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
АЛЬТЕРНАТИВНЫЕ
МЕТОДЫ
Еслитынехочешьразбиратьсвойроутер, томожешьпростокупитьUSBCOM шнурокивоткнутьеговUSB-порт. ВпрошивкеОлегаужеестьдрайверадлятакихустройствнаосновечипа«pl2303». Достаточнозагрузить модуликомандами«insmod usbserial.o» и«insmod pl2303.o». Врезультате появитсяещеодинпорт«/dev/usb/tts/0».
буду краток. В USB-порт я воткнул флешку побольше, подключился к роутеру телнетом и выполнил следующие команды:
УСТАНОВКАIPKG
mount /dev/scsi/host0/bus0/target0/lun0/
part1 /opt ipkg.sh update
ipkg.sh install ipkg-opt ipkg update
Обративнимание, что«/dev/scsi/host0/bus0/target0/ lun0/part1» — этоEXT3-разделнамоейфлешке. Онауже разбитаиотформатирована; соответственно, утебяпуть можетотличаться. Полагаю, тыужезнаешь, какисполь-
ПЛАТАДЛЯMAX3232
DVD |
dvd
Надискетынайдешь исходникимоейпрограммыдляроутера. Используйее вкачествепримера.
«ОЛЕГОВСКИЕ» ПРОШИВКИ
Многие роутеры от ASUS стали популярны благодаря так называемым «олеговским» прошивкам, которые разрабатывает наш соотечественник Олег (увы, фамилию свою он нигде не упоминает). Эти прошивки позволяют получить полноценный доступ к Линуксу, а на продвинутых моделях еще и устанавливать дополнительный софт. Скачать это чудо можно на официальном сайте: http://oleg.wl500g.info. Когда я впервые поставил такую прошивку на свой WL-500gP, счастью не было предела. После небольших манипуляций установка софта свелась к простому использованию менеджера пакетов «ipkg». Эта тема подробно рассматривалась в статье Step’а (z №106, статья «Level-up для точки доступа»), поэтому
зовать«fdisk» и«mke2fs»; яопущуэтиинструкции. Да, и незабывай, чтоприэтомуроутерадолженбытьдоступв интернет, — онбудетсамкачатьпакеты. Чтобымонтированиепроизводилосьавтоматическипослезагрузки, я выполнилещенесколькокоманд:
АВТОМАТИЧЕСКОЕМОНТИРОВАНИЕФЛЕШКИ echo "#!/bin/sh" > /usr/local/sbin/post-
mount
echo "mount /dev/scsi/host0/bus0/target0/ lun0/part1 /opt" >> /usr/local/sbin/postmount
chmod +x /usr/local/sbin/post-mount flashfs save
112 |
XÀÊÅÐ 08 /128/ 09 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
w Click |
to |
BUY |
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-xcha |
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
phreakingw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ВНУТРИРОУТЕРА
flashfs commit flashfs enable
Файл«post-mount» выполняетсясистемойнаавтоматепослемонтированиядисков, апоследниетристрокисохраняютизмененияво встроеннойпамятироутера. Незабывайвыполнятьих, иначерискуешьпотерятьданныепослеперезагрузки! Затемможноустанавливатьпакетыизрепозитория, используяпростуюкоманду«ipkg install <имя_пакета>».
ре: долго, затоудобно. Еслихочешьделатьтакже, тосмелоставьпа-
кет«buildroot». Делаетсяэтооднойкомандой«ipkg install buildroot»,
еслиipkg утебяужеустановленинастроен. Далеестановятсядоступныgcc, g++, make ивсестандартныебиблиотеки. Надеюсь, тыуже знаешь, какихиспользовать? Япервымделомнаписалпростейшую программу:
HELLO WORLD
[Cluster@CLUSTER Cluster]$ cat hello.c #include <stdio.h>
«НАССТОБОЙИНТЕРЕСУЮТ |
ВИНДОВЫЙКЛИЕНТВДЕЙСТВИИ |
|
|
НЕЧУЖИЕПРОГРАММЫ, |
|
АСВОИ! КАКЖЕИХПИСАТЬ? |
|
ЭТООКАЗАЛОСЬПРОЩЕ, ЧЕМ |
|
ЯОЖИДАЛ: ЛИНУКС, ОН
ИВАФРИКЕЛИНУКС. ИЕСЛИ ТЫУМЕЕШЬПИСАТЬПРОГРАММЫДЛЯНЕГО, ТОСМОЖЕШЬ ПИСАТЬИХИДЛЯРОУТЕРА».
ПИШЕМПРОГРАММЫДЛЯРОУТЕРА
Нонасстобойинтересуютнечужиепрограммы, асвои! Какжеих писать? Этооказалосьгораздопроще, чемяожидал. Линукс, они вАфрикеЛинукс. Иеслитыумеешьписатьпрограммыдлянего, то сможешьписатьихидляроутера. Разницыникакой. Чтодляэтого нужно? Конечно, компилятор. Якомпилируюсырцыпрямонароуте-
XÀÊÅÐ 08 /128/ 09 |
113 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
>>m |
|
|||
w Click |
to |
|
|
|
phreaking |
|||||
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
UART-ВЫВОДЫВНУТРИWL-500GP ОТASUS |
|
|
|
ТАКОЙВОТПОЛУЧИЛСЯКОЛХОЗ |
|
|
|
|
int main() |
|
|
{ |
int fd; |
|
printf("Hello world!\n"); |
struct termios options; |
|
} |
fd = open(UARTPORT, O_RDWR | O_NOCTTY | O_NDELAY); |
|
[Cluster@CLUSTER Cluster]$ gcc hello.c -o hello |
if (fd == -1) |
|
[Cluster@CLUSTER Cluster]$ ./hello |
{ |
|
Hello world! |
perror("Can’t open port"); |
|
|
exit(1); |
|
|
Просто, ноэффектно. Осталосьвоплотитьвжизньмоюидею. Дляэто- |
|
гонужнонаписатьпрограмму, котораяработаетспоследовательными |
|
портамиисетевымисокетами. Алгоритмнесложен. Прослушиваем |
|
TCP-порт, принимаемвходящиеподключенияпосети. Еслиотлюбого |
|
изсетевыхклиентовприходятданные, топересылаемихнаUART- |
|
порт. Если, наоборот, изпоследовательногопортапришлиданные, то |
|
рассылаемихвсемсетевымклиентам. |
|
ПоследовательныепортывтамошнемЛинуксеимеютимена«/dev/ |
|
usb/tts/0» и«/dev/usb/tts/1». Первый, какяужеговорил, используется |
|
длясистемнойконсоли. Авторойсвободен, имыможемиспользовать |
|
егодлясвоихцелей. Помнишь, впрошломномеремырассматривали |
|
подключениеЖК-дисплеякCOM-портукомпьютерачерезмикрокон- |
|
троллер? Этоустройстволегкоподключитькроутеру, чтобывыводить |
|
данныенаэкран, икомпьютердляэтогоужененужен. Ятакисделал, |
|
азатемнабралвконсолидвепростыекоманды: |
} |
}
tcflush(fd, TCIFLUSH); tcgetattr(fd, &options); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); cfsetospeed(&options, B9600);
tcsetattr(fd, TCSANOW, &options); fcntl(fd, F_SETFL, FNDELAY);
printf("UART (%s) port opened\n", UARTPORT); return fd;
ПРОВЕРКАПОРТА |
Тутконстанта«UARTPORT» — путькфайлу-устройству, который |
|
stty -crtscts 9600 < /dev/tts/1 |
|
ассоциируетсяспортом. Вданномслучаеэто«/dev/tts/1». Собствен- |
echo "Hello world!" > /dev/tts/1 |
|
нофункция«fopen()» открываетпорт, далеепростоидетизменение |
|
||
|
|
различныхпараметров. Впримереиспользуетсяскоростьв9600 |
|
|
|
Перваякоманда— установкапараметровпорта. Вторая— выводтекс- |
бод, одинстоповыйбит; контроляпередачиданныхнет. Записьи |
|
та. Экспериментудался, ияувиделнаэкранесоответствующийтекст. А |
чтениепроизводятсяфункциями«write()» и«read()». Какработать |
|
воткакэтосделатьизсвоейпрограммы? РаботатьспортамивЛинуксе |
ссокетами, наверное, многиеужезнают, — дляостальныхприведу |
|
мнепришлосьвпервые, получилосьдалеконесразу, ипришлосьдолго |
функцию, котораяоткрываетпортиподготавливаетегодляпринятия |
|
экспериментироватьсразличнымипараметрами. Приведукодфунк- |
соединений: |
ции, котораяоткрываетпортдлячтенияизаписи:
|
|
|
СОЗДАЕМСОКЕТИПРОСЛУШИВАЕМЕГО |
ОТКРЫВАЕМПОСЛЕДОВАТЕЛЬНЫЙПОРТ |
|
int StartListen() |
|
|
|
|
|
int open_uart_port() |
|
|
{ |
{ |
|
|
int sock; |
|
|||
|
|
|
|
|
|
|
|
114 |
XÀÊÅÐ 08 /128/ 09 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
w Click |
to |
BUY |
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-xcha |
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
phreakingw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ГРАФИКТЕМПЕРАТУРЫЗАСУТКИ
СХЕМАПОДКЛЮЧЕНИЯРЕЛЕКМИКРОКОНТРОЛЛЕРУ
int i = 1;
if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Can’t create socket"); return -1;
}
bzero(&sa, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(CCPORT);
sa.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sock, (struct sockaddr *)&sa, sizeof sa))
{
perror("Can’t bind port"); close(sock);
return -1;
}
if (listen(sock, 15))
{
perror("Can’t listen port"); close(sock);
return -1;
}
if (ioctl(sock, FIONBIO, &i))
{
perror("Can’t set non-blocking mode"); close(sock);
return -1;
}
printf("Listening on port %u\n", CCPORT); return sock;
}
Константа«CCPORT» — этономерпорта, накоторыйбудутприниматьсясоединения. Обративнимание, чтояперевожусокетв неблокирующийрежим(хочумаксимальноупроститькод). Вызовом этихдвухфункцийяначинаюработупрограммы. Теперьвбесконечномцикленеобходимопроверятьналичиеданныхсобеихсторони передаватьихдальше. Кодпростой, нослишкомдлинныйдлястатьи, поэтомуищиегонадиске. Витогероутерсталсвоеобразнымпере- ходникоммеждусетьюиCOM-портом.
XÀÊÅÐ 08 /128/ 09
КЛИЕНТСКИЕПРОГРАММЫ
Протоколдляобщенияс«умнымдомом» сталоченьсложным, он слишкомзаточенподмоинуждыиописыватьеготутнетсмысла. ОсновнуюклиентскуюпрограммуянаписалдляWindows, используя приэтомBorland Delphi. Получиласьсофтина, котораязапускается вместессистемойивиситвтрее. Приэтомкаждыенесколькосекунд онаподключаетсяксервернойпрограмме, котораязапущенана роутере. Когдасоединениеустановлено, происходитобменданными: компьютерузнает, какиеустройстваприсутствуютикакиевключены, какаятемпературавкомнатеит.д. Остальныефункцииизменились незначительно, ихяописывалвначалестатьи. Идейприэтомне меньше, реализоватьтакможнооченьмногое.
БОНУСЫРОУТЕРА
ЕсливсеэтобезобразиеработаетподЛинуксом, значит, можноиспользоватьмножестводругихутилит, портированныхнаэтотроутер. Самоеочевидное— этовеб-сервер! Яиспользую«lighttpd», ондостаточнолегкийиумеетвсе, чтонужно. ЕгонетрудноподружитьсPHP.
Ачтомешаетнаписатьклиентдля«умногодома» наPHP? Именно такяисделал, используяфункциидляработыссокетами. Этодало возможностьуправлятьдомомслюбогоустройства, накотороместь веб-браузер, например, мобильноготелефона. Даженепришлось переноситькоднаСимбиан.
Такжеявоспользовалсяутилитой«rrdtool», — этооченьинтересная программа, котораяпозволяетзаноситьинформациювсвоеобразную базуданныхирисоватьпонейграфики. Мнебылолюбопытно, ия реализовалвыводграфиковсданнымиотемпературезапрошедшиесутки, неделюит.д. Получилосьвесьмасимпатично. Планирую ещесделать, чтобыотслеживалосьдвижениевкомнате, ироутер присылалмнеSMS, есливдругвкомнатукто-товошел. Своеобразная самодельнаясигнализация.
КОФЕВПОСТЕЛЬ
Встатьеяхотелпоказатьтебе, чтоприсочетаниисвоеобразного «железа» исофтаможнополучитьоченьинтересныерезультаты. Обыкновенныйроутерможнодаженаучитьваритькофе, главное
— уметьпрограммироватьподнеобычныеплатформыиграмотно согласовывать«железо». Оченьнадеюсь, чтотывдохновишьсяэтой статьейисделаешьчто-нибудьгораздокруче. z
115
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
>>m |
|
||||
w Click |
to |
|
|
|
|
SYN/ACK |
|||||
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
>> SYN/ACK
_SSH3R1FF-
/ SSH3R1FF@GMAIL.COM /
Серпом поаськам
РежемIM, Skype, P2P ивсеостальное
Оченьмногиелюбятнаработеобщатьсяпоаське, зависатьв«Одноклассниках», качатьфайлы, вобщем, заниматьсявсем, чемугодно, нотолько несвоиминепосредственнымислужебнымиобязанностями. Естественно, раноилипоздноэтонадоестначальству, ирешениепоблокировке всегоивсяпретворятьвжизньпридетсятебекакадмину.
|
ИЗУЧАЕМ ВОПРОС Вообще говоря, процесс |
Теперь в расставленные сети будет попадаться |
|
-j REJECT |
|
|||
|
блокировки доступа пользователей к IM-сетям |
только то, что нужно. Аналогично отлавливают- |
|
iptables -A OUTPUT -d id.rambler.ru |
|
|||
|
довольно прост: достаточно указать в пакет- |
сяданныеипоостальнымIM-сетям.Всеклиенты |
|
-j REJECT |
|
|||
|
ном фильтре пару правил, и клиент просто не |
ICQ,втомчислеирамблеровские,дляподключе- |
|
|
|
|||
|
|
|
|
|||||
|
сможет подключиться к серверу. Такой метод |
ния к серверу по умолчанию используют адрес |
Использование доменного имени с одной сторо- |
|||||
|
помогает только в 90% случаев, остальные 10% |
login.icq.com и порт 5190. В асечных рекоменда- |
ны более универсально, так как IP всегда может |
|||||
|
приходятся на умников, знающих о том, что се- |
циях сказано, что в случае недоступности 5190 |
измениться,носдругойстороны—«влет»найти |
|||||
|
годняпредлагаетсябольшоеколичествоутилит |
подключаться можно и к порту 443. Продолжаем |
всеалиасысложновато,поэтомунелишнейбудет |
|||||
|
исервисов,задачакоторых—помочьзадавлен- |
исследование и смотрим, что мы можем узнать о |
блокировкаипоадресу.Темболее,разработчики |
|||||
|
ному админскими правилами пользователю |
домене: |
|
постоянно идут навстречу клиенту и предлагают |
||||
|
вырваться на свободу. Для этого используется |
|
|
|
сервисы вроде www.icq.com/icq2go, позволяю- |
|||
|
подключение через стандартный http-порт |
|
$ host login.icq.com |
|
щиеобщатьсячерезвеб-интерфейс.Хотяименно |
|||
|
или шифрование соединения, что не позволяет |
|
login.icq.com is an alias for login. |
|
этот вариант легко блокируется, достаточно за- |
|||
|
просто взять и отбросить пакет или просмот- |
|
messaging.aol.com. |
|
крыть доступ к диапазону IP (он виден в выводе |
|||
|
ретьегосодержимое.Универсальногорешения, |
|
login.messaging.aol.com has address |
|
dig): |
|||
|
скорее всего, не будет никогда. Это даже дела- |
|
64.12.161.153 |
|
|
|
|
|
|
ет нашу работу интереснее. Так как мы пока не |
|
|
|
|
iptables -A OUTPUT -d 64.12.0.0/16 |
|
|
|
|
|
|
|
|
|||
|
знаем,чтоконкретноискать,запускаемtcpdump |
Вывод показывает, что login.icq.com является |
|
-j REJECT |
|
|||
|
безпараметров: |
|
псевдонимом для другого имени, и, подозреваю, |
|
iptables -A OUTPUT -d 205.188.0.0/16 |
|
||
|
|
|
далеконеединственным.Еготакженемешаетза- |
|
-j REJECT |
|
||
|
$ sudo tcpdump -i eth0 |
|
блокировать в правилах. Как видишь, ситуацию |
|
|
|
||
|
|
|
|
|||||
|
|
|
с ICQ и многими другими сервисами немного |
Но даже неискушенный юзверь найдет в |
||||
|
|
|
||||||
|
Авотинашааська: |
усложняет наличие большого количества алиа- |
интернете еще с десяток реализаций icq2go |
|||||
|
|
|
сов и подсервисов, поэтому приходится искать и |
(à-ëÿ www.meebo.com), предлагающих кон- |
||||
|
21:33:55.687042 IP 10.10.10.10.33018 |
|
прикрывать все возможные варианты. Еще одна |
нект к IM-системе в обход ограничений. Вот |
||||
|
> 64.12.26.150.aol: . ack 11334 win |
|
полезнаякоманда—dig—дастнаиболееполную |
здесь уже придется повозиться. Не буду му- |
||||
|
63920 |
|
инфуполюбомудомену(diglogin.icq.com). |
чить детальным выводом tcpdump'а, скажу |
||||
|
|
|
В первом случае заблокировать доступ очень |
только, что Yahoo! Messenger использует |
||||
|
|
|
||||||
|
Вывод нам дал, как минимум, два полезных па- |
просто. Сначала режем по порту и затем для вер- |
TCP-порты: 5000-5001,5050,5100 и UDP-пор- |
|||||
|
раметра—IP-адрессервераICQ,ккоторомупод- |
ностидобавляемправилодлядомена,есликто-то |
òû: 5000-5010, MSN — 1863, Jabber/Gtalk |
|||||
|
ключаетсяклиент,иназваниепротокола.Номер |
захочет нас надуть (все примеры буду приводить |
— 5222, 5223, IRC обычно 6667-6669, Ìail- |
|||||
|
нужногопортаможноузнатькомандой«grepaol |
дляiptables,нопринеобходимостиихлегкомож- |
Агент работает по портам: 2041, 2042. Особо |
|||||
|
/etc/protocols», запустив tcpdump с ключом '-n' |
но переписать для любого другого пакетного |
не раздумывая, сделай запрет на все! Помни, |
|||||
|
или просто спросив у гугла. Мы ищем аську, по- |
фильтра): |
что некоторые сервисы (например, узкопро- |
|||||
|
этомупишем: |
|
|
|
фильные IRC и т.п.) могут менять порты по |
|||
|
|
|
|
iptables -A FORWARD -p TCP --dport |
|
умолчанию. Правила для этих сетей строим |
||
|
$ sudo tcpdump -i eth0 dst portrange |
|
|
5190 -j DROP |
|
по аналогии с предыдущим. Например, для |
||
|
5190 |
|
|
iptables -A OUTPUT -d login.icq.com |
|
Yahoo Messenger: |
||
|
|
|
|
|
|
|
|
|
|
116 |
|
|
|
|
|
XÀÊÅÐ 08 /128/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
SYN/ACKw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
iptables -A FORWARD -p TCP --dport 5000:5001 -j REJECT iptables -A FORWARD -p TCP --dport 5050 -j REJECT iptables -A FORWARD -p TCP --dport 5100 -j REJECT iptables -A FORWARD -p UDP --dport 5000:5010 -j REJECT iptables -A FORWARD -d cs.yahoo.com -j REJECT iptables -A FORWARD -d scsa.yahoo.com -j REJECT
Из дополнительных мер можно посоветовать перенастроить свой DNS-сервер, чтобы пользователь вместо правильного адреса получал изначально нерабочий. К слову, анализ DNS-запросов в сети может дать не меньше информации к размышлению, чем отлов пакетов с tcpdump. Поскольку мой DNS-сервер крутится на OpenBSD, приведу пример для BIND 9.3.4:
$ sudo vim /var/named/etc/named.conf logging {
// определяем канал — место назначения журнальных записей
channel queries_ch {
// задаем лог-файл (путь указывается относительно chroot-окружения), количество ротаций и его размер
file "/log/queries.log" versions 5 size 10m;
// устанавливаем уровень журналирования (нам подойдет debug, либо info)
severity debug;
// к каждой записи добавляем метки с категорией, уровнем журналирования и временным штампом
print-category yes; print-severity yes; print-time yes;
};
// фиксируем клиентские обращения category queries { queries_ch; }; category resolver { queries_ch; };
};
MIPKO EMPLOYEE MONITOR
Представим такую ситуацию: политикой компании разрешено использовать ICQ только менеджеру по продажам, но он целый день болтает в аське с друзьями, вместо того, чтобы разводить клиентов на заказы. При помощи программ, описанных в статье, это определить нельзя. Поэтому возможен и альтернативный подход — наблюдение. На рабочем месте устанавливается программа, которая перехватывает все вводимые сообщения, контролирует запуск приложений и работу в интернете. Начальство в этом случае получает отчеты по всем действиям пользователя, включая снимки рабочего стола, и может оценить эффективность работы сотрудника. Пример такой программы — MIPKO Employee Monitor (www.mipko.ru). Она разработана российской компанией, имеет локализованный интерфейс и довольно проста в использовании. Программа может бытьзапущенавскрытомрежиме.Вэтомслучаеотследитьееработу штатными системными средствами невозможно.
ЦЕПКИЙЗАХВАТ
По умолчанию l7-filter просматривает лишь первые 10 пакетов или 12 Кб каждого соединения, чего обычно более чем достаточно. При необходимости можно указать свое значение, прописав его в /proc/ net/layer7_numpackets:
$ sudo sh -c "echo 16 > /proc/net/layer7_numpackets"
Пример блокировки ICQ для packet filter
$ sudo vim /etc/pf.conf
table <ICQDests> const { 64.12.0.0/16, 205.188.0.0/16 }
block out log quick on $ext_if proto { tcp, udp } \ from any to <ICQDests>
block out log quick on $ext_if proto { tcp, udp } \ from any to any port { 4000, 5190 }
XÀÊÅÐ 08 /128/ 09 |
117 |
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
|
|
E |
|
|
|
||
|
|
X |
|
|
|
|
|
|
|
||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
>>m |
|
||||
w Click |
to |
|
|
|
SYN/ACK |
||||||
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
||||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
d |
f |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
ИСПОЛЬЗУЕМHOST ИDIG, ЧТОБЫПОЛУЧИТЬИНФОРМАЦИЮ ОСЕРВЕРАХICQ
Перезапускаем демон named и включаем журналирование DNS-запросов:
INFO
$ sudo rndc reload $ sudo rndc querylog
|
info |
Смотримвлоги: |
|||
• Подробнееона- |
|
|
|||
стройкеSquid можно |
|
$ sudo tail -f /var/named/log/queries.log |
|||
прочитатьвномерах |
|
30-Jun-2009 16:22:15.036 resolver: debug 1: |
|||
z замай-июль2008 |
|
createfetch: ns.mail.ru A |
|||
года. |
|
30-Jun-2009 16:22:35.179 queries: info: client |
|||
|
|
|
|
|
192.168.1.21#64773: view internal: query: www. |
• Чтобызаставить |
|
meebo.com IN A + |
|||
Netfilter глубже |
|
30-Jun-2009 16:22:35.868 queries: info: client |
|||
заглянутьвнутрь |
|
192.168.1.21#63341: view internal: query: |
|||
пакетов, необходи- |
|
js.meebo.com IN A + |
|||
моустановитьпатч |
|
|
|||
|
|
||||
l7-filter. |
Вдальнейшемборьбабудетвестисьпопринципу«увиделчто- |
||||
|
|
|
|
тоновоевnetstat/tcpdump/queries.log,проанализировалидо- |
|
|
|
|
|
бавилправило».Врепозиторияхдистрибутивовполновсяких |
|
|
|
|
|
полезных утилит. Например, iptstate выводит TOP-образную |
|
|
|
|
|
таблицу по соединениям. Чтобы упростить задачу, можно ис- |
|
|
HTTP://WWW |
|
|
пользоватьфильтрпортовилиадресов: |
|
|
links |
|
|
||
|
|
$ sudo iptstate --dstpt-filter=5190 |
|||
• Netfilter/Iptables — |
|
|
|||
|
|
||||
netfilter.org. |
Такмыувидимвсепопыткиподключениякасечномупорту. |
||||
• Squid — www.squid- |
|
|
|||
cache.org. |
ПЕРЕКРЫВАЕМ КИСЛОРОД СРЕДСТВАМИ КАЛЬМАРА |
||||
• l7-filter — l7-filter. |
Как только основные порты для связи с IM-сервером будут пе- |
||||
sf.net. |
рекрыты, пользователи начнут подключаться через стандарт- |
•IPP2P — ipp2p.org. ный порт 80/443 или через прокси. Здесь iptables в том виде, в
•P2PWall — www. котором он есть, нам уже не поможет, но не забываем о сущес- lowth.com/p2pwall. твованииSquid'а—онработаетнаприкладномуровнеиумеет
анализироватьпередаваемуюинформацию.Надеюсь,кэтому временикальмарутебяуженастроен,ивсепользователичерез неговыходятвинтернет(подробнееонастройкеSquidсмотри влетнихномерахzза2008год).Сампринципблокировокостается тем же — запрещаем доступ к определенным адресам. Итак,открываемsquid.confидописываем:
ВЕБ-АСЬКАICQ2GO
$ sudo vim /etc/squid/squid.conf
//Указываем свой адрес acl admin src 192.168.10.10
//aim/http — MIME-òèï ICQ
acl aim_http rep_mime_type -i ^aim/http$
//Блокируем всех, кроме себя любимого http_reply_access deny aim_http !admin
//Ну и чтобы наверняка, перекрываем доступ к серверам ICQ
acl ICQ-Mess dst 64.12.200.89/32 205.188.153.121/32 205.188.179.233/32 64.12.161.153/32 64.12.161.185/32 http_access deny ICQ-Mess !admin
Учитывая, что резать придется и другие IM-сети, а также бесплатные почтовики вроде mail.ru, проще для всех блокируемых адресов создать отдельный файл, подключив его в правиле:
acl im_nets src "/usr/local/etc/squid/icq_ nets.acl"
http_acces deny im_nets !admin
Остается только почаще заглядывать в отчеты Sarg (анализа- торлог-файловSquid)ипроверять,вселилазейкиприкрыты.
ДОПИЛИВАЕМ IPTABLES Все сделано правильно, нужные порты и адреса заблокированы, но хитрые пользователи все равно нашли способ обойти преграды. Снова возвращаемся на нижний уровень OSI к нашему iptables. Начиная с версии 2.6.14, в состав ядра включен модуль (ранее он был в patch- o-matic-ng),позволяющийзаглянутьвнутрьпакетаипостро- итьправило,опираясьнаналичие/отсутствиеопределенных строк. Модуль называется string (xt_string). В большинстве современныхдистрибутивоввсенеобходимоеужеесть,ипересобирать ничего не придется. Чтобы проверить, достаточ- нопросмотретьсписокфайловвкаталогемодулей:
$ ls /lib/modules/2.6.24-24-generic/kernel/ net/netfilter/xt_string.ko
Сегопомощьюзадаватьправиладовольнопросто:
$ sudo iptables -A FORWARD -m string --string "icq.com" \
--algo kmp --to 65535 -j DROP
Теперь, если в пакете обнаружится соответствующая строка, в доступе будет отказано. Так же можно резать и все остальное, к чему не лежит душа начальства/админа. Например,
118 |
XÀÊÅÐ 08 /128/ 09 |