Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 0 0
  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.                 con = socket.socket().connect((ip,port))
  21.                 print('Port ' + str(port) + ' offen')
  22.                 con.close()
  23.     except:
  24.         pass
  25.  
  26. def multiknock(ip,ports):
  27.     threads = list()
  28.     for port in ports:
  29.         # spawn threads
  30.         thread = threading.Thread(target=knockport, args=(ip,port))
  31.         threads.append(thread)
  32.         thread.start()
  33.  
  34.     for index, thread in enumerate(threads):
  35.     # wait for threads to finish
  36.         thread.join()
  37.  
  38.  
  39.  
  40. def parse_additional_ports(str):
  41.     tmp = str.split(',')
  42.     #parse to int
  43.     tmp_2 = []
  44.     for to_validate in tmp:
  45.         try:
  46.             tmp_2.append(int(to_validate))
  47.         except:
  48.             print('Ignoriere ' + to_validate)
  49.     return tmp_2
  50.  
  51. #common ports (ftp,ssh,telnet,smtp,dns,dhcp,pop3,imap,https,rdp)
  52. common_ports = [21,22,23,25,53,80,110,143,443,3389]
  53.  
  54. url = str(input("Welche URL soll getestet werden? "))
  55.  
  56. ranged_scan = str(input("Soll ein ausführlicher Portscan ausgeführt werden? (y/N) "))
  57.  
  58.  
  59. startport = 0
  60. endport = 0
  61. if ranged_scan == 'y':
  62.     startport = int(input("Startport eingeben: "))
  63.     #todo: validate
  64.     endport = int(input("Endport eingeben: "))
  65.     #todo: validate
  66.  
  67. additional_ports_input = str(input('Gib hier weitere Ports ein, die du testen möchtest (kommaseparierte liste) '))
  68. additional_ports = parse_additional_ports(additional_ports_input)
  69.  
  70. # since we check for HTTP status codes, check if protocol is given
  71. if not url.startswith('http'):
  72.     url = 'http://' + url
  73.     print('Corrected input to: ' + url)
  74.  
  75. #get the statuscode
  76. try:
  77.     data = getstatuscode(url)
  78. except:
  79.     print('Da lief etwas schief. War die URL korrekt?')
  80.     sys.exit(42)
  81.  
  82. final_url = data[1]
  83.  
  84. if final_url != url:
  85.     print('Finale URL nach Redirects: ' + final_url)
  86.  
  87. code = data[0]
  88.  
  89. print('Http Statuscode: ' + str(code))
  90.  
  91. # strip the protocol from the url and remove trailing slashes
  92. domain = final_url.split('//',1)[1].rstrip('/')
  93.  
  94. # get domains ip
  95. ip = socket.gethostbyname(domain)
  96. print('IP: '+str(ip))  
  97.  
  98. if ranged_scan == 'y':
  99.     multiknock(ip,range(startport,endport+1))
  100. else:
  101.     multiknock(ip,common_ports)
  102.  
  103.  
  104. #additional ports
  105. multiknock(ip,additional_ports)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement