#1 楼
服务器IP您可以从
$_SERVER['SERVER_ADDR']
获取服务器IP地址。 服务器MAC地址
对于MAC地址,您可以解析Linux中
netstat -ie
或Windows中ipconfig /all
的输出。客户端IP地址
您可以从
$_SERVER['REMOTE_ADDR']
获取客户端IP。客户端MAC地址
除非在特殊情况下,否则客户端MAC地址将不可用。 :如果客户端与服务器位于同一以太网段。
因此,如果您要构建某种基于LAN的系统,并且客户位于同一以太网段上,则可以通过解析
arp -n
(linux)或arp -a
(windows )。 编辑:您在注释中询问如何获取外部命令的输出-一种方法是使用反引号,例如
$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];
}
}
但是如果客户不在局域网上怎么办?
评论
如何使用php获取arp -a的输出?
–内芬
09-09-14 at 12:04
@paulDixon你好,这是一篇旧文章,我想知道是否有一种获取Mac地址的新方法?
– jcho360
2012年6月21日12:58
@ jcho360仍然无法获得客户端的MAC地址。我不希望发生这种情况,因为MAC地址没有通信值,因此不会保留在het请求标头中。
– Bearwulf
2012年7月3日,12:18
@Bearwulf非常感谢您的回复,这就是我的想法,有没有办法识别连接到站点的唯一计算机?
– jcho360
2012年7月3日14:17
@ jcho360就我个人而言,我将使用IP地址+请求信息的组合并对其进行哈希处理,例如md5($ _ SERVER ['REMOTE_ADDR']。$ _SERVER ['HTTP_USER_AGENT']);。它绝对不是防弹的,而是一个开始。另一种更简单和安全的方法是设置具有唯一哈希的cookie。每次使用该Cookie时,您都可以确定哪个用户正在连接到您的网站。
– Bearwulf
2012年7月5日在11:50
#2 楼
客户端和服务器之间的每个路由器都会覆盖客户端的MAC地址(就发出HTTP请求的计算机而言)。客户端IP方便地提供给
$_SERVER['REMOTE_ADDR']
中的脚本。在某些情况下,尤其是如果您的Web服务器在代理(即缓存代理)之后,$_SERVER['REMOTE ADDR']
将返回代理的IP,并且会有一个额外的值,通常是$_SERVER['HTTP_X_FORWARDED_FOR']
,其中包含原始请求客户端的IP。 有时,尤其是当您处理不受您控制的匿名代理时,该代理不会返回真实IP地址,而您所希望的只是该IP地址。代理。
#3 楼
我认为您无法在PHP中获取MAC地址,但可以从$_SERVER['REMOTE_ADDR']
变量获取IP。评论
您可以获取mac地址,我认为:)
– Jitesh Sojitra
16年5月17日在7:17
mac地址仅对本地网络可见,您可以访问其本地网络以外的任何设备的mac地址,例如,您的mac地址将被存储并在本地wifi路由器中可见,而在其外部,网络中的所有设备将正在使用并且将使用相同的IP地址进行通信,该路由器会将其转换回mac地址并在内部发送。
– Dheeraj Thedijje
16-10-16在9:05
#4 楼
对于Windows Server,我认为您可以使用:<?php
echo exec('getmac');
?>
评论
<?php echo exec('getmac'); ?>仅在LAN上有效,但是此命令显示所有mac地址
– Giorgi Gogitidze
17年1月11日,12:50
还有Windows10。此外,您不必只使用exec`echo getmac
–SaidbakR
17年4月18日在0:12
#5 楼
您需要做的就是将arp放入不同的组。默认值:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
使用命令:
sudo chown root:www-data /usr/sbin/arp
您将获得:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
由于apache是在用户www-data下运行的守护程序,因此现在可以执行该命令。
因此,如果您现在使用PHP脚本,例如:
<?php
$mac = system('arp -an');
echo $mac;
?>
,您将获得linux
arp -an
命令的输出。 br />评论
这样只会为您提供本地网络上设备的MAC地址。
– duskwuff-非活动状态-
2011年8月17日下午5:11
更改arp二进制文件的组是多余的,www数据仍然具有其他umode的执行权限。
–deed02392
2014年3月6日13:36
#6 楼
使用此类(https://github.com/BlakeGardner/php-mac-address)这是一个用于在Unix,Linux和Mac OS X操作系统之上进行MAC地址操作的PHP类。它主要是为了帮助欺骗而进行无线安全审核。
#7 楼
您可以使用以下代码获取MAC地址或物理地址$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));
$d1 = explode(':',$d[1]);
$d2 = explode(' ',$d1[1]);
return $d2[1];
我用了很多时间,因为shell_exec(“ ipconfig / all”)返回所有网络的完整详细信息。所以你必须一一拆分。
运行此代码时,您会得到
您的MAC地址00-##-##-CV-12 //这是仅用于显示的假地址。
#8 楼
在Windows中,如果用户在本地使用脚本,这将非常简单:<?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);
?>
#9 楼
您可以使用以下解决方案来解决您的问题:$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;
#10 楼
我们可以通过这种方式在php中获取Ubuntu中的MAC地址$ipconfig = shell_exec ("ifconfig -a | grep -Po 'HWaddr \K.*$'");
// display mac address
echo $ipconfig;
#11 楼
使用PHP获取MAC地址:(在Ubuntu 18.04中测试)-2020更新代码为:
<?php
$mac = shell_exec("ip link | awk '{print }'");
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
?>
输出:
{
"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"
}
#12 楼
也许获得Mac地址不是通过Internet验证客户端计算机的最佳方法。考虑使用令牌代替,该令牌通过管理员的登录信息存储在客户端的浏览器中。因此,如果管理员通过浏览器将令牌授予客户端,则客户端只能拥有该令牌。如果令牌不存在或无效,则客户端的计算机无效。
#13 楼
来不及回答,但是这是我的方法,因为这里没有人提到:为什么要注意客户端解决方案?
将mac存储在cookie中的JavaScript实现(可以在此之前对其进行加密)
,那么每个请求都必须包含该cookie名称,否则它将被拒绝。
要使此操作更加有趣,您可以从获得清单的mac地址进行服务器端验证
(有
,然后将其与user_agent值进行比较,以查看是否存在某种操纵:
HP的mac地址+ Safari的用户代理=拒绝请求。
#14 楼
// 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;
由于Windows系统命令
ipconfig /all
,它在Windows上对我有效。评论
如果此答案对您有所帮助,则希望不要复制/粘贴您不理解的代码。它不执行OP的要求。
–tripleee
15年11月26日在13:15
#15 楼
在Linux下,使用iptables可以使用mac地址和ip登录到Web服务器的每个请求的文件。从php查找具有ip地址并获取mac地址的最后一项。
请记住, Mac地址来自跟踪中的最后一个路由器。
#16 楼
您可以使用openWRT轻松完成此操作。如果您使用强制门户,则可以将php和openWRT混合使用,并在IP和Mac之间建立联系。您可以使用以下代码编写简单的PHP代码:
$localIP = getHostByName(getHostName());
以后,使用openWRT可以转到
/tmp/dhcp.leases
,您将获得以下格式的内容: e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
IP地址和主机名。
评论
IP地址是什么?连接的客户端是什么?服务器或访客的地址?
您想要MAC地址有什么用途?您知道用户可以更改它吗?
@EJP我有一个MAC地址用例。我想根据请求网页的设备提供不同的信息。还有另一种方法来获取请求页面的设备的唯一信息吗?