Перейти к содержимому
Калькуляторы

_djbdb

Пользователи
  • Публикации

    6
  • Зарегистрирован

  • Посещение

О _djbdb

  • Звание
    Абитуриент
    Абитуриент
  • День рождения 08/25/1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Город

  • Город
    Array
  1. а в чем проблема?.. yе помню точно, но если уж 4 года назад и не было iptables был ipchanes.. ipfw/fw.. вариаций много..суть первого вопроса: пробросить с одного интерфейса+сорцовых ип на другой интерфейс+дест ип.. т.е. фактически любой фаервол под nix справится с данной задачей.. по второму вопросу - если ип внешний один - то врядли.. разве что load balancing хотите сделать..
  2. но как верно было подмечено, нагрузка на сам сервер может и снижается, за счет распределенного скачивания (немного сервер, немного юзеры).. но нагрузка на сеть - возростает..
  3. можно, но в моем случае именно так, ибо есть еще один скрипт - который строит статическую арп таблиЦу, и блокирует левые связки IP+MAC.. а если мне не изменяет память, то arpwatch использует libpcap, переводящий интерфейс в промискмод, тем самым позволяя сниферить пролетающие мимо (не адресованные серверу) пакеты, что, опять же - в моем случае, очень даже удобно ;)
  4. наверное немного не по теме - но: какая конфигураЦия сервера (железки).. что используется в качестве трекера? чем раздаете? система на сервере? кол-во юзеров? что пользуете в качестве бэкенда?
  5. согласен.. в свое время, когда стояла такая задача (да и сейчас в принЦипе тоже иногда пользуюсь) использовал арпвотч и перловый скрипт, распихивающий в БД #!/usr/bin/perl use DBI; use Mail::POP3Client; $dbh = DBI->connect('dbi:Pg:dbname=arp;host=127.0.0.1', 'user', 'passwd', {PrintError=>1, RaiseError=>1}); $pop = new Mail::POP3Client( USER => "arpwatch", PASSWORD => "arpwatch", HOST => "127.0.0.1" ) || die "error"; for( $kk = 1; $kk <= $pop->Count(); $kk++ ) { $body = $pop->Body($kk); $body =~ s/\s/ /g; if ($body =~ /ip address: (\d+\.\d+\.\d+\.\d+).+ethernet address: (\w+:\w+:\w+:\w+:\w+:\w+)/) { $sql = "SELECT user_id, user_mac FROM pron_users WHERE state<>0 AND user_ip='$1'"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } ($user_id, $user_mac) = $sth->fetchrow_array(); if (defined($user_id)) { if (!defined($user_mac) || $user_mac eq '') { $sql = "UPDATE pron_users SET user_mac='$2' WHERE user_id=$user_id"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } } else { $sql = "SELECT user_id FROM pron_users WHERE state<>0 AND user_mac='$2'"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } ($user_id) = $sth->fetchrow_array(); if (!defined($userid)) { print "mac changed. ip: $1, mac: $2\n"; } } } } $pop->Delete($kk); } $pop->Close; смысл заключается в том, что арпвотч шлёт письма на указанный в его конфиге ящик, после чего скрипт проверяет данный ящик, парсит письма и выполняет определенные деиствия..
  6. у Perl есть модуль для работы с SNMP http://search.cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/SNMP.pm тут можно почитать подробнее, если интересно.. установить модуль можно так (в командной строке с правами рута) >perl -MCPAN -e shell >install Net::SNMP >quit а вот пример использования данного модуля под Вашу цель #! /usr/bin/perl use strict; use Net::SNMP; my ($session, $error) = Net::SNMP->session( -hostname => shift || '172.16.1.12', -community => shift || 'public', -port => shift || 161 ); if (!defined($session)) { printf("ERROR: %s.\n", $error); exit 1; } my $sysTrafIn = '1.3.6.1.4.1.9.2.2.1.1.6.4'; my $result = $session->get_request( -varbindlist => [$sysTrafIn] ); if (!defined($result)) { printf("ERROR: %s.\n", $session->error); $session->close; exit 1; } printf("Link_InComing_Traffic for host '%s' is %s\n", $session->hostname, $result->{$sysTrafIn} ); $session->close; exit 0; примерно так.. :)