Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam,
Mam taki problem ktorego niestety po wielogodzinnym googlaniu nie potrafie rozwiazac. Mianowicie napisalem skrypt w php do odczytywania mac`adresow kart sieciowych uzytkownikow sieci. Wyglada on nastepujaco
function getmac(){ $ip = $_SERVER['REMOTE_ADDR']; exec('ping '.$ip.' -c 1'); exec('sleep 2s'); exec('/usr/sbin/arp -na '.$ip , $answer); eregi('([0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2})',$answer[0],$result); $mac = $result[0]; return $mac; }
jednak niestety adres mac nie jest wogole odczytywany. zgodnie z informacjami wyczytanymi w necie wylaczylem w php.ini safe_mode oraz dodalem w /etc/sudoers linie
www-data ALL=NOPASSWD:/usr/sbin/arp
jako ze apache2 startuje jako uzytkownik www-data.
skrypt zostal wpisany do grupy www-data.
Jednak wszystkie te zabiegi nie przyniosły efektu, a mnie pomysły juz sie skonczyły.
Dodam rowniez ze skrypt ten jest wykonywany na serwerze Debian 6.0 2.6.33-grsec z bardzo rozbudowanym firewallem w iptables.
Niewiem juz sam czy to problem z komunikacja(firewall blokuje), czy z wykonywaniem przez uzytkownika apache.
Prosze o rady.
Ostatnio edytowany przez quartist (2011-09-12 23:11:06)
Offline
wydaje mi się że to
exec('/usr/sbin/arp -na '.$ip , $answer);
powinno wyglądać tak
exec('sudo /usr/sbin/arp -na '.$ip , $answer);
skoro używasz sudo. Poza tym nie liczyłbym na to, że uzyskać mac usera ;)
Offline
[url=http://packages.debian.org/squeeze/arpwatch]arpwatch[/url] jest od tego, gotowy, i za każdym razem, kiedy zobaczy nowe urządzenie, wysyła maila z zawiadomieniem.
Jest też trochę skryptów dodo obsługi arpwatcha przez www, np ten:
http://www.hackerskitchen.com/bill/arpview/
Poza tym pozwolenie na exec i sudo z poziomu serwera www, w dodatku z poziomu php, to strzał w stopę, takie rzeczy raczej robi się w skryptach cgi, bo moduł php do apacha to trochę nie ta liga.
Ostatnio edytowany przez Jacekalex (2011-09-12 10:41:13)
Offline
<?php $mac = system('arp -an | awk \'{print $4}\''); echo $mac; ?>
Tylko pobiera mi podwójnie i na razie nie czaję dlaczego
Serwer:Lighttpd
Zainstalowane php5-cgi
uruchomione moduły fastcgi i fastcgi-php
W sumie to musisz jeszcze dodać jedną zmienną z ping do hosta
<?php //$mac = system('arp -an | awk \'{print $4}\''); $ip = $_SERVER[REMOTE_ADDR]; $ping = system('ping -c5 $ip'); echo "$ip <br />"; $mac = system('arp -an $ip | cut -d \' \' -f4 '); echo $mac; ?>
Ale pobieranie adresów MAC ma zastosowanie tylko w sieci lokalnej
Ostatnio edytowany przez hello_world (2011-09-12 10:29:31)
Offline
Uzywam arpwatch(aby widziec kto mi sie podłącza do sieci) maile od niego z macami dostaje i jest bardzo dobrze. Funkcja ktora Wam przedstawilem to wycinek panelu administracyjnego ktory pobiera ten mac od uzytkownika i potem wypycha do bazy msql wraz z innymi danymi.
Opcja z dodaniem 'sudo' nie przynosi zadnych efektow niestety.
Co do kodu:
<?php //$mac = system('arp -an | awk \'{print $4}\''); $ip = $_SERVER[REMOTE_ADDR]; $ping = system('ping -c5 $ip'); echo "$ip <br />"; $mac = system('arp -an $ip | cut -d \' \' -f4 '); echo $mac; ?>
efekt po wykonaniu jest taki ze pokazuje tylko adres ip. nic pozatym.
Ostatnio edytowany przez ArnVaker (2011-09-12 13:19:17)
Offline
Problem rozwiazany. Problem lezal w php.ini (/etc/php5/apache2/php.ini)
W pliku tym była linia:
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Nalezalo (w moim wypadku) usunac wpis "exac";
Wszystko zaczelo pieknie smigac.
Dziekuje wszystkim userom za pomoc oraz porady.
ZAMYKAM
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00103 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.137.219.68' WHERE u.id=1 |
0.00068 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.219.68', 1732613809) |
0.00044 | SELECT * FROM punbb_online WHERE logged<1732613509 |
0.00056 | DELETE FROM punbb_online WHERE ident='13.58.207.196' |
0.00069 | DELETE FROM punbb_online WHERE ident='3.145.75.238' |
0.00074 | DELETE FROM punbb_online WHERE ident='3.147.71.175' |
0.00090 | SELECT topic_id FROM punbb_posts WHERE id=181116 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=19685 ORDER BY posted |
0.00061 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=19685 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00102 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=19685 ORDER BY p.id LIMIT 0,25 |
0.00071 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=19685 |
Total query time: 0.00766 s |