In meinem Code geht es darum sich in einem Server anzumelden und verschiedene Wörter aus einer Textdatei einzulesen, die Wörter zu replacen und als Passwort für den SErver benutzen.
Mein Problem ist das nicht alle Wörter als Passwort versucht werden und ich mittendrin einen Brpken Pipe Error kriege.
import hashlib as hl
import sys
import socket
import base64
def main():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
client.connect(("147.0.0.1", 5000))
data = readData()
#try:
for word in data:
word = test(word)
client.send("aufgabe:".encode()+ word)
response = client.recv(10000).decode()
print(response)
if response.__contains__('01'):
print("gefunden")
sys.exit()
#except socket.error as e:
# print("Passwort nicht gefunden!")
def readData():
helper = {'o': 0, 'O': 0, 'i': 1, 'I': 1, 'r': 2, 'R': 2, 'e': 3, 'E': 3, 'a': 4,
'A': 4, 's': 5, 'S': 5, 'g': 6, 'G': 6, 't': 7, 'T': 7, 'b': 8, 'B': 8, 'p': 9, 'P': 9}
data = []
with open("rfc4960.txt", "r") as file:
for line in file:
for word in line.split(" "):
for key in helper:
word = word.replace(key, str(helper[key]))
data.append(word)
return data
def test(word):
a= base64.b64encode(hl.sha3_512(word.encode()).digest())
return a
if __name__ == "__main__":
main()
fehler
hashlib sollte man nicht als hl abkürzen, das ist unüblich.
`readData` sollte man `read_data` schreiben. `test` ist ein schlechter Name für eine Funktion, die einen Hash ausrechnet, und a ist ein schlechter Variablennamen, der gar nicht gebrauch wird.
client.send ist falsch, das muß mindestens sendall sein, und es muß ein Protokoll geben, das dem Server mitteilt, wann die Nachricht komplett ist.
client.recv ist auch falsch. Da fehlt auch ein Protokoll.
Was erwartet denn der Server?
Magische Methoden sollte man nicht direkt aufrufen, das ist '01' in response.
sys.exit sollte in einem normalen Programm gar nicht vorkommen. Hier reicht ein return.
`readData` sollte man `read_data` schreiben. `test` ist ein schlechter Name für eine Funktion, die einen Hash ausrechnet, und a ist ein schlechter Variablennamen, der gar nicht gebrauch wird.
client.send ist falsch, das muß mindestens sendall sein, und es muß ein Protokoll geben, das dem Server mitteilt, wann die Nachricht komplett ist.
client.recv ist auch falsch. Da fehlt auch ein Protokoll.
Was erwartet denn der Server?
Magische Methoden sollte man nicht direkt aufrufen, das ist '01' in response.
sys.exit sollte in einem normalen Programm gar nicht vorkommen. Hier reicht ein return.
Die methode test und die variable a habe ich nur zum testen entwickelt, ich versuche meinen fehler zu finden, dass das schlechte Namen sind ist mir bekannt.
Der Server erwartet das richtige passwort um sich anzumelden. Meine Aufgabe ist es dieses Passwort zu finden in dem ich die einzelnen Wörter der datei als passwort versuche
Der Server erwartet das richtige passwort um sich anzumelden. Meine Aufgabe ist es dieses Passwort zu finden in dem ich die einzelnen Wörter der datei als passwort versuche
Der Servercode ist ja nicht mal Python. Dem Servercode fehlt auch ein Protokoll. Das erst ist also, dass Du Dir ein Protokoll aussuchst, mit dem Du den Datenaustausch machst. Am einfachsten wäre ein Zeilenbasiertes Protokoll. Dann benutzt man aber auch nicht recv oder send, sondern läßt sich mit makefile ein fileartiges Objekt geben.