Skip to content

Instantly share code, notes, and snippets.

@ripples-alive
Last active October 21, 2015 02:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ripples-alive/f8002f2af69e9d7ed10e to your computer and use it in GitHub Desktop.
Save ripples-alive/f8002f2af69e9d7ed10e to your computer and use it in GitHub Desktop.
udp scanner
#!/usr/bin/env
# encoding:utf-8
import socket
import argparse
def check(host, port):
io = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
io.settimeout(0.5)
io.connect((host, port))
io.send('hello')
try:
io.recvfrom(1)
except socket.timeout as e:
return e
except socket.error as e:
# errno = 61, strerror = 'Connection refused'
if e.errno == 61:
return False
raise
except Exception as e:
raise
return True
def multiple_check(host, port, times=3):
for i in xrange(times):
result = check(host, port)
if type(result) == bool:
return result
return True
parser = argparse.ArgumentParser()
parser.add_argument('-H', '--host', default='127.0.0.1', help='host to scan')
parser.add_argument('-p', '--port',
help='port(s) to scan, support format like 1,2 and 1-9')
args = parser.parse_args()
if args.port is None:
ports = xrange(1, 65536)
else:
splited = args.port.split(',')
ports = []
for one in splited:
if one.find('-') != -1:
start, stop = one.split('-')
ports += range(int(start), int(stop) + 1)
else:
ports.append(int(one))
opened = []
closed = []
for port in ports:
if multiple_check(args.host, port):
opened.append(port)
else:
closed.append(port)
print 'open port:', opened
print 'close port:', closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment