2013-03-20 135 views
0

我正在寫一個簡單的客戶端和服務器,並希望引入一些簡單的邊界檢查以確保用戶輸入的IP地址的格式正確(即int.int.int.int),有沒有人有任何關於hwo的建議,這可以在我的代碼剛剛接受該值,並會拋出一個操作系統錯誤,如果它無效。但是我想阻止用戶能夠在這裏輸入任何內容。Python指定IP格式作爲輸入

def ipEntered(): 
      global ipEntered 
      ipEntered = input("Please enter the ip address of the server you wish to connect with:") 

由於

+0

不要忘記允許hex:hex:hex ...等 - IOW:支持IPv6。我們同時在2013年! – glglgl 2013-03-20 15:57:33

回答

2

使用ipaddress module(在Python 3.3引入):

import ipaddress 

def ipEntered(): 
    while True: 
     try: 
      val = input("Please enter the ip address of the server you wish to connect with:") 
      return ipaddress.ip_address(val) 
     except ValueError: 
      print("Not a valid IP address") 

將接受的形式"100.200.30.40",例如的IPv4地址一個點分佈的四元組,以及兩種長寫形式的IPv6地址(由:分隔的8組4個十六進制字符)和簡寫形式。

如果您只想接受IPv4地址,請改爲使用return ipaddress.IPv4Address(val)

+0

如果用戶已經輸入了IP地址格式,這樣會工作嗎,可以說用戶輸入172.0.0.1還是使用像172001這樣的int來創建IP地址? – user1978826 2013-03-20 15:48:18

+0

@ user1978826:是的,這適用於格式化的IP地址。 – 2013-03-20 15:48:57

+0

我認爲值得注意的是,這個模塊將接受IP地址可以使用的所有不同方式,而不僅僅是四位數字分隔的表單;在你寫的代碼中,它也會接受IPv6地址。前者可能是一個好主意(用戶可能有充分的理由以其他形式表達IP地址),但後者是否可以接受取決於應用程序稍後將如何處理該IP地址。 – 2013-03-20 16:34:19