#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"]];
}