J'ai besoin d'obtenir l'adresse IP locale de l'ordinateur tel que 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'adresse IP externe, j'ai besoin de l'adresse de sa carte réseau locale.
$localIP = getHostByName(php_uname('n'));
$localIP = getHostByName(getHostName());
$_SERVER['SERVER_ADDR']
Ceci est un ancien post, mais obtenez-le avec ceci:
function getLocalIp()
{ return gethostbyname(trim(`hostname`)); }
Par exemple:
die( getLocalIp() );
Si vous l'avez trouvé sur un autre site, ne supprimez pas la commande trim, sinon vous obtiendrez le nom de l'ordinateur.
BACKTICKS (Les guillemets spéciaux): Cela fonctionne parce que PHP va essayer de courir quoi que ce soit entre ces "guillemets spéciaux" (morsures) en tant que commande Shell et retourne la sortie résultante.
gethostbyname(trim(`hostname`));
Est très similaire (mais beaucoup plus efficace) que de faire:
$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
essayez ceci (si votre serveur est Linux):
$command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'";
$localIP = exec ($command);
echo $localIP;
L'adresse IP externe par défaut de la machine locale peut être obtenue comme suit:
$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;
Comment ça fonctionne:
Comme il s'agit de UDP, socket_connect
Ne sort pas sur le réseau. Il attribue uniquement une adresse locale et un port à la prise. Cela nous permet d’obtenir l’adresse locale.
Cette solution fonctionne sans aucun trafic réseau, DNS ou exécution de commande.
Cela peut ne pas fonctionner s'il n'y a pas de route vers 8.8.8.8
(Par exemple, vous n'avez pas de connexion Internet).
Cela dépend de ce que vous entendez par local:
Si par local vous entendez l'adresse du serveur/système exécutant le code PHP, il reste encore deux pistes à discuter. Si PHP est en cours d'exécution un serveur Web, vous pouvez alors 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 Shell-execute ipconfig
(Windows)/ifconfig
(* nix) et annonce 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 indiqué 192. *), alors vous n'avez pas de chance. L’intérêt de NAT le routage est de masquer cette adresse. Vous ne pouvez pas identifier les adresses locales des ordinateurs individuels derrière une adresse IP, mais certaines astuces (agent utilisateur, éventuellement une adresse Mac) peuvent vous aider. aider à différencier si plusieurs ordinateurs accèdent à partir de la même adresse IP.
nom d'hôte (1) peut indiquer l'adresse IP: hostname --ip-address
ou, comme dit l’homme, il vaut mieux utiliser hostname --all-ip-addresses
Vous pouvez essayer ceci en tant qu'utilisateur régulier dans la CLI sur l'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',
)
$localIP = gethostbyname(trim(exec("hostname")));
J'ai essayé dans Windows PC et Son a fonctionné et pense aussi que Will fonctionnera sous Linux.
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;
?>
J'ai tripoté cette question pour un php côté serveur (fonctionnant à partir d'un terminal Linux)
J'ai explosé 'ifconfig' et l'ai réduit à l'adresse IP.
C'est ici:
$interface_to_detect = 'wlan0';
echo explode(' ',explode(':',explode('inet addr',explode($interface_to_detect,trim(`ifconfig`))[1])[1])[1])[0];
Et bien sûr, remplacez "wlan0" par votre périphérique réseau souhaité.
Ma sortie est:
192.168.1.5
Si vous êtes dans un environnement de développement sur OS X, connecté via Wifi:
echo exec("/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2");
C'est facile. Vous pouvez obtenir le nom d'hôte par ce simple code.
$ip = getHostByName(getHostName());
Ou vous pouvez aussi utiliser $_SERVER['HTTP_Host']
pour obtenir le nom d'hôte.