passwortabfrage

Code-Stücke können hier veröffentlicht werden.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

ok, hab mein script in firefox unbenannt und in /usr/bin gesteckt, natürlich die originale kopiert und sicher im home angelegt. auch habe ich subprocess.Popen("firefox") (Edith"dummer dummer fehler, aber pasiert auch mit pfad zu firefox.sh") eingefügt aber immer pasier das was auf dem bild zusehen ist.

ich habe auch die orginale wieder eingefügt und unbenennt zu firefox2 und in meinem subprocess.Popen("firefox2") gemacht. Aber wieder das gleiche wie auf dem Bild. hab auch schon subprocess.open den ganzen pfad zum firefox.sh eingegeben, aber pasierte wieder das wie auf dem Bild. Bin ich zu blöd für den Fehler ?!? ;)

Edith2: Also es geht soweit, nur geht jetzt "anwendungen -> internet -> firefox" nicht mehr im menu, er geht da nicht mehr auf, nur noch im terminal mit firefox "funktioniert" :)

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import getpass
import sys
import os
import subprocess
import time
import userlist

def main():
    ticker = 2
    while True:
        
        name = hashlib.md5(str(getpass.getpass(
        "Wer klopft zu dieser Stund ? "))).hexdigest()
        
        zauberwort = hashlib.md5(str(getpass.getpass(
        "Wie sagt man ? "))).hexdigest()
        
        if (name == userlist.user and zauberwort == userlist.passwd):
            subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
            break  
        else:
            print "War wohl nichts... ", ticker, "versuche !\n"
            time.sleep(2)
            os.system("clear")
            ticker = ticker - 1
        if (ticker == -1):
            print "Shit Happens"
            time.sleep(2)
            sys.exit()

if __name__ == "__main__":
    main()
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dein Python-Script muss natürlich exakt so heißen, wie das Firefoy Binary zuvor! Nix *.py oder *.sh. Exakt - also vermutlich `firefox` ohne Endung (wie bei Binaries üblich).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

das ist mir klar und es ist auch so. es geht ja eig. auch, nur geht es den "manuellen" weg nicht, wen ich im terminal bin und firefox eingebe, kommt mein script und wens stimmt geht der firefox auf, alles richtig und gut.

nur wen ich im menu auf Anwendungen -> Internet -> firefox klicke, geht er nicht auf.

das "meinige firefox" script ist als programm ausführbar markiert in den eigenschaften.

in der firefox desktop verknüpfung ist zwar "Befehl firefox %u" aber es geht auch nicht wen nur firefox als befehl ist.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was heißt denn "klappt nicht"? Passiert einfach gar nichts?

Generell solltest Du mal an der Präzision Deiner Postings arbeiten. Im obigen (auf das ich mich bezog) steht irgend etwas mit `firefox.sh` - und auch etwas von Bildern, auf denen man etwas sehen soll, die aber nicht da sind. Dein aktuelles, speziell der erste Absatz, ist dermaßen unleserlich, dass ich den Sinn dahinter kaum erkenne.

Sofern Dein Script global installiert ist, muss es auch über einen Desktop-Eintrag gestartet werden. Ich sehe da nur keinerlei GUI-Komponenten; insofern wäre dann klar, dass Du nichts siehst - denn es wird ja nicht automatisch eine Shell aufgemacht ;-) Schau mal per `ps` nach, ich wette da findest Du einen Prozess Deines Scriptes!

Wenn Du Eingaben auf der Konsole willst, musst Du Dein Script eben in einer starten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hehe jop, sorry, kamm ober ganz schon durcheinander im Text.

Also wen ich über: Anwendungen -> Internet -> Firefox, starte. sieht man schon im Panel "firefox wird gestartet", es pasiert aber sonst einfach nichts und es schliesst sich wieder.

Aber ich werde jetzt erst ma bissl lesen, wegen "ps" :)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie ich ja schon schrieb fragst Du das Passwort doch in einer Kommandozeilen-Shell ab. Wenn diese nicht vorhanden ist, kannst Du die Eingabeaufforderung folglich nicht "sehen". Eine solche Shell öffnet sich ja nicht einfach so!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo

ich denke du wirst den Befehl unter "Anwendungen -> Internet -> Firefox" vermutlich in etwa so abändern müssen

Code: Alles auswählen

xterm -hold -e "Dein_Skript"
Gruß...busfahrer
Alles wird gut ;-)
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

genial es funktioniert ! :) vielen vielen dank. :)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hmm zu früh gefreut, es geht zwar das terminal auf, wen ich jetzt über des menü firefox starte, aber wen ich die daten richtig eingebe kommt einfach nichts mehr, er geht also nicht auf. hmm
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

