多线程端口扫描

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-

require 'socket'
include Socket::Constants
require 'timeout'

if ARGV[0]
  ips = ARGV[0].split(/\s/)
else
  p 'need ARGV'
  exit
end
ports = 80..200 #端口列表

def scan ip,po
  print "\r",ip + ' ' + po.to_s
  begin
    sock=timeout(4){TCPSocket.open(ip,po)}
    puts " is Opend! "
    sock.close
  rescue Exception => e
    #puts "#{ip} :#{po} is Closed ~~~ "
  rescue Timeout::Error
    #puts "#{ip} :#{po} is Closed ~~~ "
  end
end
ips.each { |i|
  ports.each { |p|
    sleep 0.27 #太快会被路由器BAN
    Thread.new{scan i,p}
  }
}

sleep 1 while Thread.list.size != 1 

puts "\ndone"

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...