【问题标题】:Python specifying IP format as inputPython指定IP格式作为输入
【发布时间】:2013-03-20 15:25:14
【问题描述】:

我正在编写一个简单的客户端和服务器,并想引入一些简单的边界检查以确保用户输入的 IP 地址格式正确,即(int.int.int.int),有没有人有任何建议这可以在我的代码只接受该值的那一刻完成,如果它无效,将引发操作系统错误。但我想阻止用户在这里输入任何内容。

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

谢谢

【问题讨论】:

  • 不要忘记允许 hex:hex:hex... 等等 - IOW: 支持 IPv6。与此同时,我们迎来了 2013 年!

标签: python input python-3.x ip-address


【解决方案1】:

使用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)

【讨论】:

  • 如果用户已经输入了 IP 地址格式,例如用户输入 172.0.0.1 还是使用 172001 之类的 int 创建 IP 地址,这会起作用吗?
  • 我认为值得注意的是,该模块将接受IP地址可以表达的所有不同方式,而不仅仅是四位数按句点分隔的形式;在您编写的代码中,它也将接受 IPv6 地址。前者可能是一个好主意(用户可能有充分的理由以其他形式表示 IP 地址),但后者是否可接受将取决于应用程序稍后将如何处理此 IP 地址。跨度>
  • @MartinAtkins:确实;希望任何想要使用推荐模块的人阅读文档。 :-)
  • @MartinAtkins:但请注意,由于使用了input(),因此只会传入字符串,并且在那种的情况下,模块仅接受 4-八进制点分格式,以及完整格式或速记符号的 IPv6 地址。
  • 感谢您的建议,此应用程序仅用于演示原型设备,因此目前 IPv4 就足够了。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多