lösung gefunden:

Hauptmenü einstellungen -> firefox -> eigenschaften -> anwendung im terminal und dann bei Befehl: "mein script" und alles funktioniert wunderbar !

Tante Edith: Doch wieder zu früh gefreut, nach dieser einstellung kann ich zwar über des menu auf firefox und das terminal mit meinem script geht auf, aber es pasiert wieder nichts, wen ich alles richtig eingegeben habe.

Wiederum: Terminal -> firefox eingeben name passwort -> firefox startet sauber.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

so, alles geht soweit, jetzt ist nur noch das script dran, ich wollte es neu schreiben und das ergebnis sieht man unten:
Ich wollte es eben neu schreiben und sauberer, aber, irgendwo ist ein fehler drin, den gebe ich das passwort oder den usernamen ein, "cleart" es zwar den screen, aber es haut mich auch aus dem programm und es kommt wieder:

ich bin schon lang am studieren, komm aber net wirklich drauf.. könnte mir jemand auf die sprünge helfen bitte ?

smodo@psycircle:

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import subprocess
import userlist
import getpass
import sys
import os

user = userlist.user
passwd = userlist.passwd


ticker = 2
passwd_input = str() 
user_input = str()

while (user_input != user and passwd_input != passwd) and ticker > -1:  

    user_input = hashlib.md5(getpass.getpass(
    "Wer klopft zu dieser Stund ? ")).hexdigest()

    passwd_input = hashlib.md5(getpass.getpass(
    "So sage mir, des Raetsel`s loesung ? ")).hexdigest()


    if (user_input == user and passwd_input == passwd):
        print "Gehet weiter... "
        subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
        
    elif (user_input == user and passwd_input != passwd):
        print "falsche loesung... "
        os.system("clear")

    elif (user_input != user and passwd_input == passwd):
        print "taeusche nicht mit falschen namen...! "
        os.system("clear")

    else:
        print "alles falsch"

    ticker = ticker - 1
    
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Füge mal prints ein um den Ablauf deines Programm zu erkennen und gib dir gleichzeitig die Belegungen ALLER Variablen aus. Die Klammern beim while und if sind übrigens überflüssig und sollten weggelassen werden.
Das Leben ist wie ein Tennisball.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

ok danke, die klammern sind weg.

@EyDu wegen "Füge mal prints ein um den Ablauf deines Programm zu erkennen und gib dir gleichzeitig die Belegungen ALLER Variablen aus."

hmm ich benutze ja print und wie kann ich mir gleichzeitig alles ausgeben lassen ?!? sorry bin aber immer noch anfänger.. :)

und es ist immer noch komisch: Gebe ich die daten so ein das es eine bedingung eines "elif" erfüllt, funktionieren print und os.system("clear"), aber dann hauts es mich wieder raus. und es kommt wieder der standart terminal prompt.

EDIT: Habe es jetzt mal so probiert, geht aber auch nicht wirklich, ich weis nicht wie ich die Variablen für ide eingabe in die schleife einbinden kann, muss ich da schon mit "self" arbeiten ?
man man man möchte gerne dieses problem lösen, aber ich komm einfach nicht weiter, ich möchte eigentlich das die eingaben in einer eigenen funktion sind, da bin ich doch schon mal richtig oder ?

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import subprocess
import userlist
import getpass
import sys
import os
import time

user = userlist.user
passwd = userlist.passwd

def main():
    user_input = hashlib.md5(getpass.getpass(
    "Wer klopft zu dieser Stund ? ")).hexdigest()

    passwd_input = hashlib.md5(getpass.getpass(
    "So sage mir, des Raetsel`s loesung ? ")).hexdigest()
main()

while user_input != user and passwd_input != passwd or ticker >= 0:

    if user_input == user and passwd_input == passwd:
        print "Gehet weiter... "
        subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
        
    elif user_input == user and passwd_input != passwd:
        print "falsche loesung... "
        time.sleep(1)
        os.system("clear")
        main()
    elif user_input != user and passwd_input == passwd:
        print "taeusche nicht mit falschen namen...! "
        time.sleep(1)
        os.system("clear")
        main()
    else:
        print "alles falsch"
        time.sleep(1)
        os.system("clear")
        main()
        
    ticker = ticker - 1
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Was soll die Variable ticker bezwecken? Und könntest du mal ausführlich formulieren wie du vorhast alles genau zum Laufen zu kriegen, so ganz verstehe ich nämlich nicht wie es in der Form laufen (oder auch nicht laufen) soll.

