Биллинговая система Nodeny
23 Ноября 2024, 01:10:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3 ... 5
  Печать  
Автор Тема: Модуль получения МАС-адреса (OLD: получение МАС адреса)  (Прочитано 33948 раз)
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« : 02 Ноября 2009, 20:03:43 »

есть предложение зделать кнопочку гденибуть (в тех данных) получить мак адрес, а то заводиш юзера либо просто сетевушку меняеш, и тут на тебе нада конектится по ссх чтобы мак снять.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 02 Ноября 2009, 22:49:30 »

есть предложение зделать кнопочку гденибуть (в тех данных) получить мак адрес, а то заводиш юзера либо просто сетевушку меняеш, и тут на тебе нада конектится по ссх чтобы мак снять.
с арп таблицы роутера мак выуживать? а если комп клиента выключен?
Записан
Cell
Модератор
Спец
*****

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #2 : 03 Ноября 2009, 07:54:00 »

есть предложение зделать кнопочку гденибуть (в тех данных) получить мак адрес, а то заводиш юзера либо просто сетевушку меняеш, и тут на тебе нада конектится по ссх чтобы мак снять.
В эзернет сергменте просто
ping ip
arp -a ip
Если клиент за роутером то вариантов других нет. Если непосредственно на клиенте то ipconfig /all
Делов то )
Записан
blackjack
NoDeny
Старожил
*

Карма: 24
Offline Offline

Сообщений: 352


Просмотр профиля Email
« Ответ #3 : 03 Ноября 2009, 14:03:56 »

Что значит никаких, нипример у нас юзеры маршрутизируются циской, на циске настроили rsh и через rsh можно получить любые данные с циски, например так
Код:
rsh -l <login> <cisco_ip> sh arp
дальше разбираем вывод

если роутер не циско, а например unix like system то можно используя авторизацию по ключам черех ssh забирать данные, например так
Код:
ssh <login>@<unix_ip> arp -an | grep <required_ip>

вот так, нет неразрешаемых проблем, есть неприятные решения.
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #4 : 03 Ноября 2009, 19:48:28 »


с арп таблицы роутера мак выуживать? а если комп клиента выключен?
[/quote]

мак берется в 2 случаях
1) заводим абонента(пишем ip руками в сетевушке, заходим на сервер и заводим юзера )
2) смена сетевушки

в обеих случаях в арп таблице мак присудствует, так как обращение с серваком идет.
покаместь мак юзается только для ДХЦП.
Думаю для многих будет нужная вещь
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #5 : 10 Ноября 2009, 09:04:15 »

Я занимаюсь этим модулем сейчас. Будет скоро в паблике. Вот, сразу после модуля "всегда онлайн"

Тему можно переобозвать : Модуль получения МАС-адреса.
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #6 : 10 Ноября 2009, 10:54:44 »

ждемссс...с нетерпением ))
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #7 : 12 Ноября 2009, 08:49:47 »

есть предложение зделать кнопочку гденибуть (в тех данных) получить мак адрес, а то заводиш юзера либо просто сетевушку меняеш, и тут на тебе нада конектится по ссх чтобы мак снять.
Я думаю, кнопочку в тех-данных писать не совсем как бы правильно, ибо прир апдейте версии писать её туда прийдётся ещё раз.. и ещё раз..
Правильнее будет это реализовать модулем клиентской статистики, доступным только администраторам (т.е. когда попадаешь в статистику из профиля пользователя в админке).

Выглядеть это будет как-то так:


При нажатие на кнопку "Пинговать" будет что-то происходить  Непонимающий (на старой системе у меня PHP скрипт обращался к Пёрл-скрипту, который висел на сокете и занимался арпингом.) Как сделать сейчас - не знаю.
Так как
Цитировать
$ arping -i em2 10.1.32.194
arping: must run as root
то можно, конечно, чделать всё это через ССШ на сертификатах. Но по идейным соображениям у меня вход рута по ССШ везде отключен (вру, не везде. Есть сервер в далёкой галактике с рутом из-под ссш).
Так вот, предварительно это будет примерно так:
1) на сервере (серверах), который смотрит на юзеров, запущен некий скрипт, который слушает TCP/12345
2) Фаером говорим ОСи, что на этот порт ходить только биллинг.
3) В модуле жмакаем "Пинговать", шлём запрос на сервер WWW который соответвтенно обращается на юзерский сервак за скриптом.
4) Выводим в форме (где у меня написано "Тут ещё ничего нет...." выхлоп арпинга (например 10 пингов на ИП))

Раньше сокет слушал примерно такой срипт:
Цитировать
#!/usr/bin/perl -w

%cards =(
    "30" => "em0",
    "31" => "em1",
    "32" => "em2",
    "33" => "em3",
    "34" => "em4"
);
      

