U. Nix: Mac-Adresse ermitteln funktioniert unter Linux nicht mehr

Beitrag lesen

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.