簡體   English   中英

Python-IP到主機名腳本

[英]Python - IP to hostname script

我創建了一個腳本來將IP解析為主機名。 該腳本無法解析主機名,它會出現以下錯誤:

無法解析主機名:10.10.10.10 [Errno 11004] getaddrinfo失敗無法解析主機名:10.10.10.10 [Errno 11004] getaddrinfo失敗

請提出建議。 我是python的新手。 文本文件包含1000多個IP。

#!/usr/bin/python
import socket
pfile = open ('C:\\Python27\\scripts\\test.txt')
while True:
    IP = pfile.readline()
    if not IP:
        break
    try:
        host = socket.gethostbyaddr("IP")
        print host, IP
    except socket.gaierror, err:
        print "cannot resolve hostname: ", IP, err
pfile.close()

這里有兩個問題。

首先,正如FatalError指出的那樣,您不是在查找IP變量的值,而是字符串"IP"

其次, pfile.readline()將在IP字符串的末尾留下換行符,因此仍然會失敗。

所以:

host = socket.gethostbyaddr(IP.rstrip())

另外,在某些平台上,如果您的DNS無法正常運行,即使指定了IP地址, gethostbyaddr也會失敗。 因此,您可能希望在運行腳本的計算機上進行簡單測試(如果它與用於SO的計算機不同),例如,打開瀏覽器並轉到Google。

據我所知,存在不同的問題。

該行:

host = socket.gethostbyaddr("IP")

將因為字符串而失敗。 要解決此問題,請使用host = socket.gethostbyaddr(IP)

此外,您在此處發布的錯誤是由10.10.10.10作為私有IP引起的。 范圍10.0.0.0–10.255.255.255、172.16.0.0–172.31.255.255和192.168.255.255是專用網絡塊; socket.gethostbyaddr()無法解析這些地址。 有關私有塊的更多信息,請參見https://tools.ietf.org/html/rfc1918

稍作搜索后,我將其按如下方式在Python 3中運行:

import socket
pfile = open ('C:\\TEMP\\IPs.txt')
while True:
  IP = pfile.readline()
  try:
    host = socket.gethostbyaddr(IP.rstrip())
    print(IP,host)
  except Exception as e:
    print(IP,"NULL")
pfile.close()

這有效:

import socket


IP = "www.google.ca"
host = socket.gethostbyaddr(IP)
print host, IP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM