Hướng dẫn php get local ip

I need to get local IP of computer like 192.*.... Is this possible with PHP?

I need IP address of system running the script, but I do not need the external IP, I need his local network card address.

asked Jul 10, 2010 at 12:28

0

From CLI

PHP < 5.3.0

$localIP = getHostByName[php_uname['n']];

PHP >= 5.3.0

$localIP = getHostByName[getHostName[]];

answered Nov 5, 2013 at 18:37

andras.timandras.tim

1,8741 gold badge12 silver badges23 bronze badges

9

answered Jul 10, 2010 at 12:30

Sergey EreminSergey Eremin

10.8k2 gold badges37 silver badges44 bronze badges

4

This is an old post, but get it with this:

function getLocalIp[]
{ return gethostbyname[trim[`hostname`]]; }

For example:

die[ getLocalIp[] ];

Found it on another site, do not remove the trim command because otherwise you will get the computers name.

BACKTICKS [The special quotes]: It works because PHP will attempt to run whatever it's between those "special quotes" [backticks] as a shell command and returns the resulting output.

gethostbyname[trim[`hostname`]];

Is very similar [but much more efficient] than doing:

$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

answered Sep 10, 2012 at 2:20

CodebeatCodebeat

6,4016 gold badges54 silver badges93 bronze badges

4

A reliable way to get the external IP address of the local machine would be to query the routing table, although we have no direct way to do it in PHP.

However we can get the system to do it for us by binding a UDP socket to a public address, and getting its address:

$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

// This is the local machine's external IP address
$localAddr = $name;

socket_connect will not cause any network traffic because it's an UDP socket.

answered Apr 13, 2016 at 16:31

Arnaud Le BlancArnaud Le Blanc

96k22 gold badges201 silver badges193 bronze badges

4

try this [if your server is Linux]:

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

andrewsi

11k132 gold badges34 silver badges49 bronze badges

answered Aug 17, 2012 at 11:56

George DeacGeorge Deac

2492 silver badges2 bronze badges

4

Depends what you mean by local:

If by local you mean the address of the server/system executing the PHP code, then there are still two avenues to discuss. If PHP is being run through a web server, then you can get the server address by reading $_SERVER['SERVER_ADDR']. If PHP is being run through a command line interface, then you would likely have to shell-execute ipconfig [Windows] / ifconfig [*nix] and grep out the address.

If by local you mean the remote address of the website visitor, but not their external IP address [since you specifically said 192.*], then you are out of luck. The whole point of NAT routing is to hide that address. You cannot identify the local addresses of individual computers behind an IP address, but there are some tricks [user agent, possibly mac address] that can help differentiate if there are multiple computers accessing from the same IP.

Taz

3,6672 gold badges37 silver badges58 bronze badges

answered Jul 10, 2010 at 12:39

FoscoFosco

37.5k6 gold badges84 silver badges100 bronze badges

2

hostname[1] can tell the IP address: hostname --ip-address, or as man says, it's better to use hostname --all-ip-addresses

answered May 16, 2013 at 19:50

ern0ern0

3,11024 silver badges35 bronze badges

It is very simple and above answers are complicating things. Simply you can get both local and public ip addresses using this method.

   

answered Apr 6, 2019 at 5:50

1

You may try this as regular user in CLI on Linux host:

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];

Output:

array [
  'eth0' => '192.168.1.1',
  'eth0:0' => '192.168.2.1',
  'lo' => '127.0.0.1',
  'vboxnet0' => '192.168.56.1',
]

answered Oct 22, 2013 at 10:41

ab1965ab1965

1312 silver badges3 bronze badges

2

You can use this php code :

$localIP = getHostByName[getHostName[]];
  
// Displaying the address 
echo $localIP;

If you want get ipv4 of your system, Try this :

shell_exec["ip route get 1.2.3.4 | awk '{print $7}'"]

answered Aug 15, 2021 at 9:46

$localIP = gethostbyname[trim[exec["hostname"]]];

I tried in Windows pc and Its worked and also think that Will work on Linux to.

Yash Parekh

1,5052 gold badges21 silver badges30 bronze badges

answered May 4, 2015 at 5:02

Pratik BodaPratik Boda

3942 silver badges6 bronze badges

It is easy one. You can get the host name by this simple code.

$ip = getHostByName[getHostName[]];

Or you can also use $_SERVER['HTTP_HOST'] to get the hostname.

double-beep

4,57613 gold badges30 silver badges40 bronze badges

answered Apr 11, 2019 at 12:32

0

$_SERVER['SERVER_NAME']

It worked for me.

answered Apr 1, 2020 at 22:42

FakhamatiaFakhamatia

8623 gold badges11 silver badges21 bronze badges

For Windows:

exec['arp -a',$sa];
$ipa = [];
foreach[$sa as $s]
    if [strpos[$s,'Interface:']===0]
        $ipa[] = explode[' ',$s][1];

print_r[$ipa];

The $ipa array returns all local IPs of the system

answered Jun 26, 2021 at 22:27

P.O.W.P.O.W.

1,6451 gold badge14 silver badges13 bronze badges

I fiddled with this question for a server-side php [running from Linux terminal]

I exploded 'ifconfig' and trimmed it down to the IP address.

Here it is:

$interface_to_detect = 'wlan0';
echo explode[' ',explode[':',explode['inet addr',explode[$interface_to_detect,trim[`ifconfig`]][1]][1]][1]][0];

And of course change 'wlan0' to your desired network device.

My output is:

192.168.1.5

answered Jan 28, 2014 at 3:47

GonenGonen

3913 silver badges4 bronze badges

In windows

$exec = 'ipconfig | findstr /R /C:"IPv4.*"';
exec[$exec, $output];
preg_match['/\d+\.\d+\.\d+\.\d+/', $output[0], $matches];
print_r[$matches[0]];

answered Dec 3, 2020 at 6:21

If you are in a dev environment on OS X, connected via Wifi:

echo exec["/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2"];

answered Aug 25, 2016 at 13:33

gpupogpupo

9129 silver badges16 bronze badges

To get the public IP of your server:

$publicIP = getHostByName[$_SERVER['HTTP_HOST']];
echo $publicIP;

// or

$publicIP = getHostByName[$_SERVER['SERVER_NAME']];
echo $publicIP;

If none of these global variables are available in your system or if you are in a LAN, you can query an external service to get your public IP:

$publicIP = file_get_contents['//api.ipify.org/'];
echo $publicIP;

// or

$publicIP = file_get_contents['//checkip.amazonaws.com/'];
echo $publicIP;

answered Jun 13 at 0:05

GeorgePGeorgeP

6507 silver badges23 bronze badges

$_SERVER['REMOTE_ADDR']
  • PHP_SELF Returns the filename of the current script with the path relative to the root

  • SERVER_PROTOCOL Returns the name and revision of the page-requested protocol

  • REQUEST_METHOD Returns the request method used to access the page

  • DOCUMENT_ROOT Returns the root directory under which the current script is executing

Sirko

70.5k19 gold badges143 silver badges175 bronze badges

answered Apr 20, 2013 at 7:34

1

Try this

$localIP = gethostbyname[trim['hostname']];

answered Jul 19, 2012 at 13:54

Chủ Đề