Advertisement
dev017

proteção de site (talvez?)

Jul 10th, 2023 (edited)
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 1.15 KB | Cybersecurity | 0 0
  1. using HTTP.Servers
  2. using HTTP.Messages
  3.  
  4. requests_per_ip = Dict{String, Int64}()
  5. max_requests = 5
  6. timeout = 60
  7.  
  8. function handle_request(req::Request)
  9.     remote_ip = HTTP.peeraddr(req)[1]
  10.    
  11.     if get(requests_per_ip, remote_ip, 0) >= max_requests
  12.         return HTTP.Messages.Response(429, "Too Many Requests")
  13.     end
  14.  
  15.     #redefinir as contagens se passou um determinado tempo
  16.     if get(requests_per_ip, remote_ip, 0) > 0 && time() - requests_per_ip[remote_ip] > timeout
  17.         requests_per_ip[remote_ip] = 0
  18.     end
  19.  
  20.     requests_per_ip[remote_ip] = get(requests_per_ip, remote_ip, 0) + 1
  21.  
  22.     #log
  23.     println("IP: $remote_ip - Número de solicitações: $(requests_per_ip[remote_ip])")
  24.  
  25.     #verificar se o caminho da solicitação é "/stats"
  26.     if HTTP.path(req) == "/stats"
  27.         #gerar uma resposta com as estatísticas de solicitações por IP
  28.         stats = join([("$ip: $(requests_per_ip[ip])") for ip in keys(requests_per_ip)], "\n")
  29.         return HTTP.Messages.Response(200, stats)
  30.     end
  31.  
  32.     return HTTP.Messages.Response(200, "OK")
  33. end
  34.  
  35. server = HTTP.Servers.Server(8000, handle_request)
  36. HTTP.Servers.run(server)
Tags: Site
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement