0

python中有没有办法检查指定IP范围(1.1.1.1 - 1.1.1.254)的标头中的服务器响应代码(200、301、404),甚至可以多线程执行?

PS喜欢它可能与“HTTPResponse.status”对象(http://docs.python.org/library/httplib.html)我现在如何检查它的IP范围?

PS 可能最好先检查端口 80 是否打开,然后只测试打开端口的端口,我认为这会加快速度,因为 254 ip 可能有 30 个正在使用端口 80。

4

1 回答 1

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适合。

于 2012-08-14T02:11:59.070 回答