Advertisement
dev017

ip blocker. (py)

Jul 27th, 2023 (edited)
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import time
  2. import requests
  3. import smtplib
  4. from collections import defaultdict
  5. from datetime import datetime, timedelta
  6. from flask import Flask, request, abort
  7.  
  8. app = Flask(__name__)
  9.  
  10. class SiteReloader:
  11.     def __init__(self, url):
  12.         self.url = url
  13.  
  14.     def reload_site(self):
  15.         try:
  16.             response = requests.get(self.url)
  17.             if response.status_code == 200:
  18.                 print("site recarregado com sucesso!")
  19.             else:
  20.                 print(f"erro ao recarregar o site. Código de status: {response.status_code}")
  21.         except requests.exceptions.RequestException as e:
  22.             print(f"erro ao recarregar o site: {e}")
  23.  
  24. PERIOD_SECONDS = 10
  25. MAX_REQUESTS = 100
  26.  
  27. ip_requests = defaultdict(list)
  28.  
  29. @app.before_request
  30. def limit_requests():
  31.     ip = request.remote_addr
  32.     now = datetime.now()
  33.     time_period = ip_requests[ip] and now - ip_requests[ip][0]
  34.     ip_requests[ip].append(now)
  35.  
  36.     if len(ip_requests[ip]) > MAX_REQUESTS:
  37.         time_first = ip_requests[ip][0]
  38.         if time_period < timedelta(seconds=PERIOD_SECONDS):
  39.             url_do_teusite = "https://www.teusite.com"
  40.             reloader = SiteReloader(url_do_teusite)
  41.             reloader.reload_site()
  42.             ips = set()
  43.             for con in connections:
  44.                 ip = con.getpeername()[0]
  45.                 if ip not in ips:
  46.                     ips.add(ip)
  47.                     with open('IPS.txt', 'a') as file:
  48.                         file.write(ip + '\n')
  49.             abort(429)
  50.         else:
  51.             ip_requests[ip] = [time_first]
  52.  
  53. def notificar_bloqueio(email):
  54.     remetente = "[email protected]"
  55.     senha = "sua_senha"
  56.     servidor = smtplib.SMTP('smtp.gmail.com', 587)
  57.     servidor.starttls()
  58.     servidor.login(remetente, senha)
  59.     corpo_email = "Sua conta foi bloqueada devido a solicitações excessivas. Entre em contato com o suporte para resolver o problema."
  60.     servidor.sendmail(remetente, email, corpo_email)
  61.     servidor.quit()
  62.  
  63. limite_solicitacoes = 100
  64. lista_bloqueio = []
  65.  
  66. def verificar_solicitacoes(ip_address, email):
  67.     if ip_address in lista_bloqueio:
  68.         notificar_bloqueio(email)
  69.         return "Sua conta foi bloqueada devido a solicitações excessivas. Entre em contato com o suporte para resolver o problema."
  70.     else:
  71.         lista_bloqueio.append(ip_address)
  72.         return "Solicitação bem-sucedida! Restam {} solicitações disponíveis.".format(limite_solicitacoes - len(lista_bloqueio))
  73.  
  74. if __name__ == '__main__':
  75.     app.run()
Tags: python Ip
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement