Programing

PHP에서 서버 IP 주소를 식별하는 방법

crosscheck 2020. 7. 28. 07:54
반응형

PHP에서 서버 IP 주소를 식별하는 방법


PHP에서 서버 IP 주소를 어떻게 식별 할 수 있습니까?


서버 ip에서 이와 같이 :

$_SERVER['SERVER_ADDR'];

이 포트에 대한

$_SERVER['SERVER_PORT'];

PHP 버전 5.3 이상을 사용하는 경우 다음을 수행 할 수 있습니다.

$host= gethostname();
$ip = gethostbyname($host);

이것은 웹 서버를 통해 실행되지 않고 독립형 스크립트를 실행하는 경우에 효과적입니다.


예를 들면 다음과 같습니다.

$_SERVER['SERVER_ADDR']

IIS를 사용하는 경우 다음을 시도하십시오.

$_SERVER['LOCAL_ADDR']

나는이 페이지에 와서 원격 컴퓨터 중 하나가 아닌 내 자신의 IP 주소를 얻는 방법을 찾고있었습니다.

Windows 시스템에서는 작동하지 않습니다.

그러나 누군가 내가 찾던 것을 검색하는 경우 :

#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;

( Linux 및 OS X에서 로컬 시스템의 기본 IP 주소를 얻는 방법 에서 뻔뻔하게 조정 되었습니까? )


가장 많이 투표 된 답변 중 어느 것도 서버의 공개 주소를 안정적으로 반환하지 않습니다. 일반적으로 $_SERVER['SERVER_ADDR']정확하지만 VPN을 통해 서버에 액세스하는 경우 공용 주소가 아닌 내부 네트워크 주소를 반환 할 가능성이 있으며 동일한 네트워크에 있지 않은 경우에도 일부 구성은 단순히 비어 있거나 다른 것으로 지정됩니다. 값.

마찬가지로 $host= gethostname(); $ip = gethostbyname($host);DNS (내부 구성 또는 외부 레코드)와 서버의 호스트 이름 설정을 모두 사용하여 서버의 IP 주소를 추정하기 때문에 올바른 값을 반환하지 않는 시나리오가 있습니다 . 이 두 단계는 모두 결함이 있습니다. 예를 들어, 서버의 호스트 이름이 도메인 이름 (예 HOSTNAME=yahoo.com:) 과 같은 형식 인 경우 (최소한 php5.4 / Centos6 설정에서) gethostbyname로컬 서버가 아닌 Yahoo.com의 주소를 찾는 것으로 바로 건너 뜁니다.

또한 gethostbyname공개 DNS 레코드로 localhost대체 되기 때문에 게시되지 않거나 잘못된 공개 DNS 레코드가있는 테스트 서버 (예 : IP 주소로 서버에 액세스 하거나 로컬 hosts파일을 사용하여 공개 DNS를 재정의하는 경우 ) IP 주소가없는 경우 (호스트 이름 만 반환) 공용 DNS 레코드에 지정된 잘못된 주소가 있거나 도메인에 대한 와일드 카드가있는 경우 더 나쁜 주소를 반환합니다.

상황에 따라 다음과 같은 방법으로 세 번째 방법을 시도 할 수도 있습니다.

$external_ip = exec('curl http://ipecho.net/plain; echo');

여기에는 고유 한 결함이 있으며 (특정 타사 사이트에 의존하며, 다른 호스트 또는 프록시를 통해 아웃 바운드 연결을 라우팅하는 네트워크 설정이 gethostbyname있을 수 있음) 느릴 수 있습니다. 솔직히 어떤 접근 방식이 가장 올바른지 잘 모르겠지만 특정 시나리오 / 구성은 이러한 모든 접근 방식에 대해 잘못된 결과를 초래할 것입니다 ... 가능한 경우 접근 방식을 확인하십시오. using은 예상 값을 반환합니다.


이것은 서버에 설치된 curl에 대해 걱정하지 않고 위 예제의 적응으로 사용할 수있는 것입니다.

<?php
      // create a new cURL resource
      $ch = curl_init ();

      // set URL and other appropriate options
      curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
      curl_setopt ($ch, CURLOPT_HEADER, 0);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

      // grab URL and pass it to the browser

      $ip = curl_exec ($ch);
      echo "The public ip for this server is: $ip";
      // close cURL resource, and free up system resources
      curl_close ($ch);
    ?>

$ _SERVER 배열을 확인하십시오

echo $_SERVER['SERVER_ADDR'];

bash 쉘에서 PHP를 사용하는 경우 다음을 사용할 수 있습니다.

$server_name=exec('hostname');

때문에 $_SERVER[] SERVER_ADDR, HTTP_HOST그리고 SERVER_NAME설정되어 있지 않습니다.


The previous answers all give $_SERVER['SERVER_ADDR']. This will not work on some IIS installations. If you want this to work on IIS, then use the following:

$server_ip = gethostbyname($_SERVER['SERVER_NAME']);

I just created a simple script that will bring back the $_SERVER['REMOTE_ADDR'] and $_SERVER['SERVER_ADDR'] in IIS so you don't have to change every variable. Just paste this text in your php file that is included in every page.

/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }

$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";

You may have to use $HTTP_SERVER_VARS['server_ADDR'] if you are not getting anything from above answers and if you are using older version of PHP


I found this to work for me: GetHostByName("");

Running XAMPP v1.7.1 on Windows 7 running Apache webserver. Unfortunately it just give my gateway IP address.


Check the $_SERVER array

echo $_SERVER['SERVER_ADDR'];

Like this:

$_SERVER['SERVER_ADDR'];

참고URL : https://stackoverflow.com/questions/5800927/how-to-identify-server-ip-address-in-php

반응형