2012-08-13 61 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地址提供了非常有用的類。