你好抱歉打扰你们。但我在杂志上读到了一些关于将代码移植到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还有其他一些我需要做的事,谢谢)
答案 0 :(得分:9)
::1
是localhost的IPv6地址,就像127.0.0.1
是localhost的IPv4地址一样。所以你 看到了客户端的IPv6地址。
套接字地址中的字段记录在Python socket
documentation中。他们是:
Flowinfo和scope-id是IPv6的新增功能。 Flowinfo包含流标签,该标签在RFC 6437中指定。如果您不知道如何使用它,可以放心地将其保留在0
。当地址在多个范围内有效时,将使用scope-id。例如,IPv6 link-local addresses在每个IPv6接口上都有效,但是无法将它们从一个接口路由到另一个接口。因此,如果要与链接本地地址通信,则必须指定要使用的接口。 scope-id是接口的编号。
将代码移植到IPv6时,您必须考虑一些事情。处理您的套接字已经更改。您还应该查看名称解析并使用支持IPv4和IPv6的功能(即不使用gethostbyname()但使用getaddrinfo()等。)并且在存储IP地址时不要忘记分配足够的空间。 IPv6地址比IPv4地址占用更多空间。
PS:IPy库为处理IP地址提供了非常有用的类。