Bağlantı istemcilerinin MAC ve IP adresini bilmem gerekiyor, bunu PHP'de nasıl yapabilirim?
Bağlantı istemcilerinin MAC ve IP adresini bilmem gerekiyor, bunu PHP'de nasıl yapabilirim?
Yanıtlar:
Sunucunun IP adresini adresinden alabilirsiniz $_SERVER['SERVER_ADDR']
.
MAC adresi için, çıktısını netstat -ie
Linux veya ipconfig /all
Windows'ta ayrıştırabilirsiniz .
İstemci IP'sini şu adresten alabilirsiniz: $_SERVER['REMOTE_ADDR']
İstemci MAC adresi, özel durumlar dışında kullanılamayacaktır: istemci, sunucuyla aynı ethernet segmentindeyse.
Eğer LAN tabanlı sistemin bazı türlü bina ve müşterilerinizin Yani, eğer olan aynı ethernet segmenti üzerinde, o zaman çıktısını ayrıştırma ile MAC adresini alabilir arp -n
(linux) veya arp -a
(pencere).
Düzenleme : yorumlarda harici bir komutun çıktısını nasıl alacağınızı sorarsınız - bir yol, geri tıklamaları kullanmaktır, örn.
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);
#look for the output line describing our IP address
foreach($lines as $line)
{
$cols=preg_split('/\s+/', trim($line));
if ($cols[0]==$ipAddress)
{
$macAddr=$cols[1];
}
}
Müşterinin bu bilgiyi gönüllü yapmasını ve başka yollarla iletmesini sağlayamadığınız sürece şansınız kalmaz.
İstemcinin MAC adresinin (HTTP isteğini veren bilgisayar anlamında) istemci ve sunucu arasındaki her yönlendirici tarafından yazılır.
İstemci IP'si, komut dosyasına uygun şekilde sağlanır $_SERVER['REMOTE_ADDR']
. Bazı senaryolarda, web sunucusu bir proxy (yani önbelleğe alma vekil) arkasında özellikle $_SERVER['REMOTE ADDR']
IP'sini dönecektir vekil ve genellikle ekstra bir değer, olacak $_SERVER['HTTP_X_FORWARDED_FOR']
orijinal istek müşterinin IP içerir.
Bazen, özellikle kontrol etmediğiniz anonimleştirici bir proxy ile uğraşırken, proxy gerçek IP adresini döndürmez ve umabileceğiniz tek şey proxy'nin IP adresidir.
Ben PHP MAC adresi alabilirsiniz sanmıyorum, ama $_SERVER['REMOTE_ADDR']
değişken IP alabilirsiniz .
Windows sunucusu için u kullanabilirsiniz düşünüyorum:
<?php
echo exec('getmac');
?>
exec
sadece `` echogetmac
Tek yapmanız gereken arp'yi farklı gruba koymak.
Varsayılan:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
Komut ile:
sudo chown root:www-data /usr/sbin/arp
Alacaksın:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
Apache, www-data kullanıcısı altında çalışan bir daemon olduğundan artık bu komutu yürütebilir.
Şimdi bir PHP betiği kullanıyorsanız, örneğin:
<?php
$mac = system('arp -an');
echo $mac;
?>
linux arp -an
komutunun çıktısını alacaksınız .
arp
İkili grubun değiştirilmesi gereksizdir, www-data
yine de other
umode'dan yürütme izinleri vardır .
Bu sınıfı kullanın (https://github.com/BlakeGardner/php-mac-address)
Bu, Unix, Linux ve Mac OS X işletim sistemlerinin üstünde MAC adresi manipülasyonu için bir PHP sınıfıdır. öncelikle kablosuz güvenlik denetimlerinde kimlik sahtekarlığına yardımcı olmak için yazılmıştır.
Windows'da, kullanıcı komut dosyanızı yerel olarak kullanıyorsa, çok basit olacaktır:
<?php
// get all the informations about the client's network
$ipconfig = shell_exec ("ipconfig/all"));
// display those informations
echo $ipconfig;
/*
look for the value of "physical adress" and use substr() function to
retrieve the adress from this long string.
here in my case i'm using a french cmd.
you can change the numbers according adress mac position in the string.
*/
echo substr(shell_exec ("ipconfig/all"),1821,18);
?>
Sorununuzu çözmek için aşağıdaki çözümü kullanabilirsiniz:
$mac='UNKNOWN';
foreach(explode("\n",str_replace(' ','',trim(`getmac`,"\n"))) as $i)
if(strpos($i,'Tcpip')>-1){$mac=substr($i,0,17);break;}
echo $mac;
PHP Kullanarak MAC Adresi Alma: (Ubuntu 18.04'te test edildi) - 2020 Güncellemesi
Kod İşte:
<?php
$mac = shell_exec("ip link | awk '{print $2}'");
preg_match_all('/([a-z0-9]+):\s+((?:[0-9a-f]{2}:){5}[0-9a-f]{2})/i', $mac, $matches);
$output = array_combine($matches[1], $matches[2]);
$mac_address_values = json_encode($output, JSON_PRETTY_PRINT);
echo $mac_address_values
?>
Çıktı:
{
"lo": "00:00:00:00:00:00",
"enp0s25": "00:21:cc:d4:2a:23",
"wlp3s0": "84:3a:4b:03:3c:3a",
"wwp0s20u4": "7a:e3:2a:de:66:09"
}
Mac adresini almak, bir müşterinin makinesini internet üzerinden doğrulamak için en iyi yaklaşım olmayabilir. Bunun yerine, yöneticinin oturum açmasıyla istemcinin tarayıcısında depolanan bir belirteç kullanmayı düşünün.
Bu nedenle, istemciye bu belirteç yalnızca yönetici tarayıcı aracılığıyla kendilerine verirse sahip olabilir. Belirteç yoksa veya geçerli değilse, istemcinin makinesi geçersizdir.
Bu kodu kullanarak MAC Adresi veya Fiziksel Adres alabilirsiniz
$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));
$d1 = explode(':',$d[1]);
$d2 = explode(' ',$d1[1]);
return $d2[1];
Kabuk_exec ("ipconfig / all") tüm ağın tam ayrıntısını döndürdüğünden birçok kez patladım . bu yüzden birer birer bölmelisiniz. Bu kodu çalıştırdığınızda MAC Adresinizi 00 - ## - ## - CV-12 // alacaksınız
, bu sadece gösteri için sahte adres.
// Turn on output buffering
ob_start();
//Get the ipconfig details using system commond
system('ipconfig /all');
// Capture the output into a variable
$mycomsys=ob_get_contents();
// Clean (erase) the output buffer
ob_clean();
$find_mac = "Physical";
//find the "Physical" & Find the position of Physical text
$pmac = strpos($mycomsys, $find_mac);
// Get Physical Address
$macaddress=substr($mycomsys,($pmac+36),17);
//Display Mac Address
echo $macaddress;
Bu ipconfig /all
, Windows sistem komutu gibi Windows'ta da işe yarıyor .
Bunu openWRT kullanarak kolayca yapabilirsiniz. Eğer esir bir portal kullanıyorsanız php ve openWRT'yi karıştırabilir ve IP ile mac arasında ilişki kurabilirsiniz.
Şunları kullanarak basit bir PHP kodu yazabilirsiniz:
$localIP = getHostByName(getHostName());
Daha sonra, openWRT'yi kullanarak gidebilirsiniz /tmp/dhcp.leases
, formla ilgili bir şey alırsınız:
e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
Burada, mac, IP adresi ve ana bilgisayar adına sahipsiniz.