2012-08-14 85 views
0

是否有一种方法在python中检查指定ip范围(1.1.1.1 - 1.1.1.254)的头中的服务器响应代码(200,301,404),或许它甚至可能做到这一点多线程?Python服务器响应代码

P.S.可以用“HTTPResponse.status”对象(http://docs.python.org/library/httplib.html)来解决这个问题,我现在可以用它来检查IP范围吗?

P.S.可能这将是个不错的主意,首先检查端口80是开放的,那么只有测试与开放端口我想这会加速真的,因为254个IP的,也许30使用端口80

回答

2

您可以将那些只需尝试使用正常的GET请求连接到主机的根目录,并使用较短的超时(如果您希望等待更长的时间,则需要更长的时间)。然后你可以通过地图运行它。

import httplib 
from multiprocessing import Pool 

def test_ip(addr): 
    conn = httplib.HTTPConnection(addr, timeout=1) 
    try: 
     conn.request("GET", "/") 
    except: 
     return addr, httplib.REQUEST_TIMEOUT 
    else: 
     resp = conn.getresponse() 
     return addr, resp.status 
    finally: 
     conn.close() 

p = Pool(20) 

results = p.map(test_ip, ["1.1.1.%d" % d for d in range(1,255)], chunksize=10) 
print results 

# [('1.1.1.1', 408), ('1.1.1.2', 408), ...] 

调整Pool大小和chunksize,以适应。

+0

感谢您的代码,但请不要运行这个脚本:)它冻结了我的电脑2次。它启动几千个进程,即使关闭它也会继续。我有一个相当不错的PC(4 * 4,0 GHz的8GB内存),它并没有为我工作:)还是我做一些事情错了,我调整了池大小到最小,还杀死了我的电脑:( – 2012-08-14 03:30:24

+0

现你是认真的吗?这只是开始泳池(大小)的进程数。如果将它设置为1,它应该只为1。作品对我蛮好。 – jdi 2012-08-14 04:49:53

+0

我会建议打开外壳,并简单地创建和池,然后检查你的进程监视并查看创建了多少个python进程,并在创建池时初始化它们 – jdi 2012-08-14 04:56:53

相关问题