Можно ли найти, к какому сетевому интерфейсу клиент подключен с помощью PHP?

#php #bash #shell #network-programming #freebsd

#php #bash #оболочка #сетевое программирование #freebsd

Вопрос:

Я хочу найти, к какому клиенту сетевого интерфейса подключен. Возможно ли это?

Если это возможно с помощью Bash или другого языка сценариев. Для меня это приемлемо.

Я работаю над Freebsd.

Вот как должен выглядеть код.

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

Ответ №1:

Если вы используете Apache, PHP устанавливает $ _SERVER[«SERVER_ADDR»] в качестве IP-адреса назначения, по которому клиент подключается к серверу.

Если вы используете nginx, lighttpd или другой веб-сервер, посмотрите на результат страницы только <?php phpinfo(); ?> для того, чтобы узнать, как получить IP-адрес получателя (один из 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"]];
}