使用PHP检查IPv4/IPv6地址是否已打开
我有一个IPv4地址。例如使用PHP检查IPv4/IPv6地址是否已打开,php,linux,ping,ipv6,ipv4,Php,Linux,Ping,Ipv6,Ipv4,我有一个IPv4地址。例如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
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寻找其他解决方案?解析IP地址的内置方法是: 此函数用于转换人类可读的IPv4或IPv6地址(如果是PHP) 已在启用IPv6支持的情况下构建到地址族中 适当的32位或128位二进制结构 例如,要确定格式,可以计算结果字节数:
strlen(inet_pton($ip))
4字节=32位=IPv4
16字节=128位=IPv6
(不过,在您的具体使用案例中,首先不清楚您为什么需要它。)如果您100%确定,
$ip\u address
中的内容是ip,那么这只会区分v4和v6。如果你同意的话,这应该行得通。你的If
和else
块是相同的,所以你基本上是在说“如果我不更改代码,它是否适用于IPv6?”我的回答是,“你试过了吗?”