Build precise queries to find exactly what you need
Press ESC to close
Nagios World Conference 2026: Sept. 14-17 in St. Paul, MN | Learn More
Better timeout control (default was 127 sec), and added performance data output for future analysis.
#!/usr/bin/python
“”” Threaded Python multiple port scanner “””
import threading import socket import time import getopt import sys
def usage(): print “Usage: %s -H [-w ] [-c ] -p “”” % (sys.argv[0])
try: optlist, args = getopt.getopt(sys.argv[1:], ‘H:w:c:p:h’) except getopt.GetoptError: usage() sys.exit(2)
server = None warning = 5 # defaul value critical = 10 # default value ports = None perfmon = ” | ” msg = “” exit_code = 0;
for opt, arg in optlist: if opt == ‘-h’: usage() sys.exit(2) if opt == ‘-H’: server = arg if opt == ‘-p’: ports = arg if opt == ‘-w’: warning = int(arg) if opt == ‘-c’: critical = int(arg)
timeout = critical
if ports == None or server == None: print “Server or ports not entered.” usage() sys.exit(2)
def check_port(server,port): global perfmon global msg global exit_code
s = socket.socket() s.settimeout(timeout) start_time = time.time() if s.connect_ex((server,port)) == 0: time_value = time.time() – start_time perfmon += “port%s=%.6fs;;;0.000000;0.000000 ” % (port,time_value) ports_opened.append(port) # check opening time and decide – warning or critical if time_value > critical: msg += ” Time is CRITICAL %ss for port %s ” % (time_value,port) exit_code = 2 if time_value > warning and time_value