代码之家  ›  专栏  ›  技术社区  ›  ArekBulski

如何在python socket模块中禁用DNS解析?

  •  0
  • ArekBulski  · 技术社区  · 8 年前

    我有一个应用程序需要实现无DNS选项。因此,无论哪一个问题,只要方便:

    • 如何区分字符串IP地址和字符串主机名(域)?
    • 如何在python socket模块中全局禁用dns?

    要想知道no-dns选项的含义,应该做的是:我认为它可以确保域主机名根本不被解析,程序只是存在一个错误。

    1 回复  |  直到 8 年前
        1
  •  1
  •   J_H    8 年前

    您想区分IP号码和主机名。

    对于IPv4,这是微不足道的:

    import re
    
    def is_ipv4(host):
        m = re.search(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$', host)
        return m is not None
    

    我把大卫·西兹德克的 more complex ipv6 case :

        m = re.search(r'(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))', host)
    

    或者,与其走Regex路线,不如看看是否 socket.inet_pton() (两次)将升起箭头。

    推荐文章