-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathportscanner.py
More file actions
70 lines (48 loc) · 1.35 KB
/
portscanner.py
File metadata and controls
70 lines (48 loc) · 1.35 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
# import modules
import socket
import datetime
import uuid
# scan class
class Target():
def __init__(self, host):
# host
self.host = host
# reports
self.reports = []
def scan(self, min = 1, max = 100, timeout = 0.01):
# ports
self.ports = {}
self.ports["min"] = min
self.ports["max"] = max
self.ports["open"] = []
# start time
self.t_start = datetime.datetime.now()
# scan
for port in range(self.ports["min"], self.ports["max"] + 1):
try:
scanner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
scanner.settimeout(timeout)
status = scanner.connect_ex((self.host, port))
if status == 0:
self.ports["open"].append(port)
scanner.close()
except:
pass
# end time
self.t_end = datetime.datetime.now()
# duration
self.t_duration = round((self.t_end - self.t_start).total_seconds(), 2)
# report results
self.results = {}
self.results["scan_id"] = str(uuid.uuid4())
self.results["url"] = self.host
self.results["ip"] = socket.gethostbyname(self.host)
self.results["ports_range"] = (self.ports["min"], self.ports["max"])
self.results["ports_open"] = self.ports["open"]
self.results["duration"] = self.t_duration
self.reports.append(self.results)
def report(self, all = True):
if all:
return self.reports
else:
return self.reports[-1]