2012-07-24 63 views
1

我想要一个脚本来检查域名是否通过dns解析为IP地址;使用我写的python脚本。检查网站是否使用浏览器用户代理在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 

我想这是这些域服务器识别脚本作为“BOT”做而不是合法的最终用户,假设这是否正确?

如果是这样,我该如何检查dns名称是通过查询网站名称(或IP,无所谓)来解决,并且能够运行此操作而不会错误地读取“请求失败”尽管该服务可以从浏览器完全访问的事实?

+2

我没有看到这段代码有任何问题,它对我来说工作正常。也许你的网络设置有问题或类似的东西? – sloth 2012-07-24 11:41:38

+0

因此,它运行良好,对后续运行没有负面反应? – Meh 2012-07-24 11:43:32

+1

我不断解决所有这些问题,尝试在linux和winXP上测试(使用IDLE)。 – Meh 2012-07-24 11:46:43

回答

1

这个问题有几个问题。

  1. 您不在检查“网站是否响应”您正在测试DNS解析。您的所有DNS请求都转到单个名称服务器,即您的LDNS解析器。如果他们全部解决,它仍然没有提到网站的状态。另外,由于你实际上并没有与这些网站交谈,所以他们无法知道你是一个机器人。如果您发出HTTP请求,它们只能检测到此消息(基于HTTP用户代理标头)。
  2. 关于您的代码问题,您需要先修剪换行符,然后才能对其执行socket.gethostbyname()。将socket.gethostbyname(hostname)替换为socket.gethostbyname(hostname.rstrip()),你会没事的。
+0

谢谢。我没有意识到这是简单的... – Meh 2012-07-25 07:22:33

相关问题