Reactor 0 Опубликовано: 2007-08-10 18:59:54 Share Опубликовано: 2007-08-10 18:59:54 Значит так ситуация такая : Server 1 раздаёт пользователям инет база юзеров хранится в MySQL на этом же сервере. Server 2 на нём стоит фтп. Задача: Нужно парсить пользователей у которых баланс скажем -20 грн. дампил базу нехороших юзеров на server 2 и блочил пользователей по портам фаерволом. Наверняка кто-то что-то подобное уже делал у себя в сети. Сервера на Linux Думаю можно росматривать любые варианты многим это будет полезно. Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2007-08-11 12:38:48 Share Опубліковано: 2007-08-11 12:38:48 Стоит что-то подобное. юзеры - шлюз1 - шлюз2(биллинг) - инет. Со шлюза №2 каждые 11 минут шлется файл с привязкой мак адресов ) На шлюзе №1 каждые 15 минут эта привязка обновляется ) #!/usrl/bin/perl use DBD::mysql; use DBI(); use Time::Local; use Socket; $debug = 0; foreach $i ('192.168.0', '192.168.1', '192.168.2', '192.168.3', '192.168.4' ) { foreach $k (0..255) { undef @mama; @mama[0] = lc sprintf ('%X', 250);; foreach $o (0..5) { srand; $n = lc sprintf ('%X', int(rand 255)); @mama[$o] = $n; } $arps{"$i.$k"} = "@mama[0]:@mama[1]:@mama[2]:@mama[3]:@mama[4]:@mama[5]"; } } # Инициализация переменных UTM open (CONFIG, "/usr/local/netup/utm5/etc/utm5.cfg"); @config = <CONFIG>; close (CONFIG); foreach $line (@config) { if ($line =~ m/^([^#].+?)=(.*)$/) { $$1 = $2; }; }; # Подключение к БД if ($database_type eq "mysql") { $DBI_data="DBI:$database_type:database=$database;host=$database_host;mysql_socket=$database_sock_path;"; } elsif ($database_type eq "postgres") { $DBI_data="DBI:$database_type:dbname=$database"; } else { print "Unknown database $database_type! Stopped. \n"; exit (1); }; $dbh = DBI->connect("$DBI_data","$database_login","$database_password",{'RaiseError' => 1}); $query = "select u.login from users u, users_accounts ua, accounts a where u.id = ua.uid and ua.account_id = a.id and a.is_blocked = 0 and u.is_deleted = 0 and a.is_deleted = 0 and ua.is_deleted = 0;"; $sth = $dbh->prepare($query); $rv = $sth->execute(); while ($ref = $sth->fetchrow_hashref()) { $on{$ref->{'login'}} = 1; } $sth->finish(); $query = "select u.login login, inet_ntoa(ip.ip&0xffffffff) ip, ip.mac mac from ip_groups ip, service_links sl, iptraffic_service_links isl, users u where ip.ip_group_id = isl.ip_group_id and isl.id = sl.id and sl.user_id = u.id and sl.is_deleted = 0 and isl.is_deleted = 0 and ip.is_deleted = 0 and u.is_deleted = 0 and u.login in ( select u.login from users u, users_groups_link ug where u.id = ug.user_id and ug.group_id = 1001 and u.is_deleted = 0 );"; $sth = $dbh->prepare($query); $rv = $sth->execute(); while ($ref = $sth->fetchrow_hashref()) { if($on{$ref->{'login'}} > 0) { $arps{$ref->{'ip'}} = $ref->{'mac'}; } } $sth->finish(); # Disconnect from the database. $dbh->disconnect(); open ARP, '< /usr/local/system/etc/arp.table'; while($line = <ARP>) { #ip mac name chomp $line; next if ($line =~ /^[\s\t\#]+/); ($line) = (split /\#/, $line, 2)[0]; ($a, $ = split (/[\s\t]+/, $line) or next; $arps{$a} = $b; } close ARP; $empty = ''; $file = ''; $tmp_dir = '/tmp'; $file_name = "$$.$$.file"; $empty_name = "$$.$$.empty"; foreach $ip (sort keys %arps) { next if ($arps{$ip} =~ /no/i); if ($arps{$ip} ne '') { $file .= "$ip $arps{$ip} pub\n"; } } open TEMP, "> $tmp_dir/$file_name"; print TEMP $file; close TEMP; chdir $tmp_dir; `echo put $file_name ethers | /usr/bin/ftp ftp://[b]юзер:пасс\@1.1.1.1(шлюз1)[/b]/`; unlink "$tmp_dir/$file_name"; Думаю, переделать под себя будет нетрудно ) Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас