lib/ssh_scan/banner.rb
require 'ssh_scan/os'
require 'ssh_scan/ssh_lib'
module SSHScan
class Banner
def initialize(string)
@string = string
end
# Create {SSHScan::Banner} object based on target's SSH banner.
# @param string [String] String from which the banner should be
# constructed.
# @return [SSHScan::Banner] {SSHScan::Banner} object
# constructed from string.
def self.read(string)
return SSHScan::Banner.new(string)
end
# Guess target's SSH version.
# @return [String] If SSH version string looks like "SSH-1.81"
# or "SSH-number" then return the number, else return
# "unknown"
def ssh_version()
if match = @string.match(/SSH-(\d+[\.\d+]+)/)
return match[1].to_f
else
return "unknown"
end
end
# Guess target's SSH Library (OpenSSH, LibSSH ...).
# See {SSHScan::SSHLib} for a list of SSH libraries supported.
# @return [SSHScan::SSHLib] Guessed {SSHScan::SSHLib} instance,
# otherwise {SSHScan::SSHLib::Unknown} instance.
def ssh_lib_guess()
case @string
when /OpenSSH/i
return SSHScan::SSHLib::OpenSSH.new(@string)
when /LibSSH/i
return SSHScan::SSHLib::LibSSH.new()
when /ipssh/i
return SSHScan::SSHLib::IpSsh.new(@string)
when /Cisco/i
return SSHScan::SSHLib::CiscoSSH.new()
when /ROS/
return SSHScan::SSHLib::ROSSSH.new()
when /DOPRASSH/i
return SSHScan::SSHLib::DOPRASSH.new()
when /cryptlib/i
return SSHScan::SSHLib::Cryptlib.new()
when /NOS-SSH/i
return SSHScan::SSHLib::NosSSH.new(@string)
when /pgp/i
return SSHScan::SSHLib::PGP.new()
when /ServerTech_SSH|Mocana SSH/i
return SSHScan::SSHLib::SentrySSH.new()
when /mpssh/i
return SSHScan::SSHLib::Mpssh.new(@string)
when /dropbear/i
return SSHScan::SSHLib::Dropbear.new(@string)
when /RomSShell/i
return SSHScan::SSHLib::RomSShell.new(@string)
when /Flowssh/i
return SSHScan::SSHLib::FlowSsh.new(@string)
else
return SSHScan::SSHLib::Unknown.new()
end
end
# Guess target's OS (Ubuntu, CentOS ...).
# See {SSHScan::OS} for a list of OS(s) supported.
# @return [SSHScan::OS] Guessed {SSHScan::OS} instance,
# otherwise {SSHScan::OS::Unknown} instance.
def os_guess()
case @string
when /Ubuntu/i
return SSHScan::OS::Ubuntu.new(@string)
when /6.6p1-5build1/i # non-standard Ubuntu release
return SSHScan::OS::Ubuntu.new(@string)
when /CentOS/i
return SSHScan::OS::CentOS.new
when /RHEL|RedHat/i
return SSHScan::OS::RedHat.new
when /FreeBSD/i
return SSHScan::OS::FreeBSD.new
when /Debian/i
return SSHScan::OS::Debian.new
when /Windows|Microsoft/i
return SSHScan::OS::Windows.new
when /Cisco/i
return SSHScan::OS::Cisco.new
when /Raspbian/i
return SSHScan::OS::Raspbian.new(@string)
when /ROS/i
return SSHScan::OS::ROS.new
when /DOPRA/i
return SSHScan::OS::DOPRA.new
else
return SSHScan::OS::Unknown.new
end
end
def ==(other)
self.to_s == other.to_s
end
def to_s
@string
end
end
end