为什么IPv6不像IPv4那样显示客户端IP名称呢?

Wan*_*oel -5 python ipv6

嗨抱歉打扰你们.但我在杂志上读到了一些关于将代码移植到IPV6的内容,所以我试着改变这段代码(socket.AF_INET6,socket.SOCK_STREAM)

在python中它可以工作,但问题是服务器不显示客户端ip.

我希望它能像这样显示出来.得到了连接('127.0.0.1',59815).

但是对于它来说,它搞砸了所有的事情并且给了我这个(从(':: 1',59815,0,0)获得连接),所以如果我问这是客户端IP吗?那两个最后的零(0,0)究竟是什么意思?我该怎么做才能将我的代码移植到IPv6.谢谢我使用python(geany)

所以,如果我这样做(socket.socket(socket.AF_INET6,socket.SOCK_STREAM))我将我的代码放到IPV6,o还有其他一些我需要做的事感谢)

San*_*ann 9

::1是localhost的IPv6地址,就像localhost 127.0.0.1的IPv4地址一样.所以,你看到客户端的IPv6地址.

套接字地址中的字段记录在Python socket文档中.他们是:

  • 主办
  • 港口
  • flowinfo
  • 范围-ID

Flowinfo和scope-id是IPv6的新增功能.Flowinfo包含流标签,在RFC 6437中指定.如果你不知道如何使用它,你可以安全地离开它0.当地址在多个范围内有效时,将使用scope-id.例如,IPv6 链路本地地址在每个IPv6接口上都有效,但是不可能将它们从一个接口路由到另一个接口.因此,如果要与链接本地地址通信,则必须指定要使用的接口.scope-id是接口的编号.

将代码移植到IPv6时,您必须考虑一些事情.处理您的套接字已经更改.您还应该查看名称解析并使用支持IPv4和IPv6的函数(即不使用gethostbyname()但使用getaddrinfo()等.)并且在存储IP地址时不要忘记分配足够的空间.IPv6地址比IPv4地址占用更多空间.

PS:IPy库提供了非常有用的类来处理IP地址.