代码之家  ›  专栏  ›  技术社区  ›  Mikhail T.

如何将OpenSSL::ASN1::ASN1数据转换为IP地址?

  •  2
  • Mikhail T.  · 技术社区  · 9 年前

    我有一个对象,它指向:

       #<OpenSSL::ASN1::ASN1Data:0x0000000803ab37a8
        @infinite_length=false,
        @tag=7,
        @tag_class=:CONTEXT_SPECIFIC,
        @value="\x7F\x00\x00\x01">]>
    

    很容易看出 @value

    目前我正在按以下方式进行:

    ip = v.value.split('').map {|octet| octet.ord }.join('.')
    

    它在我的机器上工作,但我想知道,这种方法有多可靠。。。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Mikhail T.    9 年前

    好的,正如我在a related question openssl/ssl.rb ). 它们同时处理IPv4和IPv6地址,因此使用 unpack split

            case v.value.size
            when 4
                ip = v.value.unpack('C*').join('.')
            when 16
                ip = v.value.unpack('n*').map { |o| sprintf("%X", o) }.join(':')
            else
                STDERR.print "The encountered IP-address is neither IPv4 nor IPv6\n"
                next
            end
    
    推荐文章