PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: по arp таблице ОС
EuGen Администратор
Отправлено: 07 Марта, 2008 - 18:49:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выделено в отдельную тему из темы "Функция работы с MAC - адресом"
Такой функции в PHP нет.
Но если велика охота, можно сделать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $ip=getenv("REMOTE_ADDR");
  4. $matches=array();
  5. if (PHP_OS=='WINNT')
  6. {
  7.    exec("arp -a", $rgResult);
  8.    $mac_template="/[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}/i";
  9.    foreach($rgResult as $key=>$value)
  10.    {
  11.       if (strpos($value, $ip)!==FALSE)
  12.       {
  13.          preg_match($mac_template, $value, $matches);
  14.          break;
  15.       }
  16.    };
  17. }
  18. else
  19. {
  20.    exec("arp -a | grep $ip", $rgResult);
  21.    $mac_template="/[\d|A-F]{2}\:[\d|A-F]{2}\:[\d|A-F]{2}\:[\d|A-F]{2}\:[\d|A-F]{2}\:[\d|A-F]{2}/i";
  22.    preg_match($mac_template, $rgResult[0], $matches);
  23. }
  24. $mac=$matches[0];// собственно, Ваш MAC-адрес.
  25. ?>
  26.  

Сработает, только если пользователь не работает через прокси (иначе это будет MAC-адрес последнего хоста на пути следования tcp-пакета). Так же возможны "глюки", если пользователь делает первое обращение к серверу (ибо в этом случае у сервера для его машины еще нет записи в arp таблице).
P.S. Скрипт написан мной "на коленке", проверялся только в Win32, поэтому не претендует на полную правильность.

(Отредактировано автором: 07 Марта, 2008 - 19:08:39)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SLITE
Отправлено: 12 Сентября, 2009 - 20:04:30
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




чёто неработает
 
 Top
EuGen Администратор
Отправлено: 13 Сентября, 2009 - 15:39:59
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Да?
Что именно, функция тестировалась.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ch_chov
Отправлено: 13 Сентября, 2009 - 17:36:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Тоже не работает.

Цитата:
if (strpos($value, $ip)!==FALSE)
Это условие не срабатывает ни разу, так как ни один из интерфейсов не имеет IP, который даёт
getenv("REMOTE_ADDR") – 127.0.0.1

(Отредактировано автором: 13 Сентября, 2009 - 17:56:22)

 
 Top
EuGen Администратор
Отправлено: 13 Сентября, 2009 - 23:27:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Неужто. А с чего Вы взяли, что getenv('REMOTE_ADDR') вернет адрес loopback-интерфейса?
Если имеется ввиду определение собственного адреса, то есть Вы запускаете функцию для локального адреса (например, у Вас веб-сервер слушает 127.0.0.1 и Вы запускаете скрипт на машине веб-сервера), то это неудивительно.
Функция предназначена для определения mac-адреса клиента, который запустил скрипт в локальной сети.
Можете дописать для случая локального адреса - то есть если getenv('REMOTE_ADDR') возвращает реально свой IP-адрес, то пользоваться не arp-таблицей, а ifconfig для unix или ipconfig для windows.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ch_chov
Отправлено: 14 Сентября, 2009 - 09:25:00
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Цитата:
Функция предназначена для определения mac-адреса клиента, который запустил скрипт в локальной сети.

Надо было сразу уточнить. mac адреса клиентов из сети определяются нормально.


З.Ы. Для определения локального mac адреса в windows удобней пользовать getmac
 
 Top
EuGen Администратор
Отправлено: 14 Сентября, 2009 - 11:04:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ch_chov пишет:
Надо было сразу уточнить.

А какой смысл определять свой собственный?

А getmac, насколько я помню, не показывает привязки к IP-адресу, что, в случае нескольких сетевых интерфейсов, делает невозможным решение задачи определения mac-адреса по IP.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ch_chov
Отправлено: 14 Сентября, 2009 - 11:41:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Цитата:
А какой смысл определять свой собственный?

Это уже другой вопрос. Может кому то понадобится собрать сведения о своей системе или еще что то.
 
 Top
Uchkuma
Отправлено: 07 Июля, 2010 - 09:07:32
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




В чем может быть дело, если массив $rgResult пуст? В случае, если система не WINNT.
 
 Top
EuGen Администратор
Отправлено: 09 Июля, 2010 - 11:22:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выполните на своей машине arp -a и посмотрите, в каком формате система отдает таблицу. (хотя маловероятно, что в другом)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Uchkuma
Отправлено: 09 Июля, 2010 - 12:49:01
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




С форматом все в порядке. Отсутствует нужный IP в таблице.
 
 Top
EuGen Администратор
Отправлено: 13 Июля, 2010 - 11:49:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если отсутствует, значит, не делался никакой запрос на определение mac-адреса нужной машины.
Если эта машина вызывала скрипт, то это возможно только в случае, если она находится в другом сегменте сети (за сетевым устройством 2-го уровня и выше)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB