fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

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()
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

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
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Ohne Protokoll geht das nicht. Daher die Frage, welches Protokoll erwartet der Server?
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

fehler
Zuletzt geändert von mois am Montag 2. November 2020, 10:48, insgesamt 1-mal geändert.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

das ist der code des servers
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
mois
User
Beiträge: 19
Registriert: Mittwoch 28. Oktober 2020, 12:54

okey danke
Antworten