2017-04-08 9 views
1

IPv4 주소가 있습니다. 전의.PHP를 사용하여 IPv4/IPv6 주소가 활성화되어 있는지 확인하십시오.

172.19.20.21 나는 그것은 완벽하게 잘 작동이

$fs = @fsockopen($ip,$port,$errno,$errstr,3); 
if(!$fs){ 
    $error = 'SSC is down'; 
    return Redirect::to('/')->with('error', $error) 
    ->withInput(Request::except('password')); 
} 

을 수행하는 데 사용됩니다.

이제 IPv6 주소 예가 있습니다. 3000::1

if ((strpos($ip, ":") > -1)){ 

    // Code for IPv6 check 
    $fs = @fsockopen($ip,$port,$errno,$errstr,3); 
    if(!$fs){ 
     $error = 'SSC is down'; 
     return Redirect::to('/')->with('error', $error) 
     ->withInput(Request::except('password')); 
    } 

}else{ 

    // Code for IPv4 check 
    $fs = @fsockopen($ip,$port,$errno,$errstr,3); 
    if(!$fs){ 
     $error = 'SSC is down'; 
     return Redirect::to('/')->with('error', $error) 
     ->withInput(Request::except('password')); 
    } 
} 

위의 코드를 사용할 수 있습니까? 아니면 IPv6에 대한 다른 솔루션을 찾아야합니까?

+0

'$ ip_address'에있는 IP가 IP인지 100 % 확신 할 경우 v4와 v6 만 구분됩니다. 그게 괜찮 으면 다음이 작동합니다. – apokryfos

+2

'if'와'else' 블록이 동일하기 때문에 기본적으로 "코드를 변경하지 않으면 IPv6에서도 사용할 수 있습니까?" 내 대답은 "너 해봤 어?" – IMSoP

답변

1

IP 주소를 구문 분석하는 내장 방법은 inet_pton()입니다 :

이 함수는 주소 패밀리 적합한 32 비트 또는에 사람이 읽을 수있는 IPv4 또는 IPv6 주소를 (PHP 이 IPv6 지원으로 구축 된 경우 사용)으로 변환 128 비트 바이너리 구조.

결과 바이트 계산, 예를 들어 당신이 할 수있는 형식을 확인하려면 : 당신은이 필요한 이유를 정확하게 사용하는 경우 (

strlen(inet_pton($ip)) 
4 bytes = 32 bits = IPv4 
16 bytes = 128 bits = IPv6 

는하지만, 그것은 종류의 불분명