是否有可能找到与PHP连接的网络接口客户端?

时间:2014-06-27 10:42:31

标签: php bash shell network-programming freebsd

我想找到连接的网络接口客户端。有可能吗?

如果可以使用Bash或其他脚本语言。这对我来说是可以接受的。

我正在使用Freebsd。

以下是代码的外观。

function get_connected_interface(){
//...
}
echo get_connected_interface(); //should print network interface. for example em0

1 个答案:

答案 0 :(得分:0)

如果您使用的是Apache,PHP会将$ _SERVER [" SERVER_ADDR"]设置为客户端连接到te服务器的目标 IP地址。

如果您使用的是nginx,lighttpd或其他网络服务器,请查看仅包含<?php phpinfo(); ?>的网页结果,了解如何获取目标<的 IP地址 / strong>(服务器的一个IP地址)

在任何情况下,您都可以使用此PHP脚本启动ifconfig并搜索具有此IP地址的接口。

我说:

function get_connected_interface() {
  static $interfaces=array();
  if (!count($interfaces)) {
    $curif="";
    // launch ifconfig and parse its result (inet/inet6)
    // but only at first function call
    exec("ifconfig",$out);
    foreach($out as $line) {
      if (preg_match("#^([a-z0-9\.]*): #",$line,$mat)) {
    $curif=$mat[1];
      }
      if (preg_match("#inet ([0-9\.]*) #",$line,$mat)) {
    $interfaces[$mat[1]]=$curif;
      }
      if (preg_match("#inet6 ([0-9a-fA-F:]*) #",$line,$mat)) {
    $interfaces[$mat[1]]=$curif;
      }
    }
  }
  return $interfaces[$_SERVER["SERVER_ADDR"]];
}