Bağlı bir istemcinin MAC ve IP adresini PHP'de nasıl edinebilirim?


136

Bağlantı istemcilerinin MAC ve IP adresini bilmem gerekiyor, bunu PHP'de nasıl yapabilirim?


Neyin IP adresi? Bağlı istemciden mi?
Palantir

1
Sunucunun veya ziyaretçinin adresi?
KiNgMaR

13
MAC adresini hangi amaçla istiyorsunuz? Kullanıcı tarafından değiştirilebileceğini biliyor musunuz?
Lorne Marquis

@EJP MAC adresi için bir kullanım durumum var. Web sayfasını isteyen cihaza bağlı olarak farklı bilgiler sunmak istiyorum. Sayfayı isteyen cihazın benzersiz bilgilerini almanın başka bir yolu var mı?
Dante

Yanıtlar:


186

Sunucu IP'si

Sunucunun IP adresini adresinden alabilirsiniz $_SERVER['SERVER_ADDR'].

Sunucu MAC adresi

MAC adresi için, çıktısını netstat -ieLinux veya ipconfig /allWindows'ta ayrıştırabilirsiniz .

İstemci IP adresi

İstemci IP'sini şu adresten alabilirsiniz: $_SERVER['REMOTE_ADDR']

İstemci MAC adresi

İ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];
   }
}

Peki ya istemci LAN'da değilse?

Müşterinin bu bilgiyi gönüllü yapmasını ve başka yollarla iletmesini sağlayamadığınız sürece şansınız kalmaz.


2
Php kullanarak arp -a çıktısını almak için nasıl?
Neveen

1
@paulDixon merhaba bu eski bir yazı ve merak ediyorum Mac Adresini almanın yeni bir yolu var mı?
jcho360

@ jcho360 Bir istemcinin MAC adresini almak hala mümkün değildir. MAC adresinin hiçbir iletişim değeri olmadığı ve bu nedenle het istek başlığında korunmayacağı için zaten olmasını beklemiyorum.
Bearwulf

@Bearwulf cevap için çok teşekkür ederim, düşündüm, bir siteye bağlı benzersiz bilgisayarları tanımlamanın herhangi bir yolu var mı?
jcho360

6
@ jcho360 Şahsen IP adresi + İstek bilgileri bir arada kullanır ve bir karma yapar, örneğin md5 ($ _ SERVER ['REMOTE_ADDR']. $ _SERVER ['HTTP_USER_AGENT']) ;. Kesinlikle kurşun geçirmez değil ama onun bir başlangıç. Daha kolay ve güvenli bir başka yol, benzersiz bir karma içeren bir çerez oluşturmaktır. Bu çerezi her kullanışınızda hangi kullanıcının web sitenize bağlandığından emin olursunuz.
Bearwulf

24

İ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.


9

Ben PHP MAC adresi alabilirsiniz sanmıyorum, ama $_SERVER['REMOTE_ADDR']değişken IP alabilirsiniz .


Mac adresini alabilirsiniz, sanırım :)
Jitesh Sojitra

mac adresi yalnızca yerel ağlar tarafından görülebilir, herhangi bir cihazın mac adresine yerel ağından erişebilirsiniz, örneğin mac adresiniz yerel wifi yönlendiricinizde saklanır ve görünür ve bunun dışında ağınızdaki tüm cihazlar kullanıyor ve aynı IP adresiyle iletilecek, yönlendirici mac adresine geri dönecek ve dahili olarak gönderecektir.
Dheeraj Thedijje

7

Windows sunucusu için u kullanabilirsiniz düşünüyorum:

<?php
echo exec('getmac');
?>

2
php echo exec ('getmac'); ?> sadece LAN üzerinde çalışır, ancak bu tüm mac adresini gösterir <php system ('getmac'); ?>
Giorgi Gogitidze

Ve windows10 da. Ayrıca, execsadece `` echogetmac
SaidbakR

6

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 -ankomutunun çıktısını alacaksınız .


6
Bu size yalnızca yerel ağınızdaki cihazların MAC adreslerini verecektir.
duskwuff -inactive-

1
arpİkili grubun değiştirilmesi gereksizdir, www-datayine de otherumode'dan yürütme izinleri vardır .
deed02392


1

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); 
?>

0

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;

0

Biz php bu yollarla Ubuntu MAC adresi alabilirsiniz

$ipconfig =   shell_exec ("ifconfig -a | grep -Po 'HWaddr \K.*$'");  
    // display mac address   
 echo $ipconfig;

0

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"
}

0

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.


-1

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.


-2
// 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 .


5
Bu cevap size bir şey öğretirse, umarım anlamadığınız kodu kopyalamak / yapıştırmak değildir. OP'nin istediği şeyi yapmaz.
tripleee

-2

iptables kullanarak linux altında, web sunucusuna her isteği mac adresi ve ip ile bir dosyaya kaydedebilirsiniz. ip adresi ile php arama son öğeden ve mac adresi olsun.

Belirtildiği gibi mac adresinin izdeki son yönlendiriciden olduğunu unutmayın.


-4

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.