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



我正试图想出一个脚本来检查域名是否通过dns解析到其IP地址;使用我编写的python脚本。

我希望能够在几个连续的循环中做到这一点,然而,在尝试运行一次循环后,第二次运行脚本时,以前返回成功dns解析响应的名称现在没有了。

下面是我的脚本:

#! 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. 你没有检查"网站是否响应"你正在测试DNS解析。您的所有DNS请求都将发送到一个名称服务器,即LDNS解析程序。如果所有问题都解决了,它仍然没有说明网站的状态。此外,由于你实际上并没有与这些网站交谈,他们无法知道你是机器人。只有当你发出HTTP请求时,他们才能检测到这一点(基于HTTP用户代理标头)
  2. 关于您的代码问题,您需要修剪换行符,然后才能对其执行socket.gethostbyname()操作。用socket.gethostbyname(hostname.rstrip())替换socket.gethostbyname(hostname)即可

相关内容

最新更新