-5

您好很抱歉打扰各位了。但我在杂志上读到了一些关于将代码移植到 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上吗,还有其他我需要做的事情吗谢谢)

4

1 回答 1

9

::1是 localhost 的 IPv6 地址,就像 localhost127.0.0.1的 IPv4 地址一样。所以您看到的是客户端的 IPv6 地址。

套接字地址中的字段记录在Pythonsocket文档中。他们是:

  • 主持人
  • 港口
  • 流量信息
  • 范围标识

Flowinfo 和 scope-id 是 IPv6 的新内容。Flowinfo 包含在RFC 6437中指定的流标签。如果您不知道如何使用它,您可以放心地将其留在0. 当一个地址在多个范围内有效时,使用范围 ID。例如, IPv6链路本地地址在每个 IPv6 接口上都有效,但不可能将它们从一个接口路由到另一个接口。因此,如果您想与本地链接地址进行通信,您必须指定要使用的接口。scope-id 是接口的编号。

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

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

于 2012-08-13T08:45:39.007 回答