Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.27 KB | None | 0 0
  1. require 'webrick'
  2. require 'webrick/httpproxy'
  3. require 'getoptlong'
  4.  
  5. opts = GetoptLong.new(
  6.     [ "--help",  "-h", GetoptLong::NO_ARGUMENT       ],
  7.     [ "--file",  "-f", GetoptLong::REQUIRED_ARGUMENT ],
  8.     [ "--port",  "-p", GetoptLong::REQUIRED_ARGUMENT ],
  9.     [ "--delay", "-d", GetoptLong::REQUIRED_ARGUMENT ]
  10. )
  11.  
  12. def showHelp
  13.     puts "Act as a transparent proxy that delays certain sites from loading"
  14.     puts "\t-h or --help  Display this help"
  15.     puts "\t-f or --file  Specify a file to load sites from"
  16.     puts "\t-p or --port  Specify the port to accept connections on (default 8080)"
  17.     puts "\t-d or --delay Specify the number of seconds to sleep when accesing a \"slow\" site (default 5 seconds)"
  18. end
  19.  
  20. $sites = {}
  21. $port  = 8080
  22. $delay = 5
  23.  
  24. opts.each do |opt, arg|
  25.     case opt
  26.     when "--help"
  27.         showHelp
  28.         exit
  29.     when "--port"
  30.         $port = arg.to_i
  31.     when "--file"
  32.         begin
  33.             fdata = File.read(arg)
  34.             fdata.split(/\n/).each do |site|
  35.                 $sites << site
  36.             end
  37.         rescue
  38.             puts "Failed to load file #{arg} - #{$!}"
  39.             exit
  40.         end
  41.     when "--delay"
  42.         $delay = arg.to_i
  43.     else
  44.         puts "Invalid argument - #{opt}"
  45.         showHelp
  46.         exit
  47.     end
  48. end
  49.  
  50. while site = ARGV.shift
  51.     $sites << site
  52. end
  53.  
  54. if $sites.size ==0
  55.     puts "You have not specified any sites to delay from loading.  There is no purpose to proxy transparently."
  56.     showHelp
  57.     exit
  58. end
  59.  
  60. puts "Delaying the following sites from loading:"
  61. $sites.each do |site|
  62.     puts "\t#{site}"
  63. end
  64.  
  65. $proxy = WEBrick::HTTPProxyServer.new\
  66.     :Port            => $port,
  67.     :ServerType      => Thread,
  68.     :RequestCallback => Proc.new { |req,res|
  69.         puts "[+] Parsing request #{req.request_line}"
  70.         delay = false
  71.         $sites.each do |site|
  72.             if req.request_line.match(site)
  73.                 delay=true
  74.                 break
  75.             end
  76.         end
  77.         if delay
  78.             puts "\tThis is a \"slow\" site, sleeping for #{$delay} seconds"
  79.             sleep $delay
  80.         end
  81.     }
  82.  
  83. $proxy.start
  84.  
  85. trap("INT") {
  86.     puts "Shutting down..."
  87.     $done = true
  88. }
  89.  
  90. until $done
  91.     # Idle loop
  92.     sleep(1)
  93. end
  94.  
  95. $proxy.shutdown
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement