Специально для crus-а и прочих ностальгирующих под катом пара пятаков.
Архив автора: vurd
crus про год коня
<crus> бля
<crus> свинки то были пизжи
<crus> нажрешься, упадешь
<crus> а она тебя пятоком толкает и хрюкает
<crus> с тобой вдвоем
<crus> ну не сказка ли
<crus> ?
Syslog-сервер с ICQ-клиентом в одном флаконе
Как известно, множество сетевых устройств могут использовать протокол syslog для оповещения о происходящих в них процессах. Соответственно, существует некоторое количество серверных программ, которые позволяют систематизировать информационные сообщения, передать их каким-либо способом для обработки обслуживающему персоналу, переслать дальше по цепочке серверов. Но зачастую такие системы представляют из себя комбайны по мониторингу, что может не подойти в какой-то конкретной ситуации. Таким образом, мне понадобился сервис, банально рассылающий сообщения syslog по группе пользователей icq. Ниже я предлагаю решение такой задачи.
Используемые инструменты:
1. Сервер на базе Debian Linux.
2. Интерпретатор языка Perl.
Первым делом нужно установить модуль Net::OSCAR, который обеспечит нам функциональность асечного клиента. Вариантов два, использовать CPAN, либо установить в ручном режиме.
В случае с CPAN выполняем:
cpan install Net::OSCAR exit |
В случае ручного режима (после скачки и распаковки):
apt-get install libdigest-md5-file-perl apt-get install libscalar-util-numeric-perl apt-get install libxml-parser-perl perl Makefile.PL make test make install |
Будем писать perl-daemon, вечно висящий в памяти. Стоит обратить внимание, что сервис syslog слушает 514 порт, это значит, что он должен запускаться от root-а. Открываем любимый текстовый редактор и набираем следующий код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #!/usr/bin/perl -w #Чтобы не ошибаться в переменных use strict; #Используемые модули use Net::OSCAR qw(:standard); use POSIX qw(setsid); use IO::Socket; #Отсоединяемся от рабочей консоли Daemonize(); #Настройки для соединения с сервером ICQ my $icq_uin = _ICQ_UIN_HERE_; my $icq_pass = "_ICQ_PASSWORD_HERE_"; #Здесь перечисляются получатели сообщения syslog my @icq_users = (_ICQ_REC_UIN_HERE_,_ICQ_REC_UIN_HERE_); #Готовимся к приему сообщений syslog на 514 порту my $sock = IO::Socket::INET->new(LocalPort => '514', Proto => 'udp'); #Таймаут выполнения системной функции recv устанавливаем в 10 секунд setsockopt($sock,SOL_SOCKET,SO_RCVTIMEO,pack('L!L!',+10,0)); #Сюда будем ловить сообщения от syslog-клиентов my $buf; #Инициализурем объект и соединяемся с ICQ my $bot=Net::OSCAR->new(); $bot->signon($icq_uin,$icq_pass); #Сделаемся видимыми $bot->set_visibility(VISMODE_PERMITALL); #Пока бот не online, топчемся здесь while (!$bot->is_on) { $bot->do_one_loop(); } #Основной цикл while (1) { #Получаем сообщения от syslog-клиентов, с ожиданием в 10 секунд, раскладываем по переменным результат $sock->recv($buf, 1524); my ($port, $ipaddr) = sockaddr_in($sock->peername); my $hn = gethostbyaddr($ipaddr, AF_INET); $buf=~/< (\d+)>(.*?):(.*)/; my $head=$2; my $msg=$3; #Если связь с ICQ прервалась, соединимся заново if (!$bot->is_on) { $bot->signon($icq_uin,$icq_pass); $bot->set_visibility(VISMODE_PERMITALL); sleep(5); } #Нужно, чтобы сервер нас не потерял $bot->do_one_loop(); if ($buf) { #Если к нам что-то пришло, отправим всей группе получателей foreach my $i (@icq_users) { $bot->send_im($i,"$head $msg (from $hn)"); } } } #До этого места никогда не дойдет :-) В идеале нужен код обработки сигналов системы $bot->signoff(); #Функция отсоединения, полностью copy&paste sub Daemonize { return if ($^O eq 'MSWin32'); chdir '/' or die "Can't chdir to /: $!"; umask 0; open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; open STDERR, '>/dev/null' or die "Can't write to /dev/null: $!"; defined(my $pid = fork) or die "Can't fork: $!"; exit if $pid; setsid or die "Can't start a new session: $!\n"; } |
Устанавливаем на файл 700 и запускаем:
chmod 700 ./icqBot.pl ./icqBot.pl |
По мотивам:
1. Пишем icq-бот на perl
2. A simple Syslog daemon script written in Perl.
3. Архитектурно-независимый код для recv timeout
p.s. Всё, что нам легко досталось, так же легко и теряется. (c) (В данном случае распространяется обратно в интернет).
Специально для Сапера
Вот так незаметно люди и лишаются moswar-а, когда палятся перед администратором.
# nslookup moswar.ru Server: 89.222.228.2 Address: 89.222.228.2#53 Non-authoritative answer: Name: moswar.ru Address: 85.112.113.68 # iptables -A FORWARD -d 85.112.113.68 -m tcp -p tcp --dport 80 -j REJECT |
Зимовка в Эквадоре
Всем играть!
Я не знаю, что здесь нужно делать, но играю уже третий день.
Как собрать драйвера для e1000 от яндекса в FreeBSD 8.1
При линковке ядра с драйвером этой версии возникает следующая ошибка:
if_igb.o(.text+0x372e): In function `igb_setup_vlan_hw_support': /usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:4544: undefined reference to `e1000_v fta_set_vf' if_igb.o(.text+0x975d): In function `igb_ioctl': /usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:1833: undefined reference to `e1000_p romisc_set_vf' if_igb.o(.text+0x357e): In function `igb_set_promisc': /usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:1811: undefined reference to `e1000_p romisc_set_vf' if_igb.o(.text+0x37a9): In function `igb_setup_vlan_hw_support': /usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:4551: undefined reference to `e1000_r lpml_set_vf' e1000_api.o(.text+0xc6d): In function `e1000_setup_init_funcs': /usr/pfSensesrc/src/sys/dev/e1000/e1000_api.c:357: undefined reference to `e1000 _init_mbx_ops_generic' e1000_api.o(.text+0xce3):/usr/pfSensesrc/src/sys/dev/e1000/e1000_api.c:407: undefined reference to `e1000_init_function_pointers_vf' *** Error code 1 1 error *** Error code 2 1 error *** Error code 2 1 error |
Дело в том, что в фре выше 8.0 в стандартном драйвере исчезли два исходника e1000_vf и e1000_mbx, но в версии от яндекса они всё еще используются.
Для корректной сборки необходимо внести изменения в следующие файлы:
1. /usr/src/sys/conf/files
> dev/e1000/e1000_vf.c optional em | igb \ > compile-with "${NORMAL_C} -I$S/dev/e1000" > dev/e1000/e1000_mbx.c optional em | igb \ > compile-with "${NORMAL_C} -I$S/dev/e1000" |
2. /usr/src/sys/modules/em/Makefile
< COMMON_SHARED = e1000_api.c e1000_phy.c e1000_nvm.c e1000_mac.c e1000_manage.c --- > COMMON_SHARED = e1000_api.c e1000_phy.c e1000_nvm.c e1000_mac.c \ > e1000_manage.c e1000_vf.c e1000_mbx.c |
3. /usr/src/sys/modules/igb/Makefile
< SHARED_SRCS += e1000_82575.c --- > SHARED_SRCS += e1000_82575.c e1000_vf.c e1000_mbx.c |
Благодарим Andy52280 с форума nag.ru
Офис закрыт…
С новым годом!
Еще один сайт в Хотьково
Вот и МУП «Жилсервис-Хотьково» подтянулся.
Я прямо чувствую как Хотьково входит в информационный век. Новый тренд — размести сайт своей муниципальной организации.
p.s. ссылку в избранное, ибо имя запомнить не возвожмно.