2012-08-14 89 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

相關問題