如何在访问我的网站时获取客户端 MAC 地址?

How to get client MAC address when visit to my website?

我需要知道连接客户端的 MAC 地址, 我如何在 PHP 中执行此操作?

我认为这是不可能的,除非它的桌面应用程序 运行 在您用户的计算机上。

一般安全问题是不可能的。因为 MAC 地址是你的机器地址,你的服务器无法访问你的机器。 MAC 地址不会在设备连接的 LAN 之外广播 - 它永远不会离开路由器并传递到服务器。

在互联网上,你不能。但是如果客户端在本地网络 (LAN) 上,请创建一个 php 文件并将此

shell_exec("sudo $arp -an ".$_SERVER['REMOTE_ADDR']); 行。 NB: 确保添加 sudoers 文件的默认 apache 用户 运行 sudo visudo 并将 "www-data ALL=NOPASSWD /usr/bin/arp" 添加到文件底部的某处。

不能,除非客户自己在消息中发送。

那是因为 MAC 地址是仅用于本地连接的本地地址。计算机使用它与其本地网络 (LAN) 中的其他设备通信,例如计算机、路由器、打印机等。 这也意味着拥有 MAC 个客户端地址对于长时间通信也是无用的,因为它们不在同一网络中。

为了与本地网络 (WAN) 之外的设备进行通信,需要使用 IP 地址和端口号。 路由器使用 IP 地址知道将数据发送到哪里,而端口号通常用于最终路由器将 public IP 地址转换为私有 IP 地址(192.168.X.X, 172 .16.X.X, 10.X.X.X), 称为 NAT。 目标计算机也使用端口号来了解 program/process 应该将数据发送到哪个。

我知道这个帖子有点旧,但我在网上搜索了很多,试图找到相同问题的解决方案。经过大量的网络搜索和大量从未奏效的解决方案和代码之后,我写了下面的两段代码。

请记住,您只能在您的局域网上获取 mac 网络的 mac 地址,无法通过浏览器获取 mac。希望这也可以帮助其他人。

<?php
$ip_address = $_SERVER['REMOTE_ADDR'];
$mac = `arp $ip_address | cut -d " " -f4`;
echo "<br />Your Mac is: ";  
echo $mac;
?>

上面的第一个版本是我能得到的最简单的版本。

下面的另一个更复杂,因为如果它被代理,它也会带来主机名。

<?php
$http_client_ip = $_SERVER['HTTP_CLIENT_IP'];
$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_addr = $_SERVER['REMOTE_ADDR'];
$hostname = gethostname();


if (!empty($http_client_ip)) {
    $ip_address = $http_client_ip;
} else if (!empty($http_x_forwarded_for)) {
    $ip_address = $http_x_forwarded_for;
} else  {
    $ip_address = $remote_addr;
}

//$output = shell_exec('arp -n $ip_address'); 
$mac = `arp $ip_address | cut -d " " -f4`;


//echo "<br /> <br />Your hostname is: $hostname";
//echo $hostname;  
echo "<br />Your Mac is: ";  
echo $mac;
//echo "<pre>$output</pre>"

?>

再一次,我只是想把它留在这里,以备日后帮助他人。