Saya perlu mengetahui MAC dan alamat IP dari klien yang terhubung, bagaimana saya bisa melakukan ini di PHP?
php
mac-address
Neveen
sumber
sumber
Jawaban:
IP server
Anda bisa mendapatkan alamat IP server dari
$_SERVER['SERVER_ADDR']
.Alamat MAC server
Untuk alamat MAC, Anda dapat mengurai keluaran
netstat -ie
di Linux, atauipconfig /all
di Windows.Alamat IP klien
Anda bisa mendapatkan IP klien dari
$_SERVER['REMOTE_ADDR']
Alamat MAC klien
Alamat MAC klien tidak akan tersedia untuk Anda kecuali dalam satu keadaan khusus: jika klien berada di segmen ethernet yang sama dengan server.
Jadi, jika Anda membangun beberapa jenis sistem berbasis LAN dan klien Anda berada di segmen ethernet yang sama, maka Anda bisa mendapatkan alamat MAC dengan mem-parsing keluaran
arp -n
(linux) atauarp -a
(windows).Edit : Anda bertanya dalam komentar bagaimana mendapatkan output dari perintah eksternal - salah satu caranya adalah dengan menggunakan backticks, mis
$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]; } }
Tetapi bagaimana jika klien tidak menggunakan LAN?
Nah, Anda kurang beruntung kecuali Anda dapat meminta klien memberikan informasi itu secara sukarela dan mengirimkannya melalui cara lain.
sumber
Alamat MAC klien (dalam arti komputer yang mengeluarkan permintaan HTTP) ditimpa oleh setiap router antara klien dan server.
IP klien dengan mudah disediakan untuk skrip di
$_SERVER['REMOTE_ADDR']
. Dalam beberapa skenario, terutama jika server web Anda berada di belakang proxy (yaitu proxy cache)$_SERVER['REMOTE ADDR']
akan mengembalikan IP proxy , dan akan ada nilai tambahan, seringkali$_SERVER['HTTP_X_FORWARDED_FOR']
, yang berisi IP klien permintaan asli.Terkadang, terutama saat Anda berurusan dengan proxy anonim yang tidak Anda kendalikan, proxy tidak akan mengembalikan alamat IP asli, dan yang dapat Anda harapkan hanyalah alamat IP dari proxy tersebut.
sumber
Saya tidak berpikir Anda bisa mendapatkan alamat MAC di PHP, tetapi Anda bisa mendapatkan IP dari
$_SERVER['REMOTE_ADDR']
variabel.sumber
Untuk windows server saya pikir Anda bisa menggunakan ini:
<?php echo exec('getmac'); ?>
sumber
exec
hanya ʻechogetmac
Yang perlu Anda lakukan adalah memasukkan arp ke dalam grup yang berbeda.
Default:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
Dengan perintah:
kamu akan mendapatkan:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
Dan karena apache adalah daemon yang berjalan di bawah data www pengguna, sekarang ia dapat menjalankan perintah ini.
Jadi jika sekarang Anda menggunakan script PHP, misalnya:
<?php $mac = system('arp -an'); echo $mac; ?>
Anda akan mendapatkan output dari
arp -an
perintah linux .sumber
arp
biner adalah redundan,www-data
masih memiliki izin eksekusi dariother
umode.Gunakan kelas ini (https://github.com/BlakeGardner/php-mac-address)
Ini adalah kelas PHP untuk manipulasi alamat MAC di atas sistem operasi Unix, Linux dan Mac OS X. itu terutama ditulis untuk membantu spoofing untuk audit keamanan nirkabel.
sumber
Di windows, Jika pengguna menggunakan skrip Anda secara lokal, itu akan sangat sederhana:
<?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); ?>
sumber
Anda dapat menggunakan solusi berikut untuk menyelesaikan masalah Anda:
$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;
sumber
Kita bisa mendapatkan alamat MAC di Ubuntu dengan cara ini di php
$ipconfig = shell_exec ("ifconfig -a | grep -Po 'HWaddr \K.*$'"); // display mac address echo $ipconfig;
sumber
Mendapatkan Alamat MAC Menggunakan PHP: (Diuji di Ubuntu 18.04) - Pembaruan 2020
Inilah Kodenya:
<?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 ?>
Keluaran:
{ "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" }
sumber
Mungkin mendapatkan alamat Mac bukanlah pendekatan terbaik untuk memverifikasi mesin klien melalui internet. Pertimbangkan untuk menggunakan token sebagai gantinya yang disimpan di browser klien dengan login administrator.
Oleh karena itu, klien hanya dapat memiliki token ini jika administrator memberikannya melalui browser mereka. Jika token tidak ada atau valid maka mesin klien tidak valid.
sumber
terlambat untuk menjawab tetapi inilah pendekatan saya karena tidak ada yang menyebutkan ini di sini:
mengapa mencatat solusi sisi klien?
implementasi javascript untuk menyimpan mac dalam cookie (Anda dapat mengenkripsinya sebelum itu)
maka setiap permintaan harus menyertakan nama cookie itu, jika tidak maka akan ditolak.
untuk membuatnya lebih menyenangkan, Anda dapat membuat verifikasi sisi server
dari alamat mac yang Anda dapatkan manifacturernya (ada banyak API gratis untuk ini)
lalu bandingkan dengan nilai user_agent untuk melihat apakah ada semacam manipulasi:
a mac alamat HP + agen pengguna Safari = tolak permintaan.
sumber
Anda bisa mendapatkan Alamat MAC atau Alamat Fisik menggunakan kode ini
$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all")); $d1 = explode(':',$d[1]); $d2 = explode(' ',$d1[1]); return $d2[1];
Saya sering meledak karena shell_exec ("ipconfig / all") mengembalikan detail lengkap dari semua jaringan. jadi kalian harus membaginya satu per satu. ketika Anda menjalankan kode ini maka Anda akan mendapatkan Alamat MAC
Anda 00 - ## - ## - CV-12 // ini adalah alamat palsu untuk pertunjukan saja.
sumber
// 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;
Ini berfungsi untuk saya di Windows, seperti
ipconfig /all
perintah sistem Windows.sumber
di bawah linux menggunakan iptables Anda dapat masuk ke file setiap permintaan ke server web dengan alamat mac dan ip. dari pencarian php item terakhir dengan alamat ip dan dapatkan alamat mac.
Seperti yang dinyatakan, ingatlah bahwa alamat mac berasal dari router terakhir yang dilacak.
sumber
Anda dapat melakukannya dengan mudah menggunakan openWRT. Jika Anda menggunakan portal tawanan, Anda dapat menggabungkan php dan openWRT dan membuat hubungan antara IP dan mac.
Anda dapat menulis kode PHP sederhana menggunakan:
Nanti, dengan menggunakan openWRT yang bisa Anda buka
/tmp/dhcp.leases
, Anda akan mendapatkan sesuatu dengan formulir:e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
Di sana, Anda memiliki mac, alamat IP, dan nama host.
sumber