Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import requests
- import smtplib
- from collections import defaultdict
- from datetime import datetime, timedelta
- from flask import Flask, request, abort
- app = Flask(__name__)
- class SiteReloader:
- def __init__(self, url):
- self.url = url
- def reload_site(self):
- try:
- response = requests.get(self.url)
- if response.status_code == 200:
- print("site recarregado com sucesso!")
- else:
- print(f"erro ao recarregar o site. Código de status: {response.status_code}")
- except requests.exceptions.RequestException as e:
- print(f"erro ao recarregar o site: {e}")
- PERIOD_SECONDS = 10
- MAX_REQUESTS = 100
- ip_requests = defaultdict(list)
- @app.before_request
- def limit_requests():
- ip = request.remote_addr
- now = datetime.now()
- time_period = ip_requests[ip] and now - ip_requests[ip][0]
- ip_requests[ip].append(now)
- if len(ip_requests[ip]) > MAX_REQUESTS:
- time_first = ip_requests[ip][0]
- if time_period < timedelta(seconds=PERIOD_SECONDS):
- url_do_teusite = "https://www.teusite.com"
- reloader = SiteReloader(url_do_teusite)
- reloader.reload_site()
- ips = set()
- for con in connections:
- ip = con.getpeername()[0]
- if ip not in ips:
- ips.add(ip)
- with open('IPS.txt', 'a') as file:
- file.write(ip + '\n')
- abort(429)
- else:
- ip_requests[ip] = [time_first]
- def notificar_bloqueio(email):
- remetente = "[email protected]"
- senha = "sua_senha"
- servidor = smtplib.SMTP('smtp.gmail.com', 587)
- servidor.starttls()
- servidor.login(remetente, senha)
- corpo_email = "Sua conta foi bloqueada devido a solicitações excessivas. Entre em contato com o suporte para resolver o problema."
- servidor.sendmail(remetente, email, corpo_email)
- servidor.quit()
- limite_solicitacoes = 100
- lista_bloqueio = []
- def verificar_solicitacoes(ip_address, email):
- if ip_address in lista_bloqueio:
- notificar_bloqueio(email)
- return "Sua conta foi bloqueada devido a solicitações excessivas. Entre em contato com o suporte para resolver o problema."
- else:
- lista_bloqueio.append(ip_address)
- return "Solicitação bem-sucedida! Restam {} solicitações disponíveis.".format(limite_solicitacoes - len(lista_bloqueio))
- if __name__ == '__main__':
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement