首页 电脑 电脑学堂 查看内容

Ruby实现端口扫描

2009-12-16 10:45 591 0

摘要:   #!/usr/bin/ruby -w  =begin  quite simple connect scanner in ruby  Shows open (reliable), close and...
关键词: ports nbsp hosts end scanner port timeout scanning printed output

  #!/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      #####################
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部