PHP 시스템의 로컬 IP를 가져오는 방법
컴퓨터의 로컬 IP(예: 192.*....)를 취득할 필요가 있습니다.이게 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 명령을 삭제하지 마십시오. 삭제하지 않으면 컴퓨터 이름이 표시됩니다.
BACKTIKS(특별 따옴표):이는 PHP가 셸 명령으로 이러한 "특수 따옴표"(backticks) 사이에서 무엇이든지 실행하려고 시도하고 결과 출력을 반환하기 때문입니다.
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
로컬 머신의 외부 IP 주소를 취득하는 신뢰성 높은 방법은 라우팅 테이블을 조회하는 것입니다.단, PHP에서는 직접 문의할 수 없습니다.
다만, UDP 소켓을 퍼블릭주소에 바인드 해, 주소를 취득하는 것으로써, 시스템이 이 처리를 실시할 수 있습니다.
$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_connectUDP 소켓이기 때문에 네트워크트래픽은 발생하지 않습니다.
다음을 수행합니다(서버가 Linux인 경우).
$command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'";
$localIP = exec ($command);
echo $localIP;
로컬이란 무엇을 의미하느냐에 따라 달라집니다.
로컬이 PHP 코드를 실행하고 있는 서버/시스템의 주소를 의미한다면, 논의할 수 있는 방법은 두 가지가 있습니다.만약 PHP가 웹 서버를 통해 실행되고 있다면, 당신은 다음을 읽음으로써 서버 주소를 얻을 수 있습니다.$_SERVER['SERVER_ADDR']PHP가 명령줄 인터페이스를 통해 실행되고 있다면 셸을 실행해야 합니다.ipconfig(Windows) /ifconfig(*nix) 및 주소를 grep 출력합니다.
로컬이 웹 사이트 방문자의 리모트주소를 의미하지만 외부 IP 주소가 아닌 경우(구체적으로 192.*라고 했으므로) 운이 없습니다.NAT 라우팅의 요점은 그 주소를 숨기는 것입니다.IP 주소 뒤에 있는 개별 시스템의 로컬 주소를 식별할 수는 없지만, 여러 시스템이 동일한 IP에서 액세스하는 경우 이를 구별하는 데 도움이 될 수 있는 몇 가지 속임수(사용자 에이전트, MAC 주소)가 있습니다.
호스트명(1)은, 다음의 IP 주소를 지정할 수 있습니다.hostname --ip-address또는 남자가 말하는 것처럼hostname --all-ip-addresses
그것은 매우 단순하고 위의 답변들은 일을 복잡하게 만든다.이 방법을 사용하면 로컬 IP 주소와 퍼블릭 IP 주소를 모두 얻을 수 있습니다.
<?php
$publicIP = file_get_contents("http://ipecho.net/plain");
echo $publicIP;
$localIp = gethostbyname(gethostname());
echo $localIp;
?>
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',
)
다음 php 코드를 사용할 수 있습니다.
$localIP = getHostByName(getHostName());
// Displaying the address
echo $localIP;
시스템의 ipv4 를 취득하는 경우는, 다음의 조작을 실시해 주세요.
shell_exec("ip route get 1.2.3.4 | awk '{print $7}'")
$localIP = gethostbyname(trim(exec("hostname")));
윈도우 PC에서 시도해보니 작동했고 리눅스에서도 작동될 것 같습니다.
그것은 쉽다.이 간단한 코드로 호스트명을 얻을 수 있습니다.
$ip = getHostByName(getHostName());
'아까보다'를 쓸 도 있어요.$_SERVER['HTTP_HOST']호스트명을 취득합니다.
$_SERVER['SERVER_NAME']
그것은 나에게 효과가 있었다.
Windows 의 경우:
exec('arp -a',$sa);
$ipa = [];
foreach($sa as $s)
if (strpos($s,'Interface:')===0)
$ipa[] = explode(' ',$s)[1];
print_r($ipa);
$ipa 어레이는 시스템의 모든 로컬 IP를 반환합니다.
서버측 php(Linux 터미널에서 실행)에 대해 이 질문을 만지작거렸습니다.
ifconfig를 터트리고 IP 주소로 줄였습니다.
여기 있습니다.
$interface_to_detect = 'wlan0';
echo explode(' ',explode(':',explode('inet addr',explode($interface_to_detect,trim(`ifconfig`))[1])[1])[1])[0];
물론 wlan0을 원하는 네트워크 디바이스로 변경합니다.
출력은 다음과 같습니다.
192.168.1.5
창가
$exec = 'ipconfig | findstr /R /C:"IPv4.*"';
exec($exec, $output);
preg_match('/\d+\.\d+\.\d+\.\d+/', $output[0], $matches);
print_r($matches[0]);
OS X에서 WiFi로 연결된 개발 환경에 있는 경우:
echo exec("/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2");
서버의 퍼블릭 IP 를 취득하려면 , 다음의 순서에 따릅니다.
$publicIP = getHostByName($_SERVER['HTTP_HOST']);
echo $publicIP;
// or
$publicIP = getHostByName($_SERVER['SERVER_NAME']);
echo $publicIP;
시스템에서 다음 글로벌 변수를 사용할 수 없는 경우 또는 LAN에 있는 경우 외부 서비스에 문의하여 퍼블릭 IP를 얻을 수 있습니다.
$publicIP = file_get_contents('https://api.ipify.org/');
echo $publicIP;
// or
$publicIP = file_get_contents('http://checkip.amazonaws.com/');
echo $publicIP;
$_SERVER['REMOTE_ADDR']
PHP_SELF을 루트 합니다.SERVER_PROTOCOL및 합니다.REQUEST_METHOD메서드를 합니다.DOCUMENT_ROOT되고 있는 합니다.
이거 드셔보세요
$localIP = gethostbyname(trim('hostname'));
언급URL : https://stackoverflow.com/questions/3219178/php-how-to-get-local-ip-of-system
'programing' 카테고리의 다른 글
| 다른 경우 트리거(사이) (0) | 2022.09.21 |
|---|---|
| set Timeout 콜백에 올바른 "이" 컨텍스트를 전달하시겠습니까? (0) | 2022.09.21 |
| HttpURL 접속 타임아웃 설정 (0) | 2022.09.21 |
| python re.sub 그룹: \number 뒤의 숫자 (0) | 2022.09.21 |
| nodejsmysql 오류: Connection lost 서버가 연결을 닫았습니다. (0) | 2022.09.20 |