/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Finde MAC adresse via PHP
Fra : Henrik Stidsen


Dato : 27-06-04 16:51

Er det muligt, fra en http server på et LAN via PHP, at finde MAC
adressen på den klienten ? evt. med nogle kald til systemet ? (gerne
generelle *nix systemkald).

--
Henrik Stidsen - http://såkadulæredet.dk/
"The only true currency in this bankrupt world is what you
share with someone else when you´re uncool"
- Lester Bangs, Almost Famous

 
 
Bent Stigsen (27-06-2004)
Kommentar
Fra : Bent Stigsen


Dato : 27-06-04 20:36

Henrik Stidsen wrote:

> Er det muligt, fra en http server på et LAN via PHP, at finde MAC
> adressen på den klienten ? evt. med nogle kald til systemet ? (gerne
> generelle *nix systemkald).

Selvfølgelig ;)

Prøv med...:

<?php
if (isset($_GET['ip'])) {
echo 'IP ='.$_GET['ip'].'<br>';
echo 'MAC='.getMACFromIP($_GET['ip']);
} else {
echo 'IP ='.$_SERVER["REMOTE_ADDR"].'<br>';
echo 'MAC='.getMACFromIP($_SERVER["REMOTE_ADDR"]);
}

function getMACFromIP($ip) {
$res=0;
$rc=0;
$mac = 'N/A';
$exe_str = "ping -W 1 -c 1 $ip > /dev/null"
. " && arp -n -a $ip"
. " | sed 's/\\(.*\\) at \\(.*\\) \[eth\\(.*\\)/\\2/1'";
exec($exe_str, $res, $rc);
if ($rc==0) {
if (is_array($res)) {
$mac = $res[0];
}
}
return $mac;
}
?>

Det er lavet på min Linux. Hvis du kører anden unix-variant, så check
parametre på ping og arp, samt shell-syntax. Det er formodentlig anderledes.

Den med ping er kun til, hvis du vil forespørge på en anden maskine på
netværket, som eventuelt ikke er kendt af webserveren endnu. Det kan du
droppe hvis du ikke har brug for det.

Brug af sed er ren dovenskab. Du kan også bare fyre "arp -n -a $ip", og
så selv klippe mac-adressen ud.

/Bent


Jimmy (27-06-2004)
Kommentar
Fra : Jimmy


Dato : 27-06-04 21:02


"Bent Stigsen" <ngap@thevoid.dk> wrote in message
news:40df21a1$0$268$edfadb0f@dread14.news.tele.dk...
> Henrik Stidsen wrote:
>
> > Er det muligt, fra en http server på et LAN via PHP, at finde MAC
> > adressen på den klienten ? evt. med nogle kald til systemet ? (gerne
> > generelle *nix systemkald).
>
> Selvfølgelig ;)
>
> Prøv med...:

Nice - Virkeligt nice!

Mvh
Jimmy



