【问题标题】:gaierror: [Errno 8] nodename nor servname provided, or not knowngaierror: [Errno 8] nodename or servname provided, or not known
【发布时间】:2020-10-08 10:05:41
【问题描述】:

我想从文本文件中解析主机名的 IP 地址。以下代码适用于 ipv4 地址:

hostname1.txt:
google.com
yahoo.com
facebook.com
cnn.com

with open('hostname1.txt','r') as hostnames:
    for website in hostnames:
        ip = socket.gethostbyname(website.strip())
        
        print ('{0} ip address is: {1}'.format(website,ip))

对于 ipv6,我使用了下面的代码,当文本文件中只有一个主机名时它可以正常工作。如果文本文件中有多个主机名,我会收到此错误“gaierror: [Errno 8] nodename nor servname provided, or not known”

import socket

with open('hostname1.txt') as f:
    hostname = f.readlines()
    
    for website in hostname:
        ais = socket.getaddrinfo(website,0,0,0,0)
        
        for result in ais:
            ip = result[-1][0]
            print ('{0} ip address is {1}'.format(website,ip))
gaierror: [Errno 8] nodename nor servname provided, or not known

【问题讨论】:

  • 尝试调试您的代码,看看在第二次循环运行时会发生什么。如果它在第一次而不是第二次有效,那么肯定会出现问题。
  • 请编辑标题,使其清晰

标签: python dns hostname


【解决方案1】:

readlines 保留换行符,因此您的 hostname 列表为 ['google.com\n', 'yahoo.com\n', 'facebook.com\n', 'cnn.com\n'] 您在 IPV4 部分而不是 IPV6 部分中剥离了 \nl。 使用以下内容:

ais = socket.getaddrinfo(website.rstrip(),0,0,0,0)

你会得到正确的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2012-08-09
    • 2020-12-11
    • 2012-11-06
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多