Einloggen auf einer Website (mechanize)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Sonntag 27. Mai 2007, 14:06

Hallo,

ich hab ein bisschen im Forum rumgesucht, aber nix passendes gefunden - bis auch das Modul mechanize, bei dem ich aber keine Doku finde, die mir hilft.
Was ich machen möchte: Ich will mich auf Webseiten einloggen, um mir bestimmte Informationen ausgeben zu lassen :wink: Da ich keine Lust habe immer wieder ne andere Seite aufzurufen, wollte ich mir ein Skript schreiben, dass das erledigt.
Leider scheitere ich schon beim login :lol:
Nehmen wir einfach mal als Beispiel www.wetl1.travian.de (ist ein Browsergame) dort will ich mich einloggen und schauen, ob ich eine PN bekommen habe bzw angegriffen werde.
Ich habe in dem Beitrag, in dem ich mechanize gefunden habe, ein kurzes Bsp von Gerold gefunden. Leider komme ich, wenn ich es ausführe nicht in das Spiel rein, sondern lande wieder auf der Login-Seite.
Die einzige Doku, die ich zu mechanize gefunden habe hat mir nicht viel geholfen (http://wwwsearch.sourceforge.net/mechanize/doc.html).
Hier mal das Skript:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import mechanize
import urllib

# Login
loginurl = "http://welt1.travian.de/login.php"
logindata = urllib.urlencode(
    {
        "e42e285": "Nidhöggr",
        "eee3ed2": "2b34nd",
        "e0073f5": "4eac5ffe42",
        "login": "1180269803",
        "w": "",
        "s1": "login",
        "autologin": "ja"
    }
)
response = mechanize.urlopen(loginurl, logindata)
response.read() # wichtig

posteingangurl = "http://welt1.travian.de/nachrichten.php"
response = mechanize.urlopen(posteingangurl)
#schreibe den htmloutput in eine Datei,
#damit man das Ergebniss anschauen kann
f = file('output.html','w')
f.write(response.read())
f.close()
Ich hoffe, ihr habt ne Idee, wie ich das zum Laufen bekommen kann.
LG
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 27. Mai 2007, 21:29

CrackPod hat geschrieben:Leider scheitere ich schon beim login :lol:
Nehmen wir einfach mal als Beispiel www.wetl1.travian.de (ist ein Browsergame) dort will ich mich einloggen und schauen, ob ich eine PN bekommen habe bzw angegriffen werde.
Hallo CrackPod!

Im Quelltext der Seite http://welt1.travian.de/login.php steht das hier:

Code: Alles auswählen

<form method="post" name="snd" action="dorf1.php">
Das sagt aus, dass beim Klicken auf den Submit-Button die Seite "dorf1.php" aufgerufen wird. Dabei wird an diese Seite alles mitgegeben, was in das Formular eingegeben wurde.

Du musst also "dorf1.php" mit den Logindaten aufrufen und nicht "login.php". Danach kannst du "nachrichten.php" zum Lesen der Nachrichten aufrufen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Montag 28. Mai 2007, 11:48

Pass aber auf da Bots untersagt sind.
Also nicht zuviel, zuschnell klicken und Browser Header vom IE oder Mozilla mit senden :-D

Wenn mechanize das nicht standard mäßig eh schon macht.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 28. Mai 2007, 12:09

Hallo CrackPod!

Code: Alles auswählen

        "e42e285": "Nidhöggr",
        "eee3ed2": "2b34nd",
        "e0073f5": "4eac5ffe42",
Diese Zeilen machen mir mehr Sorgen. Falls diese unsichtbaren Felder, deren Name und Wert sich ändert, dazu da sind, einen Bot abzuwehren, dann würde ich das als ernsthafte Aussage gegen eine automatische Anmeldung ansehen.

Man könnte das Login-Formular parsen, bevor man zur nächsten Seite weiter geht, aber lass es lieber. Du kannst dir damit nur Ärger einhandeln. Ausgenommen natürlich, wenn du dir die Erlaubnis der Seitenbetreiber einholst. Du könntest ja ausmachen, dass dein Programm eine bestimmte Signatur hinterlässt und sich nicht als IE oder Firefox ausgibt...

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Montag 28. Mai 2007, 20:04

Ich habe damals bei meinem Browsergame mal den LoginButton durch eine Grafik ersetzt um die Koordinaten des Clicks auszulesen. Ohne Koordinaten -> Bot :)
Die Änderung hab ich natürlich über Nacht durchgeführt und etliche Bots gefunden.

