#!/usr/bin/env python3
from argparse import ArgumentParser
from queue import Queue
import socket
from threading import Thread
def port_check(target):
with socket.socket() as s:
if s.connect_ex(target) == 0:
print('%s:%s' % target, 'open')
def scan(queue):
while True:
port_check(queue.get())
queue.task_done()
def main(ip, start, end, t, w):
queue = Queue()
socket.setdefaulttimeout(t)
args = (queue, )
for _ in range(w):
Thread(target=scan, args=args, daemon=True).start()
for port in range(start, end):
target = (ip, port)
queue.put(target)
queue.join()
if __name__ == "__main__":
p = ArgumentParser()
p.add_argument('ip', type=str, nargs='?', default='127.0.0.1')
p.add_argument('start', type=int, nargs='?', default=1)
p.add_argument('end', type=int, nargs='?', default=1024)
p.add_argument('--timeout', '-t', type=float, default=1)
p.add_argument('--workers', '-w', type=int, default=32)
a = p.parse_args()
main(a.ip, a.start, a.end, a.timeout, a.workers)