Class: W4bFile::CLI
- Inherits:
-
Object
- Object
- W4bFile::CLI
- Defined in:
- lib/w4b-file/cli.rb,
lib/w4b_file/cli.rb
Class Method Summary collapse
- .check_all_files(url) ⇒ Object
- .check_files(type, url) ⇒ Object
- .display_files(files, type, base_url) ⇒ Object
- .run_checks(check_type, website_url) ⇒ Object
- .scan_hidden_files(url) ⇒ Object
- .scan_website(url) ⇒ Object
- .start(argv) ⇒ Object
- .validate_and_sanitize_url(url) ⇒ Object
Class Method Details
.check_all_files(url) ⇒ Object
72 73 74 75 76 |
# File 'lib/w4b_file/cli.rb', line 72 def self.check_all_files(url) resources = scan_website(url) display_files(resources, "All", url) if !resources.empty? resources end |
.check_files(type, url) ⇒ Object
71 72 73 74 75 |
# File 'lib/w4b-file/cli.rb', line 71 def self.check_files(type, scanner, url) resources = scanner.scan_website files = resources.grep(/\.(#{type})$/i) files end |
.display_files(files, type, base_url) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/w4b-file/cli.rb', line 77 def self.display_files(files, type, base_url) return if files.empty? puts "[+] #{type} files :" files.each do |file| display_url = URI.join(base_url, file).to_s puts " Link : #{display_url}" end puts end |
.run_checks(check_type, website_url) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/w4b-file/cli.rb', line 48 def self.run_checks(check_type, scanner, website_url) case check_type when "videos" files_found = check_files("mp4|avi", scanner, website_url) display_files(files_found, "Video", website_url) if !files_found.empty? when "images" files_found = check_files("jpg|jpeg|png", scanner, website_url) display_files(files_found, "Image", website_url) if !files_found.empty? when "zip" files_found = check_files("zip", scanner, website_url) display_files(files_found, "ZIP", website_url) if !files_found.empty? when "pdf" files_found = check_files("pdf", scanner, website_url) display_files(files_found, "PDF", website_url) if !files_found.empty? when "document" files_found = check_files("doc|docx|txt", scanner, website_url) display_files(files_found, "Document", website_url) if !files_found.empty? else puts "Invalid check type. Available options: videos, images, zip, pdf, document, --check hidden" exit 1 end end |
.scan_hidden_files(url) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/w4b_file/cli.rb', line 45 def self.scan_hidden_files(url) uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = (uri.scheme == 'https') http.verify_mode = OpenSSL::SSL::VERIFY_PEER request = Net::HTTP::Get.new(uri) request['User-Agent'] = 'Googlebot' response = http.request(request) hidden_files = [] if response.is_a?(Net::HTTPSuccess) response.body.scan(/href="([^"#]*)"/).flatten.compact.each do |file| hidden_files << file if file.start_with?(".") || file.include?("/.") end end hidden_files end |
.scan_website(url) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/w4b_file/cli.rb', line 25 def self.scan_website(url) uri = URI.parse(url) response = Net::HTTP.get_response(uri) return [] unless response.is_a?(Net::HTTPSuccess) response.body.scan(/href="([^"#]*)"|\ssrc="([^"#]*)"/).flatten.compact end |
.start(argv) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/w4b-file/cli.rb', line 6 def self.start = {} OptionParser.new do |opts| opts. = "Usage: w4b-file <website_url> [--check <file_type>]" opts.on("--check TYPE", "Specify the type of files to check") do |type| [:check_type] = type end opts.on("--check all", "Check and display all files on the website") do [:check_all] = true end opts.on("--check hidden", "Scan for hidden files on the website") do [:check_hidden] = true end end.parse! website_url = ARGV[0] check_type = [:check_type] if website_url.nil? puts "Usage: w4b-file <website_url> [--check <file_type>]" exit 1 end scanner = Scanner.new(website_url) if [:check_hidden] hidden_files = scanner.scan_hidden_files display_files(hidden_files, "Hidden", website_url) unless hidden_files.empty? elsif [:check_all] resources = scanner.scan_website display_files(resources, "All", website_url) unless resources.empty? elsif check_type run_checks(check_type, scanner, website_url) else puts "Invalid option. Please specify a valid option." exit 1 end end |
.validate_and_sanitize_url(url) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/w4b_file/cli.rb', line 18 def self.validate_and_sanitize_url(url) uri = URI.parse(url) return nil unless uri.scheme == 'http' || uri.scheme == 'https' uri.to_s end |