0

因此,我将这个 IP 列表保存在 CSV 文件中。只有一列,如果我对文件进行分类,它们都出现在不同的行上,并且文件命令告诉我它是 ASCII 文本。

但是,当我尝试遍历文件并解析不同 IP:s 的地址时,我收到错误“socket.herror: [Errno 1] Unknown host”。

由于某种原因,单元格的值不是正确的字符串,我无法将其转换为一个字符串。

from string import rstrip
from socket import gethostbyaddr

csv_file = open('csv_list.csv', "r")

for line in csv_file:
    dns_name = gethostbyaddr(str(line.rstrip('\n')))
    print "IP: " + line.rstrip('\n') + "DNS Name:" + dns_name[0]

有没有办法解决?到目前为止,我一直在考虑将文件转换为纯文本文件,将文件中的所有值添加到列表中,但我不确定最好的解决方案是什么。

有人有想法么?

提前致谢!

4

2 回答 2

3

您的问题不在于文件的读取(也可以使用 优化with ...),而是无法反向查找一个 IP。在这种情况下,该gethostbyaddr函数会引发异常。

我已经对您的示例进行了一些修改,现在它报告的错误不是带有异常的崩溃,而是打印出一条消息。

from string import rstrip
from socket import gethostbyaddr

with open('csv_list.csv', 'r') as csv_file:
    for line in csv_file:
        ip = line.strip()
        try:
            dns_name = gethostbyaddr(ip)
            print "IP: %s, DNS Name: %s" % (ip, dns_name[0])
        except Exception, e:
            print "IP: %s, DNS lookup error: %s" % (ip, e)

例如对于这个 IP 列表:

1.2.3.4
8.8.8.8
4.4.4.4
bad IP
1.2.3

它打印

IP: 1.2.3.4, DNS lookup error: [Errno 1] Unknown host
IP: 8.8.8.8, DNS Name: google-public-dns-a.google.com
IP: 4.4.4.4, DNS lookup error: [Errno 1] Unknown host
IP: bad IP, DNS lookup error: [Errno 8] nodename nor servname provided, or not known
IP: 1.2.3, DNS lookup error: [Errno 1] Unknown host
于 2012-11-25T12:36:03.377 回答
1

您也可以尝试 numpy loadtxt 从文件创建数组。

    from numpy import loadtxt
    ip_list = loadtxt("filename.csv", unpack=True)
于 2012-11-25T15:17:25.247 回答