Seite 7 von 53 ErsteErste ... 3456789101117 ... LetzteLetzte
Ergebnis 91 bis 105 von 785

Thema: Mod für PB-Spiele: PB Mod_v1

  1. #91
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zulan, klappt das Inject-Beispiel von http://pycap.sourceforge.net/ bei dir und du siehst in Wireshark die abgesendeten Pakete?!

  2. #92
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Zulan, klappt das Inject-Beispiel von http://pycap.sourceforge.net/ bei dir und du siehst in Wireshark die abgesendeten Pakete?!
    Nein.

    icmpEchoRequest ist nicht implementiert ("RuntimeError: Lazy", sehr lustig).
    Ich hatte versucht ein UDP packet zu injecten, aber da geht immer kommentarlos beim pycap.inject.inject().inject(packet) (WTF!?) mein python aus...

    ich wuerds mal mit pyip probieren...

  3. #93
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Git add vergessen. Werds, als letzte Aktion für heute, ändern. Wie die Zusammenarbeit bei Forks in Github am besten läuft muss ich auch erst noch heraus finden.
    update.php solltes es nun geben:

    https://help.github.com/articles/syncing-a-fork

    zulan@vow:~/PBStats$ git merge upstream/master
    Auto-merging web/page/contentmanager/Game.functions.php
    Merge made by the 'recursive' strategy.
    web/page/contentmanager/Game.functions.php | 3 +--
    web/page/update.php | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 96 insertions(+), 2 deletions(-)
    create mode 100755 web/page/update.php

  4. #94
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zum senden der Fake-Pakete:

    Also bei mir funktioniert folgendes:

    Code:
    import socket
    import sys
    import ip
    import udp
    
    ClientHost = '192.168.122.222'
    ServerHost = '192.168.122.1'
    ClientPort = 2056 
    ServerPort = 2056
    
    upacket = udp.Packet()
    upacket.sport = ClientPort
    upacket.dport = ServerPort
    #upacket.data = "\xfe\xfe\x68"
    upacket.data = "Hello Server"
    
    ipacket = ip.Packet()
    ipacket.src = ClientHost
    ipacket.dst = ServerHost
    ipacket.df = 1
    ipacket.ttl = 64
    ipacket.p = 17
    
    ipacket.data = udp.assemble(upacket, False)
    raw_ip = ip.assemble(ipacket, 1)
    
    try:
      sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
    except socket.error , msg:
      print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
      sys.exit()
    
    sock.sendto(raw_ip, (ipacket.dst, 0))
    Mangels funktionierendem Civ in einer VM bzw. Pitboss auf anderem Rechner hab ich es noch nicht mit dem PB getestet nur mit einem einfachen:

    Code:
    import socket
    
    ServerHost = '192.168.122.1'
    ServerPort = 2056
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((ServerHost, ServerPort))
    
    while True:
      data, addr = sock.recvfrom(1024)
      print "received message |", data, "| from ", addr
    Die UDP Checksumme fehlt noch, ich habs versucht die mit dem Pseudoheader zu berechnen, aber noch nicht hinbekommen (pyip versucht das garnicht erst die UDP cheksumme korrekt zu berechnen).

  5. #95
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich danke dir Die Udp-Checksumme soll ja nur optional sein. Hatte zwar geschrieben, dass ich meine Probleme auf diese Checksumme zurück führte, aber da hatte ich wohl noch was im Ethernet-Header falsch gesetzt.

    Ich habe heute noch ein paar C-Beispiele angeschaut, die libnet direkt nutzen und auch die Checksumme automatisch berechnen, aber ich probiere das jetzt mal mit dem ip-Paket aus.

  6. #96
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ok, das Unterbrechen des Uploads vom PB-Server klappt. Ich werde dass jetzt in ein Skript gießen, was einmal pro Minute aufwacht und den Udp-Traffic auf einem Port analysiert. Wenn 10 Pakete für einen Client die gleiche Struktur haben wird das als Upload-Bug definiert und ein Beenden der Verbindung probiert.

    Läuft nat. wegen der verwendeten Bibs nicht unter Windows…

  7. #97
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Ok, das Unterbrechen des Uploads vom PB-Server klappt. Ich werde dass jetzt in ein Skript gießen, was einmal pro Minute aufwacht und den Udp-Traffic auf einem Port analysiert. Wenn 10 Pakete für einen Client die gleiche Struktur haben wird das als Upload-Bug definiert und ein Beenden der Verbindung probiert.

    Läuft nat. wegen der verwendeten Bibs nicht unter Windows…
    Warum nicht einfach dauerhaft mitsniffen? Dann hat man ne komplette Serie, das dürfte einfacher auszuwerten sein.

    Neben pycap gibt es noch pypcap, das gibts auch für Windows. das sind ja beides nur libpcap wrapper, sollte sich leicht überführen lassen.
    https://code.google.com/p/pypcap/downloads/list
    Bzw. Für neuere Python.
    http://breakingcode.wordpress.com/20...n-2-5-2-6-2-7/

  8. #98
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Im Anhang ist das Skript für die Upload-Problematik. Bisher nur für Linux. Im Zip sind auch die zwei benutzten Bibliotheken, aber pycap muss man wahrscheinlich eigenständig installieren, da da ja Bibs kompiliert werden.

    Habe den Python-Teil des Pitboss-Server auch schon so verändern, dass er Headless läuft.
    Angehängte Dateien Angehängte Dateien

  9. #99
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Kommt das ins github?

    Edit: Ah, du hast dein pycap von github, ich hatte meins von der 11 Jahre alten sourceforge seite . Aber das sind auch nur 3 nutzlose commits.

  10. #100
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Bei Headless-Versuch gibt leider einen Rückschlag zu vermelden. Ich habe zwar alle Fensterklassen (wx.*) aus dem Code entfernt und auch einen Zustand erreicht, in dem keine Python-Exceptions (auch Fenster) geworfen werden, aber es wird immer noch versucht ein Fenster anzulegen. Darauf weist auch die Zeile
    Code:
    fixme:win:EnumDisplayDevicesW ((null),0,0x32f3b8,0x00000000), stub!
    hin, die wine beim Starten in die Konsole schreibt. Ich hatte dann noch probiert die Fensterausgabe mit xvfb (xvfb-run wine [...] ) umzulenken, aber das scheiterte bisher an 3D-Grafik-Calls.
    Code:
    err:wgl:X11DRV_WineGL_InitOpenglInfo  couldn't initialize OpenGL, expect problems
    wine: Unhandled page fault on read access to 0x00000000 at address 0x5f08da (thread 0009), starting debugger...
    Edit: Beim Googeln zu dem xvfb-Fehler fand ich einen Thread von 2008 aus dem Civforum. Threadersteller: Zulan

    Positiv ist, dass die CPU-Last ohne Fenster stark sinkt. Von vormals 15% auf 1% falls niemand eingeloggt ist.

    Zitat Zitat von Zulan Beitrag anzeigen
    Warum nicht einfach dauerhaft mitsniffen? Dann hat man ne komplette Serie, das dürfte einfacher auszuwerten sein.
    Wahrscheinlich hast du recht und man kann das Skript an der Stelle vereinfachen und das Sniffen sofort neustarten, nachdem es in Aktion getreten war.
    Geändert von Ramkhamhaeng (20. August 2014 um 12:20 Uhr)

  11. #101
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Bei Headless-Versuch gibt leider einen Rückschlag zu vermelden. Ich habe zwar alle Fensterklassen (wx.*) aus dem Code entfernt und auch einen Zustand erreicht, in dem keine Python-Exceptions (auch Fenster) geworfen werden, aber es wird immer noch versucht ein Fenster anzulegen. Darauf weist auch die Zeile
    Code:
    fixme:win:EnumDisplayDevicesW ((null),0,0x32f3b8,0x00000000), stub!
    hin, die wine beim Starten in die Konsole schreibt. Ich hatte dann noch probiert die Fensterausgabe mit xvfb (xvfb-run wine [...] ) umzulenken, aber das scheiterte bisher an 3D-Grafik-Calls.
    Code:
    err:wgl:X11DRV_WineGL_InitOpenglInfo  couldn't initialize OpenGL, expect problems
    wine: Unhandled page fault on read access to 0x00000000 at address 0x5f08da (thread 0009), starting debugger...
    Positiv ist, dass die CPU-Last ohne Fenster stark sinkt. Von vormals 15% auf 1% falls niemand eingeloggt ist.
    Kannst du die Version mal auf github oder hier stellen. Wenn da einfach irgendwo ein paar OpenGL calls kommen, kann man die vielleicht einfach abfangen und so tun als ob es erfolgreich war.

    Wahrscheinlich hast du recht und man kann das Skript an der Stelle vereinfachen und das Sniffen sofort neustarten, nachdem es in Aktion getreten war.
    Ich bin mir noch nicht ganz sicher wann next() None zurueck gibt und wann es blockiert. Das muesste man sich nochmal anschauen. Ich bin mir aber prinzipiell nicht ganz sicher ob die Heuristik greift - bzw. ob es ueberhaupt moeglich ist das zuverlaessig zu unterscheiden ohne sich die Client-Packete anzuschauen. Ich habe den Packetlog nicht vorliegen, aber kann man ausschliessen, dass die selbe Paketstruktur nicht bei Normalem eingeloggt sein auftritt? Oder vielleicht waehrend ein andere Spieler sich einloggt zwischen dem Server und dem Spieler der schon eingeloggt ist?

  12. #102
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Zulan Beitrag anzeigen
    Kannst du die Version mal auf github oder hier stellen. Wenn da einfach irgendwo ein paar OpenGL calls kommen, kann man die vielleicht einfach abfangen und so tun als ob es erfolgreich war.
    Habe es als noGui-Branch in meinem Repo hochgeladen. Achtung, bin noch nicht dazu gekommen deine Änderungen zu mergen. Änderungen sind nur in Assets/Python/Pitboss erfolgt.
    Edit: Hm, er uploaded noch Keine Ahnung warum er da so viel hochläd…


    Ich bin mir noch nicht ganz sicher wann next() None zurueck gibt und wann es blockiert. Das muesste man sich nochmal anschauen. Ich bin mir aber prinzipiell nicht ganz sicher ob die Heuristik greift - bzw. ob es ueberhaupt moeglich ist das zuverlaessig zu unterscheiden ohne sich die Client-Packete anzuschauen. Ich habe den Packetlog nicht vorliegen, aber kann man ausschliessen, dass die selbe Paketstruktur nicht bei Normalem eingeloggt sein auftritt? Oder vielleicht waehrend ein andere Spieler sich einloggt zwischen dem Server und dem Spieler der schon eingeloggt ist?
    Die gleiche Paketstruktur sollte nicht auftauchen. Habe das schon ein wenig ausgetestet. Der Server wiederholt immer die gleichen Daten, wenn die Gegenstelle nicht mehr antwortet. Das hatte interessanterweise aber nicht ganz ausgereicht und ich wurde teilweise beim Laden der Karte gekickt Aber nachdem ich in dem If-Statement bei 'len(payload)' mit der genauen Udp-Paketgröße vergleiche, die beim Upload-Bug auftritt ist alles in Butter. Diese Größe tritt anderenfalls laut Wireshark selten (oder sogar gar nicht) auf. Ich nahm die Länge vom Payload und nicht die Gesamtlänge des Ethernet-Packets, weil bei IPv6-Adressen eine andere Gesamtlänge auftritt.

    Die Analyse der Paketstruktur ist eigentlich aber auch nur dann erforderlich, wenn man das Antwortpaket erstellen will. Es würde auch der Ansatz reichen die Ip's von Eingangs und Ausgangstraffic zu vergleichen. Wenn die Clients nicht antworten ist offensichtlich was im argen Wäre aber in der Programmierung aufwändiger gewesen.
    Geändert von Ramkhamhaeng (20. August 2014 um 12:56 Uhr)

  13. #103
    schläft Avatar von Frozen
    Registriert seit
    10.10.09
    Beiträge
    18.411
    Das wird alles so cool
    Freedom's just another word for nothing left to lose

  14. #104
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Frage zu PHP-Syntax in deinem Code:
    Bei älteren PHP-Versionen ist die Syntax "$columnNames = [];" nicht bekannt.
    Kann ich in = array() umwandeln ohne das es bei dir Warnungen wirft, oder?

  15. #105
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Frage zu PHP-Syntax in deinem Code:
    Bei älteren PHP-Versionen ist die Syntax "$columnNames = [];" nicht bekannt.
    Kann ich in = array() umwandeln ohne das es bei dir Warnungen wirft, oder?
    Ja das kannst du machen. Die schoene kurze Syntax geht seit PHP 5.4. Das wusste ich aber eigentlich garnicht - ich habe nur einfach zu viel Python programmiert seit ich das letzte mal PHP in der Hand hatte .

Seite 7 von 53 ErsteErste ... 3456789101117 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •