Mac-Adresse ermitteln funktioniert unter Linux nicht mehr
Klaus1
- php
- programmiertechnik
- webserver
Hallo,
ich habe einen Webserver, der nur im internen Netz betrieben wird, von Windows auf Linux gewechselt.
Auf einer Seite prüfe ich die Erreichbarkeit eines Geräts (über Ping) und ermittle bei Erfolg auch gleich die Mac-Adresse.
Als erstes musste ich das Ping-Kommando ändern, da unter Windows ein
ping -n 1 $ipadresse
geändert werden musste in
ping -c 1 -w 3 $ipadresse
Das
arp -a $ipadresse
funktionierte zunächst auch direkt, bis ich festgestellt habe, dass das nur für Geräte funktioniert, die im selben IP-Netz liegen. Unter Windows funktionierte es auch für alle anderen (internen) Netze.
Warum aber unter Linux nicht?
Ok, dachte ich, ich ändere den Befehl auf
arping -c 1 -w 3 $ipadresse
aber der Befehl wird (vermutlich wegen fehlender Berechtigung?) nicht ausgeführt. Und das obwohl die Rechte für /usr/sbin/arping auf 755 stehen. Ich habe testweise das arping in ein Shell-Script gepackt und diesem 777 gegeben, das machte aber auch keinen Unterschied.
Auch ein (Keulen-)Eintrag in /etc/sudoers mit
wwwrun ALL=(ALL) ALL
(Laut ps -ef | grep apache läuft der Apache als wwwrun) Ist der Eintrag sofort gültig oder muss ich dafür einen Service neustarten?
Wie bekomme ich arping unter PHP ausgeführt?
LG Klaus
Soweit ich mich einnern kann, erfordern ping u.a. Kommandos des IP-Stack Rootrechte (grundsätzlich). MFG
Tach!
Soweit ich mich einnern kann, erfordern ping u.a. Kommandos des IP-Stack Rootrechte (grundsätzlich).
Grundsätzlich nicht. ping
und arp
kann man als Normalnutzer ausführen. Selbst ip
, ifconfig
, route
und netstat
kann man ausführen, zumindest Teile, die nur Informationen abfragen.
dedlfix.
Erst einmal: Ich habe gehörige Sicherheits-Bauchschmerzen, Dir Tipps zu geben, wie man ein System dazu bringt, nach Aufrufen via Webserver dieses oder jenes mit Root-Rechten auszuführen. Überlege Dir genau, ob das, was Du vor hast, wirklich zu Deinem derzeitigen Wissensstand passt.
arping -c 1 -w 3 $ipadresse
Wie bekomme ich arping unter PHP ausgeführt?
Unter Ubuntu läuft es mit dem Aufruf unter PHP offenbar fast ohne weiteres, wenn Du das Gerät mit angibst:
<?php
header ( "Content-Type: text/plain; charset=UTF-8" );
echo `arping -I enp7s0 -w1 -f 192.168.1.251`;
Ausgaben:
ARPING 192.168.1.251 from 192.168.1.2 enp7s0
Unicast reply from 192.168.1.251 [02:01:D3:81:50:A5] 1.083ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
Beachte: arping unterscheidet sich von Linux-Distribution zu Linux-Distribution zu BSD teils erheblich!
Auch ein (Keulen-)Eintrag in /etc/sudoers mit
wwwrun ALL=(ALL) ALL
... wenn es dennn benötigt wird, dann fehlte da ein NOPASSWD. oder wie willst Du ein Passwort eingeben?
Unter dem strengen Debian werden root-rechte benötigt:
<?php
header ( "Content-Type: text/plain; charset=UTF-8" );
echo `sudo /usr/sbin/arping -I eth0 -C1 -W1 192.168.1.251`;
Der Eintrag zugörige Eintrag in /etc/sudoers für Debian:
www-data ALL=NOPASSWD: /usr/sbin/arping
Falls Du die Adresse übergeben willst, dann denke bitte daran, diese mit escapeshellarg()
zu entschärfen. Das ist extrem wichtig, weil Du arping mit root-rechten startest.
<?php
header ( "Content-Type: text/plain; charset=UTF-8" );
$ip='192.168.1.251';
$device='eth0';
$system = 'sudo /usr/sbin/arping -C1 -W1 -I '
. escapeshellarg( $device )
. ' '
. escapeshellarg( $ip );
echo $system . PHP_EOL . PHP_EOL;
echo `$system`;
sudo /usr/sbin/arping -C1 -W1 -I 'eth0' '192.168.1.251'
ARPING 192.168.1.251
60 bytes from 02:01:d3:81:50:a5 (192.168.1.251): index=0 time=732.132 usec
--- 192.168.1.251 statistics ---
1 packets transmitted, 1 packets received, 0% unanswered (0 extra)
rtt min/avg/max/std-dev = 0.732/0.732/0.732/0.000 ms
Jetzt musst Du das Zeug noch an Dein Linux anpassen (Apache-User, Pfad zu arping, ggf. dessen Optionen.
Lieben Dank für die Erläuterungen.
Ich habe die Ursache dadurch finden können. Ich habe zwar korrekt den Eintrag in /etc/sudoers eingefügt, aber ich musste beim Aufruf auch noch ein "sudeo" vorneanstellen.
Jetzt funktioniert wieder alles.
Nochmals Danke!
LG Klaus