Python:
Code:
#!/usr/bin/env python
from socket import *
import sys, signal
class Scanner:
def scan(self, host, port):
if int(port) > 65535:
limit = 65536
else:
try:
limit = int(port) + 1
except ValueError:
print "Invalid port number"
sys.exit(1)
for x in xrange(limit):
s = socket(AF_INET, SOCK_STREAM)
try:
s.connect((host, x))
except error:
continue
print " -> Port \33[1m%5s\33[0m is \33[1;32mopen\33[0m" % x
s.close()
def stop(*args):
print "Scan interrupted by user"
sys.exit(0)
def main():
signal.signal(signal.SIGINT, stop)
if len(sys.argv) < 3:
print "Usage: %s <hostname> <highest port to scan>" % sys.argv[0]
sys.exit(1)
s = Scanner()
s.scan(sys.argv[1], sys.argv[2])
print "Scan completed"
if __name__ == '__main__':
main()
Ruby:
Code:
#!/usr/bin/env ruby
require 'socket'
trap "INT" do
puts "\nScan interrupted"
exit 0
end
class Scanner
def scan(host, port)
begin
limit = Integer(port)
rescue
puts "Error: port number must be an integer"
exit 1
end
limit.times do |x|
begin
t = TCPSocket.new(host, x)
rescue Errno::ECONNREFUSED
next
end
puts " -> Port \33[1m#{x}\33[0m is \33[32mopen\33[0m"
t.close
end
end
end
def main
if ARGV.length < 2
puts "Usage: #{$0} <hostname> <highest port to scan>"
exit 1
end
scan = Scanner.new
scan.scan(ARGV[0], ARGV[1])
puts "Scan completed"
end
if $0 == __FILE__
main
end
Usage for both scanners: scan <host to scan> <highest port to scan>
Bookmarks