development

PHP 시스템의 로컬 IP를 얻는 방법

big-blog 2020. 9. 17. 08:25
반응형

PHP 시스템의 로컬 IP를 얻는 방법


192. * ....와 같은 컴퓨터의 로컬 IP를 얻어야합니다. 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가 "특수 따옴표"(백틱) 사이에있는 모든 것을 쉘 명령으로 실행하고 결과 출력을 반환하기 때문에 작동합니다.

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;

로컬 컴퓨터의 기본 외부 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(예 : 인터넷에 연결되어 있지 않음).


지역의 의미에 따라 다릅니다.

로컬로 PHP 코드를 실행하는 서버 / 시스템의 주소를 의미한다면 논의 할 두 가지 방법이 있습니다. PHP가 웹 서버를 통해 실행되는 경우을 읽어 서버 주소를 얻을 수 있습니다 $_SERVER['SERVER_ADDR']. PHP가 명령 줄 인터페이스를 통해 실행되는 경우 쉘을 실행 ipconfig(Windows) / ifconfig(* nix)하고 주소를 grep해야합니다.

로컬로 웹 사이트 방문자의 원격 주소를 의미하지만 외부 IP 주소가 아닌 경우 (구체적으로 192. *라고 말 했으므로) 운이 좋지 않은 것입니다. NAT 라우팅의 요점은 해당 주소를 숨기는 것입니다. IP 주소 뒤에있는 개별 컴퓨터의 로컬 주소를 식별 할 수는 없지만 동일한 IP에서 액세스하는 여러 컴퓨터가 있는지 구별하는 데 도움이되는 몇 가지 트릭 (사용자 에이전트, 아마도 Mac 주소)이 있습니다.


hostname (1)은 IP 주소를 알 수 있습니다. hostname --ip-address또는 사람이 말했듯이 사용하는 것이 좋습니다.hostname --all-ip-addresses


Linux 호스트의 CLI에서 일반 사용자로 이것을 시도 할 수 있습니다.

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',
)

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

나는 Windows PC에서 시도해 보았고 작동했으며 Linux에서도 작동한다고 생각합니다.


나는 서버 측 PHP (Linux 터미널에서 실행)에 대해이 질문을 던졌습니다.

나는 'ifconfig'를 분해하여 IP 주소로 줄였습니다.

여기있어:

$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

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

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

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

?>

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

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

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.


$_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


Try this

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

참고URL : https://stackoverflow.com/questions/3219178/php-how-to-get-local-ip-of-system

반응형