Sticky Einfacher Portscanner mit Python

    This site uses cookies. By continuing to browse this site, you are agreeing to our use of cookies. More details

    • Einfacher Portscanner mit Python



      OK, ich melde mich mal wieder mit einem Python Skript, da ich mir Python mal wieder zu Gemüte führen wollte und ich momentan einfach davon angetan bin.
      Hier also ein einfacher Portscanner, bei welchem wir Threads (Wiki) und Semaphore (Wiki) verwenden, damit unsere Bildschirmausgabe nicht durch die zeitgleich arbeitenden Threads verunstaltet wird. Mit diesem einfachen Portscanner erhält man nicht immer unbedingt verlässliche (Stichwort : "false positives") Angaben über offene Ports und den Namen des Services der auf diesem läuft. Mit diesen Daten kann man dann seine weiteren Angriffsstrategien planen.

      Das Skript kann man z.B. jetzt noch durch das einbinden von NMAP verbessern, indem dadurch auch noch bessere Scantechniken verwirklicht werden.
      Falls dies gewünscht, kann ich auch noch eine NMAP Variante machen (Ich denke ich werde es eh´ machen, von daher...).

      Wer Lust und Laune hat, kann dieses Skript ja so anpassen, dass es ein Portintervall anhand einer zu übermittelnden Unter- und Obergrenze scannt. So muss man nicht jeden Port einzeln angeben :D.

      Python Source Code

      1. #!/usr/bin/env python
      2. # -*- coding: utf-8 -*-
      3. # Importe
      4. import optparse
      5. from socket import *
      6. from threading import *
      7. '''
      8. Created on 16.08.2014
      9. @author: hackmac89
      10. Ein einfacher Portscanner in Python. Für die Verwendung siehe [b]python portscanner.py -help[/b]
      11. '''
      12. # Semaphor setzen
      13. lock = Semaphore(value = 1)
      14. def Scan(host, port):
      15. try:
      16. # Verbindung
      17. connSkt = socket(AF_INET, SOCK_STREAM)
      18. connSkt.connect((host, port))
      19. connSkt.send('EasyPeasyPython\r\n')
      20. results = connSkt.recv(100) # Antwort
      21. # sperren
      22. lock.acquire()
      23. print '[+] %d/TCP geöffnet'% port
      24. print ' ' + str(results)
      25. except:
      26. lock.acquire()
      27. print '[-] %d/TCP geschlossen'% port
      28. finally:
      29. # Sperre aufheben und Verbindung schliessen
      30. lock.release()
      31. connSkt.close()
      32. def portScan(host, ports):
      33. try:
      34. # IP auflösen
      35. IP = gethostbyname(host)
      36. except:
      37. print "[-] Unbekannter Host '%s'" %host
      38. return
      39. try:
      40. Name = gethostbyaddr(IP)
      41. print '\n[+] Ergebnisse von : ' + Name[0]
      42. except:
      43. print '\n[+] Ergebnisse von : ' + IP
      44. setdefaulttimeout(1)
      45. # Portliste mit Hilfsfunktion "Scan" durchlaufen
      46. for port in ports:
      47. # Thread erstellen
      48. t = Thread(target = Scan, args = (host, int(port)))
      49. t.start()
      50. # Hauptfunktion
      51. def main():
      52. parser = optparse.OptionParser('%prog ' +\
      53. '-H <HOST> -P <PORT>')
      54. parser.add_option('-H', dest = 'host', type = 'string', help = 'Host angeben !')
      55. parser.add_option('-P', dest = 'port', type = 'string', \
      56. help = 'Port[s] Kommasepariert angeben !')
      57. (options, args) = parser.parse_args()
      58. host = options.host
      59. ports = str(options.port).split(',')
      60. print ports
      61. if( (host == None) | (ports[0] == None) ):
      62. print parser.usage
      63. exit(0)
      64. portScan(host, ports)
      65. if __name__ == "__main__":
      66. main()
      Display All

      ..:: Beispielausgabe ::..


      Hilfe anzeigen


      Infos über offene Ports und evtl. Name und Version des jew. Services

      Das Skript funzt wie im COde erkennbar sowohl bei einer Eingabe des Hosts als URL als auch als IP.