在python中是否有办法检查指定ip范围(1.1.1.1 - 1.1.1.254)的标头中的服务器响应代码(200,301,404)是否甚至可以进行多线程?
P.S。喜欢用##; HTTPResponse.status"对象(http://docs.python.org/library/httplib.html)我现在怎么用它检查ip范围?
P.S。可能首先检查端口80是否打开然后仅测试具有开放端口的端口是个好主意我认为它会加速它真的因为254个ip可能30个正在使用端口80。
答案 0 :(得分: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
以适应。