-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathport_scanner.py
More file actions
101 lines (76 loc) · 2.73 KB
/
port_scanner.py
File metadata and controls
101 lines (76 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import socket
import argparse
import signal
import sys
from threading import Thread, Lock
from queue import Queue
from datetime import datetime
import time
from colorama import init, Fore
init()
green = Fore.GREEN
gray = Fore.LIGHTBLACK_EX
reset = Fore.RESET
N_Threads = 100
queue = Queue()
lock = Lock()
space = ' '
def scan_port(port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host,port))
except:
pass
else:
with lock:
service = socket.getservbyport(port,"tcp")
status = "Open"
print(f"{green}{port:3} {space*7} {status} {space*7} {service}{reset}")
finally:
sock.close()
def scan_thread():
global queue
while True:
worker = queue.get()
scan_port(worker)
queue.task_done()
print("\n[*] Scanning Started at %s....\n"%(time.strftime("%H:%M:%S")))
start_time = datetime.now()
def signal_handler(signal,frame):
print("\n\n[*]User Requested Interrupt")
print("[*]Application Stopped.")
sys.exit(0)
signal.signal(signal.SIGINT,signal_handler)
def main(host,ports):
print("\n[*] Host : ",host)
hostbyname = host
IP = socket.gethostbyname(hostbyname)
print("\n[*] IP Address : ",IP)
print("\n","Port", space*5, "Status", space*5, "Services", "\n")
try:
global queue
for p in range(N_Threads):
p = Thread(target=scan_thread)
p.daemon = True
p.start()
for worker in ports:
queue.put(worker)
queue.join()
except Exception as e:
print("An error occurred : ",str(e))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description = "Port Scanner by TheAJ")
parser.add_argument("host",help="Host to Scan.")
parser.add_argument("--ports","-p",dest="port_range", default="1-65535",help="Port range to scan, default is 1-65535 (all ports)")
parser.add_argument("--threads","-t",dest="threads",default="100",help="By default thread is 100 you can edit using --threads option")
args = parser.parse_args()
host,port_range,threads = args.host, args.port_range, args.threads
start_port, end_port = port_range.split("-")
start_port, end_port = int(start_port), int(end_port)
ports = [p for p in range(start_port, end_port)]
main(host,ports)
stop_time = datetime.now()
total_time_duration = stop_time - start_time
print("\n\n[*] Scanning Completed at %s....\n"%(time.strftime("%H:%M:%S")))
print("[*] Scan Time : ",total_time_duration)
print("[*] Scan Completed Successfully.")