일부 웹 사이트에 액세스하여 정보를 얻고 싶습니다. 이렇게하려면 주어진 주파수로 웹 사이트에 액세스하는 파이썬 함수를 작성합니다. 또한 자주 액세스하는 것으로 인해 잠재적 인 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 확인을 일으키지 않으면 서 높은 빈도로 웹 사이트에 액세스 할 수있는 상황에 맞는 코드 예제 또는 모듈을 제공합니다.
(nitpick : 웹 사이트에 액세스하는 컴퓨터가 하나 뿐인 경우 DoS가 아니라 DDoS (* distributed * DoS)입니다.) – JJJ