Port Scanner ein paar fragen.

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
TrayserCassa
User
Beiträge: 97
Registriert: Donnerstag 2. Mai 2013, 19:11

Erstmal einen schönen Abend alle miteinander :)

Ich Versuch zurzeit einen Portscanner zu entwickeln, damit ich den in meine Berwerbung packen kann. Natürlich währe das doof wenn mir jemand alles fertig macht, deswegen auch nur eine kleine Frage:

Bei meinem Scannvorgang finde ich im Portbereich 1-1024 rund 9 offene Ports. (Im lokalem Netzwerk) Allerdings besitzte ich nur 4 Geräte aktuell im Wlan, dennoch sagt er mir auf der IP 192.168.2.254 gibt es 9 offene Ports (25,110,119,143,465,563,587,993,995), währdend der Ping mir sagt "Zielhost nicht erreichbar". Es muss wohl am Code liegen oder am Router, also poste ich den Überltäter mal :)

An dieser Stelle schonmal danke für's lesen und helfen.

Code: Alles auswählen

class Ip():

    def __init__(self):
        self.time = 0.1

    def get_local_ip(self):
        return socket.gethostbyname(socket.getfqdn())

    def check(self, addr, port):

        connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        connection.settimeout(self.time)

        try:
            connection.connect((addr, port))
            return True
        except socket.timeout:
            return False
        except socket.error:
            return "error"
        except Exception:
            return "error"
        finally:
            connection.close()

    def set_time(self, time):
        self.time = time
PS: self.time ist entweder 0.1 oder 0.01 (In beiden Fällen das selbe). Setzt man Klassen-Variablen überhaupt so?

MfG
Trasyer
BlackJack

@TrayserCassa: Klassenvariablen setzt man auf Klassen, aber das willst Du hier auch gar nicht. Für eine Instanzvariable machst Du das im Grunde richtig, nur das man da in Python keine Methode für verwendet sondern einfach das Attribut setzt.

Ich Frage mich eher was diese ”Klasse” soll, denn so wirklich sinnvoll ist die nicht. Da hätte es auch eine Funktion getan denn es gibt nur eine Methode neben der Initialisierung. `get_local_ip()` ist eigentlich eine Funktion die Du in eine Klasse verschoben hast, was sie nicht wirklich zu einer Methode macht.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@TrayserCassa: da Du einen Portscanner programmierst, weißt Du bestimmt auch, was diese Ports sind. Und Du weißt natürlich auch schon, dass Ping nicht über einen TCP-Port läuft und nicht jedes Gerät auf einen Ping antwortet. Wie BlackJack schon geschrieben hat, ist es bei OOP in Python wichtig, zu wissen, wann man keine Klasse braucht. Funktionen sollten nur eine Art an Rückgabewert liefern, Fehler werden über Exceptions behandelt. Bei Dir würde eine if-Abfrage "if check(...):" sowohl bei Fehlern als auch bei Erfolg anspringen.
TrayserCassa
User
Beiträge: 97
Registriert: Donnerstag 2. Mai 2013, 19:11

Danke für die Antworten :)

Hmm ok keine Klasse .. Allerdings wollte ich noch einen kleinen client schreiben der mir eine externe Ip liefert. Wobei da eine Klasse auch wenig Sinn ergibt. Ok werde ich anpassen :)

Also liegt es an meinem Code.. ok ich werde mal schauen und mich einlesen :)

MfG
TryserCassa
Antworten