Python3 : Kleiner Portscanner

Ist jetzt zwar kein Hexenwerk aber hier ein kleiner Portscanner in Python3

#!/usr/bin/env python3
import argparse , socket , sys , logging
from datetime import datetime

SOCKET_STATES = {
    0: "open",
    11: "firewalled",
    111: "closed",
}

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("hostname", metavar="HOSTNAME",
                        help="define the hostname to be checked")
    parser.add_argument("start_port", type=int, metavar="START_PORT",
                        help="define the start port")
    parser.add_argument("end_port", type=int, metavar="END_PORT",
                        help="define the end port")
    parser.add_argument("-a", "--all-ports", action="store_true",
                        help="shows all (default is show only open ports)")
    parser.add_argument("-l", "--logfile", type=str, 
    					help="if set i will write an logfile (you have to set an logfile incl path)")
    parser.add_argument("-t", "--timeout", type=int, default=3, 
    					help=("set the TIMEOUT for socket operations (default is 3 seconds)"))
    parser.add_argument("-v", "--verbose", action="store_true",
                        help="set debug mode (set --all-ports)")
    args = parser.parse_args()
    
    if args.end_port < args.start_port:
    	sys.exit("END_PORT must be higher then START_PORT")

    if 0 < args.start_port <= 65535 and 0 < args.end_port <= 65535:
        return args
    else:
        sys.exit("The Portrange must between 1-65535")

def get_ip_address(hostname):
    try:
        return socket.gethostbyname(hostname)
    except socket.error as err:
        # print (str(err))
        print ('Hostname could not be resolved. Exiting')
        sys.exit(4)

def check_port(ip, port):
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            result = s.connect_ex((ip, port))
            return SOCKET_STATES.get(result, result)
    except KeyboardInterrupt:
    	sys.exit(1)
    except socket.gaierror:
        print ('Hostname could not be resolved. Exiting')
        sys.exit(3)
    except socket.error:
        print ("Couldn't connect to server")
        sys.exit(2)

def write_log(entry,state):
	if state in ['info', 'warning', 'critical','error']:
		log_method = getattr(logging,state)
		log_method(str(entry))

def scan_ports(remote_host, start_port, end_port, logfile , debug=False, show_all=False):
    ip = get_ip_address(remote_host)
    # Print Banner
    print ("-" * 90)
    print ("please wait, scanning remote host {0} , takes some time !".format(ip))
    print ("-" * 90)
    print ("\n")

    t_start = datetime.now()
    for port in range(start_port, end_port + 1):
        if debug:
            print ("\n--> check port {0} on ip {1}\n".format(port, ip))
        port_state = check_port(ip, port)
        if logfile:
        	write_log ("--> check port {0} on ip {1} its {2}".format(port, ip, port_state),"info")
        if port_state == "open" or show_all or debug:
            print ("Port {0: >5}: {1: >10}".format(port, port_state))
    duration = datetime.now() - t_start

    print ("\n")
    print ("-" * 90)
    print ("scanning completed in : {0}".format(duration))

if __name__ == '__main__':
    args = parse_args()
    socket.setdefaulttimeout(int(args.timeout))
    logging.basicConfig(format='%(asctime)s | %(levelname)s | %(message)s',filename=args.logfile,filemode='w',level=logging.DEBUG)
    scan_ports(remote_host=args.hostname,
               start_port=args.start_port, end_port=args.end_port,
               debug=args.verbose, show_all=args.all_ports,logfile=args.logfile)

Server 2008 R2 - Add-WindowsFeature NET-HTTP-Activation - 0x800f081f

Problem:
Bei meiner Exchange-Installation wollte ich auf einem Server 2008R2 mittels Powershell alle nötigen Features hinzufügen. Dabei ist mir die Routine immer bei der Installation "NET-HTTP-Activation" auf den Fehler 0x800f081f gelaufen.


Lösung:
Nach einigem Probieren bin ich auf einen Eintrag im Internet gestoßen, wie man das .NetFX3 manuell installieren kann.
Hierzu bitte eine Installations-DVD in das Laufwerk legen (hier E:) und den folgenden Befehl als Administrator starten:

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:E:\sources\sxs

Wobei Source: eventuell angepasst werden muss, je nachdem wo das Laufwerk gemountet ist.

Danach ließ sich die die NET-HTTP-Activation problemlos per Powershell installieren.

Windows 10 - .NET 3.5 offline aktivieren

Problem : Unter Windows 10 müssen die .NET 3.5 Features aktiviert werden jedoch steht keine Internet Verbindung zur Verfügung.

Lösung : Einlegen des Installationsmedium für Windows 10 und diesen Befehl ausführen.
Dism.exe /online /enable-feature /featurename:NetFX3 /source:E:\sources\sxs /LimitAccess
E:\ muss natürlich an dein Laufwerk angepasst werden

Windows 7 - Windows Update läuft ewig / WMI reparieren

Problem : Das Windows Update läuft ewig und findet keine neuen Updates, hier gibts mehrere Gründe dafür. Bei mir war es nur das WMI das defekt ist.

Lösung : Einmal WMI reparieren ;-)

net stop winmgmt
REN "%windir%\System32\Wbem\Repository" "%windir%\System32\Wbem\Repository_BACKUP"
net start winmgmt
winmgmt /salvagerepository
winmgmt /resetrepository

Active Directory - Warnmeldung beim löschen eines Users

Problem : Beim versuch einen Benutzer aus dem Active Directory zu löschen erscheint diese Meldung.

Active Directory fehler beim Löschen

Da ich nicht wusste was das auf sich hat musste ich etwas forschen. Grund war das der User über Active Sync seine Mails auf sein Handy bekommen hat, im laufe der Jahre sind da einige Geräte zusammengekommen.

Lösung : Abfragen der ActiveSync Geräte mit dem Befehl
Get-ActiveSyncDevice | where {$_.userdisplayname –like "*vorname nachname*"}
sind dort welche gelistet müssen diese gelöscht werden. Hier ist der einzeiler der das erledigt.
Get-ActiveSyncDevice | where {$_.userdisplayname –like "*vorname nachname*"} | Remove-ActiveSyncDevice
sollte das nicht funktionieren muss man einen anderen Weg gehen. Wenn z.B. der Benutzer einmal umbenannt wurde kann es nötig sein diesen Weg zu wählen.


Auflisten der ActiveSync Geräte mit
Get-ActiveSyncDevice | where {$_.userdisplayname -like "*vorname nachname*"} | Select-Object Identity
anschließendes löschen der Geräte mit z.B.
Remove-ActiveSyncDevice -Identity "IDENTITY"


Sollte auch dieser Weg nicht funktionieren, kommt z.B. vor wenn das Postfach bereits gelöscht ist, ist das der einfachste Weg.

- Postfach nochmal anlegen
- ActiveSync Geräte entfernen
- Postfach löschen

Quelle :
http://www.mcseboard.de/topic/195314-ad-user-kann-nicht-gel%C3%B6scht-werden/
http://www.ugg.li/exchange-2010-entfernt-mobile-gerate-nicht-das-activesyncdevice-ldapxxxxx-wurde-nicht-gefunden/
https://patrickhoban.wordpress.com/2011/11/22/1344/

“Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.”
Linus Torvalds