View difference between Paste ID: PgmQ6xj2 and fnptteLU
SHOW: | | - or go back to the newest paste.
1
import requests
2
import socket
3
import sys
4
import threading
5
6
def getstatuscode(url):
7
        response = requests.head(url)
8
        code = response.status_code
9
        redirect = url
10
        code_and_redirect = [code,redirect]
11
        # follow redirects
12
        if (code >= 300 and code <= 302 ):
13
                redirect = response.headers['Location']
14
                print('Got redirect to: ' + redirect)
15
                code_and_redirect = getstatuscode(redirect)
16
        return code_and_redirect;
17
18
def knockport(ip,port):
19-
	try:
19+
        try:
20-
                con = socket.socket().connect((ip,port))
20+
                sock = socket.socket()
21
                sock.settimeout(3)
22
                con = sock.connect((ip,port))
23-
	except:
23+
24-
		pass
24+
25
        except:
26
                pass
27
28
29
def multiknock(ip,ports):
30
    threads = list()
31
    for port in ports:
32
        # spawn threads
33
        thread = threading.Thread(target=knockport, args=(ip,port))
34
        threads.append(thread)
35
        thread.start()
36
37
    for index, thread in enumerate(threads):
38
	# wait for threads to finish
39
        thread.join()
40
41
42
43
def parse_additional_ports(str):
44
	tmp = str.split(',')
45
	#parse to int
46
	tmp_2 = []
47
	for to_validate in tmp:
48
		try:
49
			tmp_2.append(int(to_validate))
50
		except:
51
			print('Ignoriere ' + to_validate)
52
	return tmp_2
53
54
#common ports (ftp,ssh,telnet,smtp,dns,dhcp,pop3,imap,https,rdp)
55
common_ports = [21,22,23,25,53,80,110,143,443,3389]
56
57
url = str(input("Welche URL soll getestet werden? "))
58
59
ranged_scan = str(input("Soll ein ausführlicher Portscan ausgeführt werden? (y/N) "))
60
61
62
startport = 0
63
endport = 0
64
if ranged_scan == 'y':
65
	startport = int(input("Startport eingeben: "))
66
	#todo: validate
67
	endport = int(input("Endport eingeben: "))
68
	#todo: validate
69
70
additional_ports_input = str(input('Gib hier weitere Ports ein, die du testen möchtest (kommaseparierte liste) '))
71
additional_ports = parse_additional_ports(additional_ports_input)
72
73
# since we check for HTTP status codes, check if protocol is given
74
if not url.startswith('http'):
75
	url = 'http://' + url
76
	print('Corrected input to: ' + url) 
77
78
#get the statuscode
79
try:
80
	data = getstatuscode(url)
81
except:
82
	print('Da lief etwas schief. War die URL korrekt?')
83
	sys.exit(42)
84
85
final_url = data[1]
86
87
if final_url != url:
88
    print('Finale URL nach Redirects: ' + final_url)
89
90
code = data[0]
91
92
print('Http Statuscode: ' + str(code))
93
94
# strip the protocol from the url and remove trailing slashes
95
domain = final_url.split('//',1)[1].rstrip('/')
96
97
# get domains ip
98
ip = socket.gethostbyname(domain)
99
print('IP: '+str(ip))  
100
101
if ranged_scan == 'y':
102
    multiknock(ip,range(startport,endport+1))
103
else:
104
    multiknock(ip,common_ports)
105
106
107
#additional ports
108
multiknock(ip,additional_ports)