【问题标题】:Python IPv6 Bytes To AddressPython IPv6 字节地址
【发布时间】:2017-11-05 17:22:55
【问题描述】:

我在 iOS App Pythonista 3 上运行 python。 当我尝试获取 IPv6 地址时,它结束了 返回字节而不是格式化的地址。 现在我正在尝试找到一种方法来正确获取地址而不使用字节,或者找到一种方法使字节成为地址。 这是我为获取地址而运行的代码:

def getIPv6Addr(input):
    return socket.getaddrinfo(input, None, socket.AF_INET6)

这是输出:

[(30, 2, 17, '', (30, '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14')), (30, 1, 6, '', (30, '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14'))]

编辑:另一种解决方案是找出正在使用什么类型的编码来将此数据转换为字节。

What Makes:
2607:f8b0:4000:814::200e
become
\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14

【问题讨论】:

标签: python ipv6 pythonista


【解决方案1】:

如果你使用这个包,有一个快速的方法:

from django.utils.encoding import smart_str

a = '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14'


print(smart_str(a))

【讨论】:

  • 在尝试运行 smart_str 时,我发现 pythonista + django 不起作用,因为 django 调用子进程并且 iOS 阻止子处理。感谢您的尝试!
【解决方案2】:

您可以使用 python 附带的ipaddress 模块。只需将字节传递给ipaddress.IPv6Address 的构造函数,您就会得到一个表示地址的对象,并为您提供了很多打印和操作它的可能性。

【讨论】:

    【解决方案3】:

    解决了!

    我用十六进制对字节进行了编码,它使 它变成了地址!

    >>> getIPv6Addr("google.com")[0][4][1].encode("hex")
    '0000000000002607f8b040000811'
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2014-09-06
      • 2013-04-23
      • 1970-01-01
      相关资源
      最近更新 更多