检查网站是否使用浏览器用户代理在python中响应

时间:2012-07-24 11:33:14

标签: python web request dns resolve

我正在尝试用脚本来检查域名是否通过dns解析为其IP地址;使用我编写的python脚本。

我希望能够在几个顺序循环中执行此操作,但是在尝试运行一次循环后,第二次运行脚本时,先前返回成功的DNS解析响应的名称现在不会。 / p>

以下是我的剧本:

#! C:\Python27
import socket,time

localtime = time.asctime( time.localtime(time.time()) )


def hostres(hostname):
    print "Attempting to resolve " + hostname 
    try:
        socket.gethostbyname(hostname)
        print "Resolved Successfully!"
    except socket.error:
        print "Could Not Resolve"

print "*************************************************"
print "Website loop starting.."
print "Local current time :", localtime
print "*************************************************"
print ""

text_file = open("sites.txt", "r")
lines = text_file.readlines()
for line in lines:
    hostres(line)
text_file.close()

文本文件的内容是:

www.google.com
en.wikipedia.org
www.youtube.com
us.gamespot.com

我认为这是将这些域名服务器识别为“僵尸程序”而不是合法的最终用户,这是假的吗?

如果是这样,我怎样才能通过查找网站名称(或IP,无关紧要)来检查dns名称是否解析,并且能够运行此命令而不会错误地读取“请求失败”,尽管事实上,该服务可以从浏览器完全访问?

1 个答案:

答案 0 :(得分:1)

这个问题有几个问题。

  1. 您没有检查“网站是否响应”您正在测试DNS解析。您的所有DNS请求都将转到单个名称服务器,即LDNS解析程序。如果所有人都解决了,它仍然没有说明网站的状态。此外,由于您实际上并没有与这些网站交谈,因此他们无法知道您是机器人。如果您发出HTTP请求,他们只能检测到这种情况(基于HTTP用户代理标头)。
  2. 关于代码问题,您需要修改换行符,然后才能对其执行socket.gethostbyname()。将socket.gethostbyname(hostname)替换为socket.gethostbyname(hostname.rstrip()),您就可以了。