Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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:
  20.                 sock = socket.socket()
  21.                 sock.settimeout(3)
  22.                 con = sock.connect((ip,port))
  23.                 print('Port ' + str(port) + ' offen')
  24.                 con.close()
  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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement