这是整个代码。问题出在最后一行。我没有写,我已经从我的无线热点应用论坛复制了它,我有这个错误。有人能给我一个如何解决的提示吗?感谢
<?php
$ipaddress=$_SERVER['REMOTE_ADDR'];
$macaddr=false;
#run the external command, break output into lines
$arp=`arp $ipaddress`;
$lines = explode(" ", $arp);
$macaddr = $lines[3];
?>
因此,让我们来了解一下这段代码到底在做什么。
首先,我们获取当前正在查看页面的用户的IP地址。$_SERVER
是一个预定义变量,可用于运行php的所有*框。文档显示如下:
用户查看当前页面的IP地址。
然后将变量$macaddr
设置为false。你将用数据填充它,但它在未来可能仍然是false,所以你应该在尝试访问它之前进行一些检查。稍后会有更多信息。。。
PHP有一个执行运算符。这涉及到将代码封装在backticks中以在服务器上执行代码,这与shell_exec()
几乎相同,只是在使用它时没有函数调用的开销。
您将像在命令行中一样执行arp 127.0.0.1
,并在将结果放入$arp
变量之前将其作为数组返回。
然后在任意空格上使用explode()
拆分字符串,最后尝试读取数组的第三个元素。
首先,您应该检查数组的第三个元素是否存在。如果没有,则arp
命令出错,没有返回您所期望的内容,您应该抛出有用的Exception
来向代码的未来用户解释出错的原因。
其次,您应该在最后检查$macaddr
是否包含您想要的信息,可能是通过正则表达式或类似的验证功能。
最后,为什么不从将arp
发送到命令行中得到您想要的东西?首先,尝试在命令行中运行arp yourIpAddressHere
,并确保它返回一些数据。当我这样做的时候,我会得到"无条目",所以在让PHP执行之前,请先在命令行中整理您的命令,这样您就可以在代码中使用它。
*除非你一直在做你不该做的事情
为什么我认为它不起作用
我正在尝试你的arp
命令。以下是我的结果:
- 使用我的内部和外部ip地址在localhost上尝试
arp
我得到了"禁止进入"的回复。因为在我的本地主机上,地址都是主机名,而不是ip地址,而我的地址不在列表中。
- 正在远程服务器上尝试
arp
我只从arp
命令中获取服务器的ip地址。因此,试图访问访问用户的mac地址是行不通的,因为执行是在服务器上进行的。不在用户的计算机上。
总之,你试图做一些黑客行为——出于邪恶目的访问用户的mac地址。我不会再帮你回答这个问题了。
您需要$macaddr
包含什么?
<?php
//RETURNS AN IP ADRES 127.0.0.1
$ipaddress=$_SERVER['REMOTE_ADDR'];
$macaddr = false;
#run the external command, break output into lines
$arp='arp ' . $ipaddress;
//You're trying to explode `arp 127.0.0.1` with a space
$lines = explode(" ", $arp);
//$lines contains array(0 => 'arp', 1 => '127.0.0.1')
//$lines[3] does not exist that's where the undefined offset is coming from.
$macaddr = $lines[3];
?>