113 votes

PHP comment obtenir l'IP locale du système

Je dois obtenir l'adresse IP locale de l'ordinateur, par exemple 192.*..... Est-ce possible avec PHP ?

J'ai besoin de l'adresse IP du système qui exécute le script, mais je n'ai pas besoin de l'IP externe, j'ai besoin de l'adresse de sa carte réseau locale.

16voto

Fosco Points 20573

Cela dépend de ce que vous entendez par "local" :

Si par local vous entendez l'adresse du serveur/système qui exécute le code PHP, alors il y a encore deux pistes à discuter. Si PHP est exécuté par un serveur web, alors vous pouvez obtenir l'adresse du serveur en lisant $_SERVER['SERVER_ADDR'] . Si PHP est exécuté via une interface de ligne de commande, vous devrez probablement exécuter en shell les commandes suivantes ipconfig (Windows) / ifconfig (*nix) et récupérer l'adresse.

Si par local, vous entendez l'adresse distante du visiteur du site web, mais pas son adresse IP externe (puisque vous avez spécifiquement dit 192.*), alors vous n'avez pas de chance. L'objectif du routage NAT est de cacher cette adresse. Vous ne pouvez pas identifier les adresses locales des ordinateurs individuels derrière une adresse IP, mais il existe quelques astuces (agent utilisateur, éventuellement adresse mac) qui peuvent aider à différencier si plusieurs ordinateurs accèdent à partir de la même IP.

13voto

ern0 Points 2203

Hostname(1) peut indiquer l'adresse IP : hostname --ip-address ou, comme le dit l'homme, il est préférable d'utiliser hostname --all-ip-addresses

12voto

Chinthaka Devinda Points 230

C'est très simple et les réponses ci-dessus compliquent les choses. Vous pouvez simplement obtenir des adresses IP locales et publiques en utilisant cette méthode.

   <?php 
$publicIP = file_get_contents("http://ipecho.net/plain");
echo $publicIP;

$localIp = gethostbyname(gethostname());
echo $localIp;

?>

9voto

Mohammad Ilbeygi Points 135

Vous pouvez utiliser ce code php :

$localIP = getHostByName(getHostName());

// Displaying the address 
echo $localIP;

Si vous voulez obtenir l'ipv4 de votre système, essayez ceci :

shell_exec("ip route get 1.2.3.4 | awk '{print $7}'")

7voto

ab1965 Points 41

Vous pouvez essayer cela en tant qu'utilisateur normal dans le CLI sur un hôte 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);

Sortie :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X