Es war aber immer dasselbe. Irgendjemand hat irgendetwas automatisiert, ich musste es ändern, jemand hat was anderes automatisiert, ich habs geändert, jemand hat .......

lgherby
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 28. Mai 2007, 20:33

Ich würde fast vermuten, dass bei der Benutzung von Enter oder Tab+Space auch keine Koordinaten gesendet werden...
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Montag 28. Mai 2007, 20:41

Jap die Enter bestätigung ist garnicht so selten.
100% melde ich mich mit Enter an wenn ich Username und Passwort eingeben muss andernfalls wenns ausgefüllt ist klicke ich auch mal.

Aber wie lese ich die Koords des Klicks aus? Geht doch nur per JS und bei der nächsten Seite die Daten auswerten und ggf speichern und JS kann deaktiviert sein.

Spontan eingefügte unsichtbare Felder finde ich besser. ;-)
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Montag 28. Mai 2007, 20:46

Bei "enter" waren die koordinaten x=0 und y=0
Und das lief ohne JS, scheint so als ob der Browser so "freundlich" ist und die erstellt.

Hier die PHPFAQ, sollte in Python auch möglich sein.

http://www.php-faq.de/q/q-formular-image.html

lgherby
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 28. Mai 2007, 21:12

Ich gebe zu - das kannte ich noch nicht. Ich halte sowas auch für von eher geringem Nutzen.
Nun, aber was hindert jetzt jemanden, der einen Bot schreibt auch diese Koordinaten mitzuschicken? Klar, es verkompliziert das ganze etwas, aber nicht sonderlich. Spätestens mit einem Sniffer weiß man, was man welche Daten man an den Server schicken muss, um sich einzuloggen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Montag 28. Mai 2007, 21:28

Naja, wie ich schon geschrieben habe hilft es ja nicht ;)
Ich hab halt solche Bereiche immer von Zeit zu Zeit geändert um die Botbesitzer zu überraschen :)

lgherby
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Montag 28. Mai 2007, 21:48

Sehr geil danke.
(Ab zu den Lesezeichen)

Das soetwas ohne JS Möglichist wundert mich.

Das fairste ist wenn das Browsergame ne API rausbringt ;-)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 29. Mai 2007, 09:56

Bei einem Formular, das über einen Submit-Button vom Typ "image" abgesendet wird, werden die Parameter x und y mitgesendet - notfalls jeweils mit dem Wert 0.

Das habe ich vor Jahren mal verwendet, damit man so den eigenen Wohnort auf einer Landkarte markieren kann.
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Samstag 2. Juni 2007, 12:19

Erstmal: Danke für eure Hilfe bisher :)
Ich muss sagen, das Ding zu knacken wird ein hartes Ei, da extrem viele Steine im Weg liegen.
Mittlerweile seh ich die Sache mehr als Übungszweck, bei der ich mehr lern, als dass ich aus dem Ding großen Nutzen hätte =D
LG
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 2. Juni 2007, 15:02

CrackPod hat geschrieben:Mittlerweile seh ich die Sache mehr als Übungszweck, bei der ich mehr lern, als dass ich aus dem Ding großen Nutzen hätte
Hallo CrackPod!

Dann sieh dir mal ClientForm an. Das ist inzwischen in Mechanize integriert.

Die Vorgehensweise ist die:
- mit ClientForm das Login-Formular öffnen
- Benutzername und Passwort übergeben
- submitten

Das lässt sich alles mit ClientForm machen. Damit musst du dich nicht selber um das Parsen der TAGs kümmern. Beispiele sollten auf der Website von ClientForm zu finden sein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Sonntag 3. Juni 2007, 13:26

Hallo,

danke für die Hilfe bisher, aber bei einem Problem weiß ich nicht, wie ich es lösen soll:
Das Image, das als Submitbutton fungiert, übergibt ja die Koordinaten des Klicks. Wie sehen da die Postdaten aus? Sprich, wie übergebe ich diese dem Script, was meinen Request verarbeitet?
LG
Antworten