2017-02-06 3 views
2

Ich versuche einen TCP-Port-Scanner in Python zu erstellen, der eine Reihe von Argumenten akzeptiert (-all (zeigt alle offenen und geschlossenen Ports für das Ziel an), -open (zeigt nur die offenen Ports an) auf dem Ziel), -target (Ziel-IP, Subnetz oder Hostname angeben) und -range (Port-Bereich angeben)Python TCP Port Scanner

Zur Zeit habe ich nur die im Programm verwendeten Optionen programmiert, mein Code ist wie folgt:

import optparse 

parser = optparse.OptionParser() 
parser.add_option('-all', dest='allPorts', help='displays all ports regardless of status') 
parser.add_option('-open', dest='openPorts', help='displays only open ports') 
parser.add_option('-target', type='string', dest='targetIP', help='specify target IP address, subnet or hostname') 
parser.add_option('-range', type='string', dest='portRange', help='specify port range') 

(options, args) = parser.parse_args() 

ich bin nicht sicher, wie mit dem Programm, vor allem mit den -all/-open Optionen fortzusetzen, wäre jede Hilfe sehr geschätzt.

+0

Beginnen Sie mit dem Abrufen einer gefilterten Unterliste, die alle Wörter enthält, für die die Bedingung "e" nicht in Wort "wahr" ist. Dann müssen Sie eine kartesische Multiplikation dieser Liste vornehmen. Sie haben 'N^3' mögliche Strings, wobei' N' die Anzahl der Wörter nach dem Filtern ist. – SomethingSomething

+0

Ich denke, der einfachste Weg ist die Verwendung von 3 verschachtelten For-Schleifen, die alle auf Ihren gefilterten Wörtern laufen, dann verketten Sie sie einfach und die "find-replace" -Operationen machen – SomethingSomething

+0

Wenn du versuchst, ein Passwort zu knacken (Brute Force), indem du drei zufällige Wörter aus deiner Datei nimmst, ist das nicht sehr nützlich, du musst systematisch alle möglichen Kombinationen ausprobieren. Auch ist 'randomwords.txt' die Datei mit der Geschichte?Wenn ja, sollten Sie mit der Erstellung eines Satzes von Kandidatenwörtern beginnen (keine Duplikate, keine Wörter mit 'e', ersetzen Sie' o') – mata

Antwort

1

ich eine Antwort gepostet geändert haben Hier, Eigentlich wollte ich diese Antwort bearbeiten, aber vom Autor gelöscht.
Versuchen Folgende:

res = "" 
for x in data[:3]: 
    res += x 
    res.replace("o", "0") 
print res 

ODER

res = "" 
for x in data[:3]: 
    res = res + x 
print res.replace("o", "0") 

Versuchen Letzte.

2

Try this:

"{}{}{}".format(w1,w2,w3).replace("o","0") 
3

Normalerweise verwenden Sie str.join eine neue Zeichenfolge aus mehreren verschiedenen Saiten zu bauen:

''.join(data[:3]) 

und o mit 0 Gebrauch zu ersetzen str.replace:

''.join(data[:3]).replace('o', '0') 

Beachten Sie, dass Sie 3 Proben mit random.sample(data, 3) erhalten können, Sie don ‚T müssen die kompletten data mischen:

''.join(random.sample(data, 3)).replace('o', '0') 

auszuschließen Wörter "e" enthalten, können Sie nur Worte halten, die tun nicht"e" im Eingabe enthalten:

with open('randomwords.txt', 'r') as f: 
    # a conditional list comprehension 
    data = [word for word in f.read().split() if "e" not in word] 

[...] 
1

Erstens scheint Ihre Zuordnung Wiederholungen zu ermöglichen (z. B. Kennwörter wie "passw0rdpassw0rdpassw0rd"), während dies bei Ihrer Methode nicht der Fall ist. Es ist auch ineffizient. Sie können stattdessen random.choice dreimal verwenden.

Verketten von Strings wird mit + Operator, z.B. concatenation = str1 + str2 + str3 oder join Funktion. Ersetzen von 0 durch 0 erfolgt mit der String-Klassenmethode replace, z.B. concatenation.replace('o', '0').