$count=5;
$arping="/usr/local/sbin/arping";
$pidfile="/var/run/arping_serv.pid";

open PID, ">$pidfile" or $err=$!;
if ($err==0) {
    print PID $$;
    close PID;
}

use IO::Socket;
# Создаём сокет
my $sock = new IO::Socket::INET (
                LocalAddr => '10.1.10.3',
                LocalPort => '14120',
                Proto => 'tcp',
                Listen => 1               
            ) or die "Can't bind : $@\n";

# Открываем Listen-сокет
$sock->listen();
my $new_sock;
#my $pid;
# принимаем коннекты
while($new_sock = $sock->accept()) {
   
    print    "Connected from: ", $new_sock->peerhost();   # Display messages
    print   " Port: ", $new_sock->peerport(), "\n";
    # Обрабатываем соединение
    #$pid=fork();
    #unless($pid){
   while(<$new_sock>){   
       chomp($_);
       if(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/) {
      ($first, $second, $net) = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.[0-9]{1,3}/;
      #print "We get IP! => $_\n";
      #print "We get net: $first, $second, $net, $last\n";
      #print $new_sock "We get IP! => $_\nWe get net: $net\n";
      $ip = $_;
      if($first eq 10 ){
          if($second eq 1 or $second eq 2){
         if(exists($cards{$net})) {
             # Арпинг с карты em1
             #print $new_sock "$arping -i$card2x -c$count $ip\n";            
             foreach(`$arping -i$cards{$net} -c$count $ip`){
            #print "$_\n";
            if(/\w+ bytes from \w+:\w+:\w+:\w+:\w+:\w+ .+/){
            ($mac) = /\w+ bytes from (\w+:\w+:\w+:\w+:\w+:\w+) .+/;
            print $new_sock "$mac\n";
            }
             }
         } else {
             print $new_sock "Wrong Net $net";
         }
          } else {
         print $new_sock "Wrong Subnet $second!";
          }
      } else {
          print $new_sock "Wrong network $first!";
      }
       } else {
      print "Garbage: $_\n";
       }
       #sleep(200);
       $new_sock->shutdown(2);
   }
    #exit();
    #}
    #waitpid($pid, 0);
    #undef $pid;
    print("Connection closed.\n");
}

close($sock);
Хотелось бы с форками разобраться и чтоб он обрабатывал несколько соединений сразу. ..До этого руки так и не дошли.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #8 : 12 Ноября 2009, 23:15:01 »

Лучше не форкать, а реализовать многопоточную обработку с помощью IO::Select
http://search.cpan.org/~gbarr/IO-1.25/lib/IO/Select.pm

Код:
use IO::Select;
    use IO::Socket;

    $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
    $sel = new IO::Select( $lsn );

    while(@ready = $sel->can_read) {
        foreach $fh (@ready) {
            if($fh == $lsn) {
                # Create a new socket
                $new = $lsn->accept;
                $sel->add($new);
            }
            else {
                # Process socket

                # Maybe we have finished with the socket
                $sel->remove($fh);
                $fh->close;
            }
        }
    }
Записан
VitalVas
NoDeny
Спец
*

Карма: 60
Offline Offline

Сообщений: 991



Просмотр профиля WWW
« Ответ #9 : 13 Ноября 2009, 18:26:04 »

ну что, кто то уже тестил??
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #10 : 13 Ноября 2009, 21:12:47 »

а что тестить? они тока советуются и решают что и как
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #11 : 17 Ноября 2009, 19:58:57 »

ну как там разработки уже есть?
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #12 : 17 Ноября 2009, 21:58:27 »

ну как там разработки уже есть?
Сегодня написан и тестируется серверный компонент получения МАС-адреса (переписан тот, что был выложен пару постов выше). Теперь можно одновременно к нему образаться (до этого - только один оператор в единицу времени).
Завтра будет скорее всего закончен серверный компонент обновления мак-адреса на сервере (рядом с кнопкой пинговать будет кнопка "Обновить на сервере").
Ну, а потом будем заканчивать веб-интерфейс для оператора.

ЗЫ: я вообще-то не программист, я больше сисадмин. А всё остальное - хобби + универовское прошлое Улыбающийся
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #13 : 18 Ноября 2009, 01:05:19 »

это хорошо, помню твои спасающие посты еще с "локала" по поводу старгейзера ))
Записан
Cell
Модератор
Спец
*****

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #14 : 19 Ноября 2009, 01:24:52 »

это хорошо, помню твои спасающие посты еще с "локала" по поводу старгейзера ))
Бог мой, да тут я смотрю нас много )
Записан
Страниц: [1] 2 3 ... 5
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!