PHP, как получить локальный IP-адрес системы

Мне нужно получить локальный IP-адрес компьютера, например 192. * …. Возможно ли это с PHP?

Мне нужен IP-адрес системы, запускающей скрипт, но мне не нужен внешний IP-адрес, мне нужен адрес локальной сетевой карты.

Из CLI

PHP <5.3.0

$localIP = getHostByName(php_uname('n'));

PHP> = 5.3.0

$localIP = getHostByName(getHostName());

 $_SERVER['SERVER_ADDR'] 

Это старый пост, но получите его с этим:

 function getLocalIp() { return gethostbyname(trim(`hostname`)); } 

Например:

 die( getLocalIp() ); 

Найденный на другом сайте, не удаляйте команду trim, потому что иначе вы получите имя компьютера.

BACKTICKS (Специальные кавычки): он работает, потому что PHP будет пытаться запускать все, что находится между этими «специальными кавычками» (backticks) в качестве команды оболочки, и возвращает полученный результат.

 gethostbyname(trim(`hostname`)); 

Очень похож (но гораздо эффективнее), чем на:

 $exec = exec("hostname"); //the "hostname" is a valid command in both windows and linux $hostname = trim($exec); //remove any spaces before and after $ip = gethostbyname($hostname); //resolves the hostname using local hosts resolver or DNS 

попробуйте это (если ваш сервер Linux):

 $command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'"; $localIP = exec ($command); echo $localIP; 

Зависит от того, что вы подразумеваете под местным:

Если по локальному вы имеете в виду адрес сервера / системы, выполняющей PHP-код, то есть еще две возможности для обсуждения. Если PHP запускается через веб-сервер, вы можете получить адрес сервера, прочитав $_SERVER['SERVER_ADDR'] . Если PHP запускается через интерфейс командной строки, вам, скорее всего, придется выполнить оболочку ipconfig (Windows) / ifconfig (* nix) и вывести адрес grep.

Если по локальному вы имеете в виду удаленный адрес посетителя веб-сайта, но не внешний адрес IP (так как вы конкретно сказали 192. *), то вам не повезло. Весь смысл маршрутизации NAT заключается в том, чтобы скрыть этот адрес. Вы не можете идентифицировать локальные адреса отдельных компьютеров за IP-адресом, но есть некоторые трюки (пользовательский агент, возможно, MAC-адрес), которые могут помочь различать, если есть несколько компьютеров, получающих доступ с одного и того же IP-адреса.

IP-адрес по умолчанию для локальной машины можно получить следующим образом:

 $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_connect($sock, "8.8.8.8", 53); socket_getsockname($sock, $name); // $name passed by reference $localAddr = $name; 

Поскольку это UDP, socket_connect не выходит в сеть. Он назначает локальный адрес и порт для сокета. Это позволяет получить локальный адрес.

Это решение работает без сетевого трафика, DNS или выполнения команд.

Он может не работать, если нет маршрута к 8.8.8.8 (например, у вас нет подключения к Интернету).

hostname (1) может указать IP-адрес: hostname --ip-address , или, как говорит человек, лучше использовать hostname --all-ip-addresses

Вы можете попробовать это как обычный пользователь в CLI на хосте Linux:

 function get_local_ipv4() { $out = split(PHP_EOL,shell_exec("/sbin/ifconfig")); $local_addrs = array(); $ifname = 'unknown'; foreach($out as $str) { $matches = array(); if(preg_match('/^([a-z0-9]+)(:\d{1,2})?(\s)+Link/',$str,$matches)) { $ifname = $matches[1]; if(strlen($matches[2])>0) { $ifname .= $matches[2]; } } elseif(preg_match('/inet addr:((?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3})\s/',$str,$matches)) { $local_addrs[$ifname] = $matches[1]; } } return $local_addrs; } $addrs = get_local_ipv4(); var_export($addrs); 

Вывод:

 array ( 'eth0' => '192.168.1.1', 'eth0:0' => '192.168.2.1', 'lo' => '127.0.0.1', 'vboxnet0' => '192.168.56.1', ) 

Я воспользовался этим вопросом для серверной php (работает от терминала Linux)

Я взорвал «ifconfig» и сузил его до 192.168.xx IP-адреса.

Вот:

 echo explode(' ',explode(':',explode('inet addr',explode('wlan0',trim(`ifconfig`))[1])[1])[1])[0]; 

И, конечно, измените «wlan0» на желаемое сетевое устройство.

Мой выход:

 192.168.1.5 

$ localIP = gethostbyname (trim (exec ("hostname")));

Я попробовал в Windows pc и работал, а также думал, что Will будет работать с Linux.

Если вы находитесь в среде dev на OS X, подключенной через Wi-Fi:

 echo exec("/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2"); 
 $_SERVER['REMOTE_ADDR'] 
  • PHP_SELF Возвращает имя файла текущего скрипта с PHP_SELF пути к корню

  • SERVER_PROTOCOL Возвращает имя и версию протокола, запрашиваемого страницей

  • REQUEST_METHOD Возвращает метод запроса, используемый для доступа к странице

  • DOCUMENT_ROOT Возвращает корневой каталог, в котором выполняется текущий скрипт

Попробуй это

 $localIP = gethostbyname(trim('hostname')); 

Самый простой способ получить локальный IP-адрес с помощью $_SERVER['SERVER_ADDR']

например. –

 $ip_address = $_SERVER['SERVER_ADDR'] 

IP-адрес сервера отображения PHP