JavaScript将IPv6更改为IPv4?

时间:2014-04-18 02:51:30

标签: javascript php ipv6 ipv4 data-conversion

我用JavaScript不是最好的。我能够在PHP中使用一个很好的ipv62long()函数,并能够帮助某人解决它的问题。但是在我看来,发布到PHP只是为了得到一个结果是非常讨厌的。可以在JavaScript中实现这样的功能吗?我想要实现它的功能是什么?我尝试了无数次搜索,他们总是反馈给PHP示例。

function ipv62long( $ip ) {
    $binNum = '';
    foreach ( unpack('C*', inet_pton( $ip ) ) as $byte ) {
        $binNum .= str_pad( decbin( $byte ), 8, "0", STR_PAD_LEFT );
    }
    return base_convert( ltrim($binNum, '0' ), 2, 10 );
}

$ip = ipv62long(urldecode('2001%3a0%3a9d38%3a6abd%3a248d%3a2ee4%3a3f57%3afd26'));
echo $ip;
echo '<p>' . long2ip( $ip ) . '</p>';

1 个答案:

答案 0 :(得分:0)

只是为了踢,我也是用PHP做的:)

更多地解释PHP: 我使用inet_pton来获取二进制值,然后使用OR和位移我构建一个新的长值(4个字节)。

由于inet_pton返回一个结构,我使用ord来获取数据的十进制值。

然后我使用NOT反转long并将其传递给long2ip ...

<?PHP
$data = inet_pton(urldecode('2001%3a0%3a9d38%3a6abd%3a248d%3a2ee4%3a3f57%3afd26'));
// 192.168.2.217

// build a long 4 bytes using binary ORing
$ip_as_long = ord($data[15]);
$ip_as_long |= ord($data[14]) << 8;
$ip_as_long |= ord($data[13]) << 16;
$ip_as_long |= ord($data[12])<<24;

echo long2ip(~$ip_as_long);
?>

的Javascript

 <script>
    var value = '2001:0:9d38:6abd:248d:2ee4:3f57:fd26';

    var split_str = value.split(':');
    value = split_str[6] + split_str[7];

    var ip_1 = ~parseInt(value.substring(0,2),16) & 0xFF;
    var ip_2 =~parseInt(value.substring(2,4),16) & 0xFF;
    var ip_3 =~parseInt(value.substring(4,6),16) & 0xFF;
    var ip_4 =~parseInt(value.substring(6,8),16) & 0xFF;

    alert(ip_1+'.'+ip_2+'.'+ip_3+'.'+ip_4);
    </script>

享受。