如何使用TCL将ipv4转换为ipv6地址

问题描述 投票:-1回答:2

给定任何ipv4 IP地址(例如:10.24.13.91),应将其转换为ipv6地址(预期输出:: :: FFFF:0A18:0D5B)如何编写将任何ipv4地址转换为ipv6地址的TCL脚本,如上所述。

tcl
2个回答
1
投票

ip package in Tcllib在这里很有帮助,但并没有完成整个工作。 (您正在制作IPv4映射的IPv6地址,如RFC 3513中所定义。)

package require ip

proc IPv4toIPv6 {addr} {
    if {![ip::is ipv4 $addr]} {
        error "need an IPv4 address"
    }
    set raw [ip::toInteger $addr]
    return [ip::normalize [format "::FFFF:%04x:%04x" [expr {$raw >> 16}] [expr {$raw & 0xFFFF}]]]
}

set v6 [IPv4toIPv6 10.24.13.91]
puts "Full address: $v6"
# Full address: 0000:0000:0000:0000:0000:ffff:0a18:0d5b
puts "Abbreviated: [ip::contract $v6]"
# Abbreviated: ::ffff:a18:d5b

看起来对我来说。


0
投票
   proc IPv4toIPv6 { addr } {
        if {![ip::is ipv4 $addr]} {
            error "addr should be an IPv4 address"
        }
        set raw 0
        set octets [lreverse [split $addr .]]
        for { set i 0 } { $i < 4 } { incr i } {
            set raw [expr { 256 ** $i * [lindex $octets $i ] + $raw }]
            }

        set ipv6 [ip::normalize [format "::FFFF:%04x:%04x" [expr {$raw >> 16}] [expr {$raw & 0xFFFF}]]]
        return [ip::contract $ipv6]
    }

只是一个解决方法。上述逻辑可以按预期用于任何Ipv4 ips。 !!!!

© www.soinside.com 2019 - 2024. All rights reserved.