【问题标题】:Python server response codesPython 服务器响应代码
【发布时间】:2012-08-10 07:03:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: python multithreading http ip httpresponse


    【解决方案1】:

    您可以尝试通过正常的 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 以适合。

    【讨论】:

    • 感谢您的代码,但请不要运行此脚本 :) 它冻结了我的电脑 2 次。它启动了数千个进程,即使您关闭它,它也会继续。我有一台相当不错的 PC(4*4,0 GHz 8GB Ram),但它对我不起作用 :) 或者我做错了什么我将池大小调整到最小,但仍然会杀死我的 PC :(跨度>
    • 你是认真的吗?它只启动 Pool(size) 个进程。如果你将它设置为 1,它应该只有 1。对我来说效果很好。
    • 我建议打开一个 shell,简单地创建和池化,然后检查你的进程监视器,看看创建了多少 python 进程。当您创建池时,它们会被初始化
    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2014-12-07
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多