2014-12-23 7 views
-2

일부 웹 사이트에 액세스하여 정보를 얻고 싶습니다. 이렇게하려면 주어진 주파수로 웹 사이트에 액세스하는 파이썬 함수를 작성합니다. 또한 자주 액세스하는 것으로 인해 잠재적 인 DDoS 공격을 방지하기 위해 일부 예외가 발생한 후 웹 사이트에 대한 액세스가 지연 될 수 있음을 알았습니다. 예외가 발생하면 일부 라운드를 기다리기로 결정합니다. 따라서 나는 다음과 같은 코드를 쓰기 :t a 고주파수의 원격 서버에 액세스하는 동안 DDoS 피 해를 효과적으로 피할 수있는 코드 예제를 찾으십시오.

ddos_prevention = {'continuous_suspected_times': 0, 'to_wait_rounds': 0} 
request_url = 'http://store.apple.com/' #just an example url 
while True: 
    print get_response_without_ddos_suspect(request_url, ddos_prevention) 
    sleep(1) 

def get_response_without_ddos_suspect(request_url, ddos_prevention): 
    if ddos_prevention['to_wait_rounds'] == 0: 
     try: 
      response = requests.get(request_url) 
      if response.status_code == 200: 
       if ddos_prevention['continuous_suspected_times'] != 0: 
        print '%s: Finally it works after %s rounds of waiting, request_url: %s' % (
         datetime.now(), math.pow(2, ddos_prevention['continuous_suspected_times']), request_url) 
        ddos_prevention['continuous_suspected_times'] = 0 
       return response.json() 
     except Exception as e: 
      ddos_prevention['continuous_suspected_times'] += 1 
      ddos_prevention['to_wait_rounds'] = math.pow(2, ddos_prevention['continuous_suspected_times']) 
      print '%s: DDOS suspected for the %sst times and wait %s rounds, exception: %s, request_url: %s' % (
       datetime.now(), ddos_prevention['continuous_suspected_times'], ddos_prevention['to_wait_rounds'], e, request_url) 
      return None 
    else: 
     ddos_prevention['to_wait_rounds'] -= 1 
     print 'to_wait_rounds: %s, request_url: %s' % (ddos_prevention['to_wait_rounds'], request_url) 
     return None 

다행히, 작동하는 것 같다. 그러나 다음과 같은 이유로 이상적이지 않습니다. 1) 코드가 매우 지루합니다. 2) 코드가 여러 예외를 전달하지 않으므로 많은 신호를 생략 할 수 있습니다.

PLease는 내 웹 사이트에 대한 액세스를 거부 할 수있는 지정된 웹 사이트의 DOS 확인을 일으키지 않으면 서 높은 빈도로 웹 사이트에 액세스 할 수있는 상황에 맞는 코드 예제 또는 모듈을 제공합니다.

+4

(nitpick : 웹 사이트에 액세스하는 컴퓨터가 하나 뿐인 경우 DoS가 아니라 DDoS (* distributed * DoS)입니다.) – JJJ

답변

0

코드 개선, 몇 가지 새로운 코드, 더 나은 모듈러 또는 다른 더 나은 방법과 같은 제안을 요청합니다. 현재 자신이 위치한 하나를 선택해야하는 두 가지 측면에서 제 생각에는

:

  1. 어느 당신이 정말로 그것을이기 때문에 단순히, 디 도스 공격을 받고있는 위험을 감수하지 않는 작은 사이트가 악의적 인 해커 (또는 경쟁 업체)가 관심을 가질만큼 충분히 크지 않습니다.이 경우 작은 해킹으로도 확장 할 수는 없지만이 시간에는 스케일링을 신경 쓸 필요가 없습니다. 너는 지금 이것을 필요로하지 않는다.

  2. 또는 귀하의 사이트가 DDoS 대상이 될만큼 충분히 넓습니다. 이 경우 해킹과 함께 할 수 없으며보다 전문적인 솔루션을 고려해야합니다. 귀하의 웹 사이트를 그 자체로 분리하여 Content Delivery Network (CDN) 일 가능성이 있으십니까?은 실제 배달과 다릅니다. 나에게 그래서

, 다른 더 좋은 방법이 경우에있을 것입니다 : 중 당신은 1 년이고 당신은 당신의 해킹을 제거 할 수 있어야한다, 또는 당신은 2 년이고 당신이해야 더 안정적이고 강력한 것을 사용하십시오.

피사체는 괜찮은 것처럼 보일 수 있지만 정확하게 해킹이 축적되는 반면 전문적인 솔루션이 존재하지만 조금씩 시원하고 유망한 소프트웨어 프로젝트를 조금씩 바꿔 this kind of situation that you can't extirp yourself from으로 만들 수 있습니다.