这是整个代码。问题出在最后一行。我没有写它,我已经从我的无线热点应用程序论坛复制了它,我有这个错误。有人能给我一个如何解决它的提示吗?感谢
<?php
$ipaddress=$_SERVER['REMOTE_ADDR'];
$macaddr=false;
#run the external command, break output into lines
$arp=`arp $ipaddress`;
$lines = explode(" ", $arp);
$macaddr = $lines[3];
?>
答案 0 :(得分:0)
您需要$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];
?>
答案 1 :(得分:0)
让我们详细了解这段代码的用途。
首先,我们获取当前正在查看该页面的用户的IP地址。 $_SERVER
是运行php的所有*框上都可用的预定义变量。 documentation在此处显示:
用户正在查看当前页面的IP地址。
然后您将变量$macaddr
设置为false。您将使用数据填充此数据,但将来可能仍然是错误的,因此您应该在尝试访问它之前执行一些检查。更多关于此...
PHP有一个execution operator。这涉及将代码包装在反引号中以在服务器上执行代码,并且与shell_exec()
几乎相同 - 除非在使用它时您没有函数调用的开销。
您正在执行arp 127.0.0.1
,就像在命令行中一样,并将结果作为数组返回,然后将其放入$arp
变量。
然后你在任何空格上用explode()
分割字符串,最后尝试读取数组的第三个元素。
首先,您应该检查数组的第三个元素是否存在。如果没有,arp
命令出错并且没有返回您的预期,您应该抛出有用的Exception
来解释代码的未来用户出了什么问题。
其次,您应该在结尾检查$macaddr
是否包含您想要的信息,可能是通过正则表达式或类似的验证功能。
最后,为什么不通过将arp
发送到命令行来获得您想要的内容?好吧,首先,尝试在命令行中运行arp yourIpAddressHere
并确保它返回一些数据。当我这样做时,我得到“没有条目”,所以在使用PHP之前,在命令行中排除命令 first ,以便在代码中使用它。
* 除非你一直在搞乱你不应该做的事情。
我正在尝试你的arp
命令。以下是我的结果:
arp
我得到“没有进入”。因为在我的本地主机上,地址都是主机名,而不是IP地址,我的不在列表中。
arp
我只从arp
命令获取服务器的ip地址。因此,尝试访问访问用户的mac地址是行不通的,因为执行是在服务器上进行的。不在用户的计算机上。
总之,你正在尝试做一些hacky - 访问用户的mac地址以达到恶意目的。我不打算再回答这个问题。