2012-08-13 70 views
-5

你好,很抱歉打扰你们。但我读杂志关于移植代码到IPV6,所以我试着改变这个代码(socket.AF_INET6,socket.SOCK_STREAM)为什么不像IPv4那样使用IPv6显示客户端IP名称呢?

在Python中它的工作原理,但问题是服务器不显示客户端IP 。

我希望它能像这样显示它。从('127.0.0.1',59815)获得了连接。 (':: 1',59815,0,0)) 因此,如果我问的是客户端IP吗?以及最后两个零(0,0)真的意味着什么?我该如何将我的代码移植到IPv6。?谢谢iam使用python(geany)

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

+4

':: 1' _is_本地主机IPv6 ip-address。 – 2012-08-13 06:41:48

回答

9

::1是本地主机的IPv6地址,就像127.0.0.1是本地主机的IPv4地址。所以你看到客户端的IPv6地址。

套接字地址中的字段记录在Python socket documentation中。它们是:

  • 主机
  • 端口
  • flowinfo
  • 范围-ID

Flowinfo和范围-ID是新的IPv6。 Flowinfo包含流程标签,该标签在RFC 6437中指定。如果你不知道如何使用它,你可以放心地把它放在0。当地址在多个作用域中有效时使用作用域ID。 IPv6 link-local addresses例如在每个IPv6接口上都有效,但将它们从一个接口路由到另一个接口是不可能的。所以如果你想和链接本地地址通信,你必须指定使用哪个接口。 scope-id是接口的编号。

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

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