Henrik Stidsen (27-06-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 27-06-04 23:00

Bent Stigsen <ngap@thevoid.dk> wrote in
news:40df21a1$0$268$edfadb0f@dread14.news.tele.dk

> Det er lavet på min Linux. Hvis du kører anden unix-variant, så
> check parametre på ping og arp, samt shell-syntax. Det er
> formodentlig anderledes.

Det må jeg lige undersøge, den fejler i hvert fald (MAC = N/A) - det
kan vel være pga. noget safemode ?

> Den med ping er kun til, hvis du vil forespørge på en anden
> maskine på netværket, som eventuelt ikke er kendt af webserveren
> endnu. Det kan du droppe hvis du ikke har brug for det.

Burde ARP tabellen ikke blive "udfyldt" idet webserveren bliver
kontaktet af klienten ?
--
Henrik Stidsen - http://såkadulæredet.dk/
"The only true currency in this bankrupt world is what you
share with someone else when you´re uncool"
- Lester Bangs, Almost Famous

Peter Brodersen (27-06-2004)
Kommentar
Fra : Peter Brodersen


Dato : 27-06-04 23:44

On 27 Jun 2004 21:59:50 GMT, Henrik Stidsen <nospamforme@hs235.dk>
wrote:

>Det må jeg lige undersøge, den fejler i hvert fald (MAC = N/A) - det
>kan vel være pga. noget safemode ?

Ja, hvis ikke ping, m.m. fx er symlinket fra et safe_mode_exec_dir.
Men du burde dog få en warning omkring at du prøver at afvikle et
program.

Kører du i safe mode?
<?php
print ini_get('safe_mode');
?>

>> Den med ping er kun til, hvis du vil forespørge på en anden
>> maskine på netværket, som eventuelt ikke er kendt af webserveren
>> endnu. Det kan du droppe hvis du ikke har brug for det.
>Burde ARP tabellen ikke blive "udfyldt" idet webserveren bliver
>kontaktet af klienten ?

Jo, og som Bent nævner, er det kun til, hvis du vil forespørge på en
anden maskine på netværket.

De to maskiner sidder på samme subnet, ikke sandt?

--
- Peter Brodersen

Ugens sprogtip: underholdsbidrag (og ikke underholdningsbidrag)

Henrik Stidsen (28-06-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 28-06-04 01:42

Peter Brodersen <usenet@ter.dk> wrote in
news:cbnik1$8t$1@katie.ellegaard.dk

>>Det må jeg lige undersøge, den fejler i hvert fald (MAC = N/A) -
>>det kan vel være pga. noget safemode ?
>
> Ja, hvis ikke ping, m.m. fx er symlinket fra et
> safe_mode_exec_dir. Men du burde dog få en warning omkring at du
> prøver at afvikle et program.

Det undrer også mig at jeg ikke får det, har prøvet med flere
forskellige kommandoer, hvorken exec, system, backticks mv. giver
advarsler hverken på min windows maskine eller på linux serveren.
Begge returnerer 1 på nedenstående (=true)

> Kører du i safe mode?
> <?php
> print ini_get('safe_mode');
> ?>

> De to maskiner sidder på samme subnet, ikke sandt?

Jo, det er et 172.16.x.x LAN

--
Henrik Stidsen - http://såkadulæredet.dk/
"The only true currency in this bankrupt world is what you
share with someone else when you´re uncool"
- Lester Bangs, Almost Famous

Peter Brodersen (28-06-2004)
Kommentar
Fra : Peter Brodersen


Dato : 28-06-04 04:51

On 28 Jun 2004 00:41:39 GMT, Henrik Stidsen <nospamforme@hs235.dk>
wrote:

>Det undrer også mig at jeg ikke får det, har prøvet med flere
>forskellige kommandoer, hvorken exec, system, backticks mv. giver
>advarsler hverken på min windows maskine eller på linux serveren.

Hm... lav error reporting?

Du kan jo prøve med:
error_reporting(E_ALL);

Jeg ved i øvrigt ikke, hvor godt PHP styrer at man fyrer flere
kommandoer af (med | && ; og så videre). Måske nægter den ganske
enkelt, fordi den ved, at den ikke er kapabel til at kunne gennemskue
hvilke kommandoer, der rent faktisk køres. Men dette er blot et vildt
gæt.

Prøv at begrænse kommandoen til bare "arp -n -a $ip" - altså uden også
at køre ping, sed og lignende.

>> De to maskiner sidder på samme subnet, ikke sandt?
>Jo, det er et 172.16.x.x LAN

Hep - igen, forudsat at det tillige er samme subnet, og de ikke bare
sidder på segmenterede dele af 172.16.x.x med en router imellem - idet
MAC-adresser ikke bevæger sig over subnets.

--
- Peter Brodersen

Ugens sprogtip: underholdsbidrag (og ikke underholdningsbidrag)

Henrik Stidsen (28-06-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 28-06-04 12:24

Peter Brodersen <usenet@ter.dk> wrote in
news:cbo4k6$4o0$1@katie.ellegaard.dk

> error_reporting(E_ALL);

Det har den allerede, i hvert fald på windows maskinen.

> Prøv at begrænse kommandoen til bare "arp -n -a $ip" - altså
> uden også at køre ping, sed og lignende.

Ved kun at køre arp -a $ip og ved at slå safemode off på windows
maskinen virkede det. Jeg kan desværre ikke lige umidelbart gøre det
samme på linux serveren :/

> Hep - igen, forudsat at det tillige er samme subnet, og de ikke
> bare sidder på segmenterede dele af 172.16.x.x med en router
> imellem - idet MAC-adresser ikke bevæger sig over subnets.

Det skulle gerne være uden routere - jeg får broadcasts fra alle dele
af netværket, både ARP og Netbios NS, DHCP discover osv. ind på mit
netkort - og det burde jeg vel ikke få hvis der var en router imellem
?

--
Henrik Stidsen - http://såkadulæredet.dk/
"The only true currency in this bankrupt world is what you
share with someone else when you´re uncool"
- Lester Bangs, Almost Famous

Bent Stigsen (28-06-2004)
Kommentar
Fra : Bent Stigsen


Dato : 28-06-04 13:42

Henrik Stidsen wrote:

> Ved kun at køre arp -a $ip og ved at slå safemode off på windows
> maskinen virkede det. Jeg kan desværre ikke lige umidelbart gøre det
> samme på linux serveren :/

Kan være der er alternativer. På linux-boxen prøv med...
<?php
$fp = fopen('/proc/net/arp', 'rb');
fpassthru($fp);
?>

Får du noget ud af det, eller laver safemode også knuder i det?

Hvis du ikke kan det, er der nok ikke andet for at du må fedte lidt for
dem som drifter linux'en, og få dem til at lægge et shell-script et
eller andet sted, som php har tilladelse til at køre.

/Bent

Henrik Stidsen (28-06-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 28-06-04 14:00

Bent Stigsen <ngap@thevoid.dk> wrote in
news:40e0120e$0$281$edfadb0f@dread14.news.tele.dk

> Kan være der er alternativer. På linux-boxen prøv med...
> <?php
> $fp = fopen('/proc/net/arp', 'rb');
> fpassthru($fp);
> ?>
>
> Får du noget ud af det, eller laver safemode også knuder i det?

Warning: SAFE MODE Restriction in effect. The script whose uid is
1005 is not allowed to access /proc/net/arp owned by uid 0 in
/home/hs/public_html/mac.php on line 7

Warning: fopen("/proc/net/arp", "rb") - Inappropriate ioctl for
device in /home/hs/public_html/mac.php on line 7

Warning: Supplied argument is not a valid File-Handle resource in
/home/hs/public_html/mac.php on line 8

> Hvis du ikke kan det, er der nok ikke andet for at du må fedte
> lidt for dem som drifter linux'en, og få dem til at lægge et
> shell-script et eller andet sted, som php har tilladelse til at
> køre.

Det skulle nok kunne lade sig gøre - indtil videre er det mest på et
"kan det lade sig gøre det her" plan og serveren det i så fald skal
køre på kommer formentlig slet ikke til at køre i safemode.

Men det ville jo, som altid, være lækkert hvis det kunne køre i
safemode.

--
Henrik Stidsen - http://såkadulæredet.dk/
"The only true currency in this bankrupt world is what you
share with someone else when you´re uncool"
- Lester Bangs, Almost Famous

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste