如何在访问我的网站时获取客户端 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>"
?>
再一次,我只是想把它留在这里,以备日后帮助他人。
我需要知道连接客户端的 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>"
?>
再一次,我只是想把它留在这里,以备日后帮助他人。