0

したがって、この IP のリストを CSV ファイルにまとめました。ファイルを cat すると、それらはすべて異なる行に表示され、file コマンドはそれが ASCII テキストであることを示します。

ただし、ファイルをループして別の IP のアドレスを解決しようとすると、「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 ...)、1 つの 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 に答える