美图齐众专注资阳网站设计 资阳网站制作 资阳网站建设
资阳网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

Ruby实现端口扫描

#!/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 #####################


本文名称:Ruby实现端口扫描
分享路径:http://zsjierui.cn/article/cddcigg.html

其他资讯