2012-08-14 4 views
0

파이썬에서 지정된 IP 범위 (1.1.1.1-1.1.1.254)의 헤더에서 서버 응답 코드 (200, 301, 404)를 확인하는 방법이 있을지도 모릅니다. 멀티 스레드?Python 서버 응답 코드

P. "HTTPResponse.status"객체 (http://docs.python.org/library/httplib.html)로 가능하다는 것을 어떻게 생각하니 어떻게 ip 범위를 확인할 수 있습니까?

P. 우선 포트 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

코드 주셔서 감사하지만이 스크립트를 실행하지 마십시오. :) 내 PC를 2 번 동결 시켰습니다. 그것은 수 천 개의 프로세스를 시작하며 프로세스를 닫을 때에도 계속됩니다. 나는 꽤 좋은 PC (4 * 4,0 GHz 8GB 램)을 가지고 있고 그것은 나를 위해 일하지 않는다. :) 또는 나는 내가 풀 크기를 최소한으로 조정하고 여전히 내 PC를 죽이는 몇 가지 잘못을한다 : ( –

+0

Are 당신은 진지한가? 단지 풀 (크기) 프로세스의 수를 시작합니다 .1로 설정하면 1이어야합니다. – jdi

+0

쉘을 열고 간단하게 만들고 풀링 한 다음 프로세스를 확인하는 것이 좋습니다. 얼마나 많은 파이썬 프로세스가 생성되었는지 모니터하고보고, 풀을 생성 할 때 초기화됩니다. – jdi