读取主机名列表并解析为IP地址

15

我正在尝试读取一个纯文本文件,并解析每个IP地址,目前只是在屏幕上输出它们。

import socket

f = open("test.txt")
num_line = sum(1 for line in f)
f.close()

with open("test.txt", "r") as ins:
        array = []
        for line in ins:
                array.append(line)

for i in range(0,num_line):
        x = array[i]
        print x 
        data = socket.gethostbyname_ex(x)
        print data

目前我收到以下内容:

me@v:/home/# python resolve-list2.py
test.com

Traceback (most recent call last):
  File "resolve-list2.py", line 15, in <module>
    data = socket.gethostbyname_ex(x)
socket.gaierror: [Errno -2] Name or service not known

谷歌搜索那个错误似乎对我没有帮助…… 目前文本文件仅包含一行(test.com),但即使有多行/不同的主机,我仍然会遇到相同的错误。

有任何建议吗?

谢谢!


1
异常很容易解释:至少一个主机名不存在或可能存在不包含主机名的行,也许是最后一行为空行。您需要处理这两种情况。 - Klaus D.
2
可能是python:检查主机名是否已解析的重复问题。一旦您弄清如何将主机名解析为IP,问题就变成了“如何迭代字符串列表?” - Trevor Boyd Smith
没有使用 line.strip() 的错误是因为 socket.gethostbyname() 至少需要一个参数,而且由于它是从列表中读取的,我们需要一个占位符。 - the sherrr
1个回答

35
import socket
with open("test.txt", "r") as ins:
    for line in ins:
        print socket.gethostbyname(line.strip())

很酷,这比我折腾的简单/干净多了,但对我来说仍然不起作用。我再次收到了相同的错误消息:Traceback(最近的调用最先): 文件“resolve-list3.py”,第5行,在<module>中 打印套接字.gethostbyname(line) socket.gaierror:[Errno -2]名称或服务未知 - proggynewbie
@proggynewbie 奇怪,你在哪个平台上运行你的脚本了? - YCFlame
@proggynewbie 尝试剥离主机名?我已经像那样编辑了我的答案。 - YCFlame
太好了!line.strip()解决了问题!它会去除额外的字符或者什么吗?本来不应该有任何额外的字符的吧?这是在ubuntu(全新安装)上发生的,供参考。当我有足够的声望时,我会将其标记为已回答 :) 再次感谢! - proggynewbie
@proggynewbie,也许是行末的换行符导致了这个错误,通过剥离可以消除它。 - YCFlame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接