Übrigens, wenn man statt eines Strings in Anführungszeichen einen Variablennamen (wie z.B. user, passwd, ticker, user_input, password_input) oder Ausdrücke (user == user_input) nach der Print-Anweisung schreibt, wird eine String-Repräsentation davon ausgegeben. Also ruhig mal den Code damit nach den Vergleichen/Zuweisungen spicken, dann wird alles klarer.

Was ich mir denken könnte ist, dass dein System nicht einfach mit MD5-Hashes arbeitet. Zumindest unixoide sollten mittlerweile ja Salts nutzen, sodass ein einfacher Abgleich ohne dessen Kenntnis daneben haut. Und Windows nutzt ja auch wieder ganz andere Systeme für die Authentifizierung.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

so, habs total verworfen und neu gemacht.
Ist noch nocht ganz fertig, aber das grundgerüst steht, sozusagen.

die main() funktion könnte man sicherlich noch verkürzen, wird auch sicher noch gemacht. Und alles was halt zuviel war in main, in eine einzelne Funktion zu machen.

aber schauts mal an:

http://s1.directupload.net/file/d/2744/tnuwd7fr_png.htm
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
lunar

@smodo: Quelltext als Screenshot? Nicht Dein Ernst?! Erwartest Du jetzt von uns, dass wir den abtippen, um ihn ggf. auszuprobieren? Kopiere Deinen Quelltext doch bitte einfach in Deinen Beitrag, oder in ein Pastebin wie http://paste.pocoo.org
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hehe jo sorry, dachte eig. die meisten schauen sowieso bei so kleinem zeugs nur drüber :) aber verstehe dich, sorry :)

programm:

Code: Alles auswählen

import userlist
import hashlib
import os
import getpass
import time
import sys

def benutzer(user): # Die Benutzer_User_eingabe wird umgewandelt !
    return hashlib.md5(user).hexdigest()
 
def pin(password):  # Die Benutzer_Passwort_eingabe wird umgewandelt !
    return hashlib.md5(password).hexdigest()

def main():
    os.system("clear")

    print "\n---{ Der Torwächter v0.4 }---"
    print "\nZerstöre den Torwächter mit (q oder Q)\n"
    user = raw_input("\nWer stört.. zu später Stund: ")

    if user in ("Q", "q"):    #evtl. Beenden ?
        sys.exit()
    else:
        md5user = benutzer(user)
        os.system("clear")
        print "\nSei gegrüsst %s\n" % (user)

    pinin = pin(getpass.getpass("\nSo sage mir dein {Zauberwort}: ")) #passwort eintippen !

                    # Ab hier beginnt die überprüfung !
    if md5user in userlist.users:
        if pinin == userlist.users[md5user]:
            os.system("clear")
            print "Viel Spass - %s" % (user)
            time.sleep(3)
        else:
            os.system("clear")
            print "Passwort Flasch !"
    else:
        os.system("clear")
        print "%s Existiert nicht !" % (user)
    
if __name__ == '__main__':
    main()    

und hier im gleichen ordner:

Code: Alles auswählen

# nach dem schema: ("username":"passwort")

users = {
         "29279a52c6d071bcf63f446d665c077e":"b667a962b6939e87f352a14012a4fa01",
         "83e1cc2744818f37bfbf54633883b0c8":"f379eaf3c831b04de153469d1bec345e"
        }
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Den Usernamen brauchst du nicht als md5 speichern, der soll ja nicht geheim bleiben. os.system("clear") ist böse, ich als einer der die Konsole viel benutzt würde das Skript verfluchen, dass mir "clear" aufruft.

@Lunar: das spart dir das Installieren einer IDE :twisted:
the more they change the more they stay the same
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

wie kann ich den sozusagen, die konsole putzen, wen ich os.system nicht benutzen sollte ? und ja ich weiss wiso, man kann nach os.system("clear") einen befehl anhängen. ABer wie kann ich das anderst machen ?
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
BlackJack

@smodo: Es geht ja nicht nur darum `os.system()` nicht zu benutzen, sondern darum die Konsole nicht zu leeren. Du weisst ja nicht was Du da alles löschst was der Benutzer vielleicht gerne noch gehabt hätte. „Vollbildschirm“-Programme für die Konsole stellen in der Regel hinterher den alten Inhalt wieder her. Dann wird es aber etwas komplexer als einfach nur ein externes Programm auf zu rufen. Das geht zum Beispiel mit dem `curses`-Modul aus der Standardbibliothek oder dem darauf aufbauenden `urwid` wenn es auch etwas externes sein darf.
Antworten