Seite 2 von 2

Re: passwortabfrage

Verfasst: Sonntag 27. November 2011, 19:35
von Hyperion
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!

Re: passwortabfrage

Verfasst: Sonntag 27. November 2011, 21:22
von busfahrer
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

Re: passwortabfrage

Verfasst: Sonntag 27. November 2011, 22:10
von smodo
genial es funktioniert ! :) vielen vielen dank. :)

Re: passwortabfrage

Verfasst: Sonntag 27. November 2011, 22:15
von smodo
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

Re: passwortabfrage

Verfasst: Sonntag 27. November 2011, 22:21
von smodo
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.

Re: passwortabfrage

Verfasst: Dienstag 29. November 2011, 21:30
von smodo
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
    

Re: passwortabfrage

Verfasst: Dienstag 29. November 2011, 23:46
von EyDu
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.

Re: passwortabfrage

Verfasst: Mittwoch 30. November 2011, 12:09
von smodo
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

Re: passwortabfrage

Verfasst: Freitag 2. Dezember 2011, 22:58
von webspider
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.

Re: passwortabfrage

Verfasst: Dienstag 20. Dezember 2011, 16:18
von smodo
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

Re: passwortabfrage

Verfasst: Dienstag 20. Dezember 2011, 19:10
von 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

Re: passwortabfrage

Verfasst: Dienstag 20. Dezember 2011, 19:37
von smodo
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"
        }

Re: passwortabfrage

Verfasst: Dienstag 20. Dezember 2011, 23:07
von Dav1d
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:

Re: passwortabfrage

Verfasst: Mittwoch 21. Dezember 2011, 10:13
von smodo
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 ?

Re: passwortabfrage

Verfasst: Mittwoch 21. Dezember 2011, 10:28
von 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.

Re: passwortabfrage

Verfasst: Mittwoch 21. Dezember 2011, 10:32
von cofi
Was die Ersetzung von `os.system` angeht: `subprocess.call(['clear'])`

http://docs.python.org/library/subprocess.html

Ich hab es aber auch lieber, wenn Programme ihre Finger von meinem Terminal lassen.