PHP Forum - Coding Board
November 23, 2017, 12:16:15 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News:
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1]
  Drucken  
Autor Thema: [Ruby] Port Scanner 1.1  (Gelesen 63 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
fred777
Sr. Member
****
Beiträge: 265


390271540
Profil anzeigen WWW E-Mail
« am: März 20, 2009, 01:41:39 »

Ein kleiner Portscanner in Ruby
Ich finde es besonders zum schauen, wie funktionieren die einzelnen Befehle in Ruby gut.

Code:

 #!/usr/bin/ruby -w

=begin
quite simple connect scanner in ruby
     
Shows open (reliable), close and filtered. But the reliablity
of the last two states depends of course on firewalling and the timeout
interval you can set down. Uncomment or comment states you want or don't
want to get printed on the screen.

*supports scanning mutiple hosts/IPs (like www.heise.de,www.gulli.com)
*supports multiple ports(like 12,45,53,165),ranges(like 20..85) or one single
port(like 80)
*support a ports file like http://insecure.org/nmap/data/nmap-services (just
clean it with | grep /tcp ..)

ZGlnaXRhbGJ5dGU=
=end

require 'socket'
require 'timeout'

  class Scanner

     def initialize
        @hosts,@ports = Array($*)
     end

     def portarrange
        case @ports
          when /^.+[..]/
             @ports = @ports.split("..")
             @ports = @ports[0].to_i..@ports[1].to_i
          when /^.+[,]/
             @ports = @ports.split(",")
          else
             @ports = Array(@ports)
          end
     end

     def hostarrange
        case @hosts
          when /^.+[,]/
             @hosts = @hosts.split(",")
          else
             @hosts = Array(@hosts)
          end
     end

    def output(state,port)
       printed = false
       portsfile = File.new("ports", "r")
       scanpat = "^.+ #{port}/tcp"
       begin
         portsfile.each_line do |line|
           if line =~ Regexp.new(scanpat)
             puts "#{state}    : #{line}"
             printed = true
           end
          end
          puts "#{state}    : #{port}" if printed == false
       ensure
       portsfile.close
       end
    end

    def scanning(hosts,ports)
      hosts.each do |host|
        begin
          puts "scanning #{host}:"
          ports.each do |port|
            begin
              Timeout::timeout(10){TCPSocket.new(host, port)}
            rescue Timeout::Error
              output("filtered",port)
            rescue
             # output("closed",port)
            else
              output("open",port)
            end
          end
        end
      end
    end
end

#####################  code  start  #####################

puts "no arguments past,correct usage:\nruby #{$0} [hosts] [ports]\n" if
!ARGV[1]

my_scanner = Scanner.new

hosts = my_scanner.hostarrange
ports = my_scanner.portarrange

my_scanner.scanning(hosts,ports)

#####################      eof      ####################
Gespeichert

"\x68\x6e\x2r\x73\x68" // push dword 68732f6eh
"\x68\x2f\x2f\x62\x69" // push dword 69622f7fh
Seiten: [1]
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | New Look by Nolt Prüfe XHTML 1.0 Prüfe CSS