指定IP格式作为输入的Python

指定IP格式作为输入的Python,python,input,python-3.x,ip-address,Python,Input,Python 3.x,Ip Address,我正在编写一个简单的客户机和服务器,并希望引入一些简单的边界检查,以确保用户输入的IP地址的格式正确,即(int.int.int.int),是否有人对HW有任何建议,在我的代码刚刚接受该值时可以这样做,如果该值无效,将抛出操作系统错误。但我想阻止用户在这里输入任何内容 def ipEntered(): global ipEntered ipEntered = input("Please enter the ip address of the server

我正在编写一个简单的客户机和服务器,并希望引入一些简单的边界检查,以确保用户输入的IP地址的格式正确,即(int.int.int.int),是否有人对HW有任何建议,在我的代码刚刚接受该值时可以这样做,如果该值无效,将抛出操作系统错误。但我想阻止用户在这里输入任何内容

 def ipEntered():
          global ipEntered
          ipEntered = input("Please enter the ip address of the server you wish to connect with:")
感谢使用(在Python 3.3中引入的):

它将接受形式为
“100.200.30.40”
的IPv4地址,例如虚线四元组,以及同时采用正楷形式(8组4个十六进制字符,由
分隔)和速记形式的IPv6地址


如果您只想接受IPv4地址,请使用
返回ipaddress.IPv4Address(val)

如果用户已经输入了ip地址格式,这是否有效,假设用户输入172.0.0.1,还是使用像172001这样的整数创建ip地址?我认为值得注意的是,该模块将接受ip地址的所有不同方式,而不仅仅是以句点形式分隔的四个数字;在您编写的代码中,它还将接受IPv6地址。前者可能是一个好主意(用户可能有很好的理由用其他形式表达IP地址),但后者是否可以接受将取决于应用程序稍后将如何处理该IP地址。@MartinAtkins:的确;希望任何想要使用推荐模块的人都能阅读文档。:-)@MartinAtkins:但是请注意,因为使用了
input()
,所以只会传入字符串,在这种情况下,模块只接受4个八位点形式的IPv4地址,以及完整形式或速记形式的IPv6地址。感谢您的建议,这个应用程序只是用来演示一个原型设备,所以目前IPv4已经足够了。。。等等,以及-IOW:支持IPv6。我们有2013年!
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")