Биллинговая система Nodeny

Главная категория => Курилка => Тема начата: bnet от 29 Июня 2010, 19:23:34



Название: узнать список IP без указанного MAC
Отправлено: bnet от 29 Июня 2010, 19:23:34
Подскажите скрипт, что-бы посмотреть все IP (или имена, или логины, не важно) клиентов для которых не указаны МАС адреса в технических данных.
Спасибо!


Название: Re: узнать список IP без указанного MAC
Отправлено: Andrey Zentavr от 30 Июня 2010, 11:33:17
Код:
#!/usr/bin/perl

use DBI;

my %config = (
    # MySQL
    'mysql_host' => 'localhost',
    'mysql_user' => 'bill_kernel',
    'mysql_password' => 'hardpass',
    'mysql_database' => 'bill',
    # NoDeny MAC dopfield id
    'dopfield_id' => '4',
);

##
## MySQL init
##
$dbh = DBI->connect("dbi:mysql:dbname=".$config{'mysql_database'}.";host=".$config{'mysql_host'}, $config{'mysql_user'}, $config{'mysql_password'});

# Select All ip <-> Mac pair
$query="SELECT u.ip AS ip, d.field_value AS mac FROM users u, dopvalues d, (
                SELECT u.ip AS ip, MAX(d.revision) AS rev FROM users u, dopvalues d
                    WHERE u.id=d.parent_id AND d.dopfield_id=".$config{'dopfield_id'}."
                    GROUP BY ip
                ) AS tmp
            WHERE u.id=d.parent_id
            AND d.dopfield_id=".$config{'dopfield_id'}."
            AND u.ip=tmp.ip
            AND d.revision=tmp.rev
            AND TRIM(d.field_value) != ''";


($sth = $dbh->prepare($query)) or die $DBI::errstr;
($sth->execute) or die $DBI::errstr;

# Processing MySQL ip-mac pairs
while(($ip,$mac)=$sth->fetchrow){
    print "$ip -> $mac\n";
}

Вот примерно так выгребаются у меня пары ИП-Мак.
Я думаю что если в запросе поменять
Код:
AND TRIM(d.field_value) != ''

на
Код:
AND TRIM(d.field_value) = ''

то будет именно то что Вам надо.