Seite 5 von 53 ErsteErste 12345678915 ... LetzteLetzte
Ergebnis 61 bis 75 von 784

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

  1. #61
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Geht es dir hierbei auch um die dabei gesendeten Daten? Denn falls es nur um das Ereignis an sich geht, würde ich behaupten, dass wir gar keine Erkennung brauchen. Wir senden immer ein gefaktes "Verbindung beenden"-Paket wenn ein Spieler nicht mehr online ist. Egal ob das Ausloggen von ihm erfolgreich war oder nicht.
    Hmm ich glaube ich verstehe was du meinst. Der Server registriert ja in der Spielmechanik, dass ein User nicht mehr eingeloggt ist wenn die Verbindung abbricht (Waere interessant was der Timeout ist). Das Implementierungsproblem ist hier ja nur, dass die Netzwerkebene davon nix mitbekommt - was reichlich schizophren ist, man wuerde ja eigentlich annehmen, dass die Netzwerkebene der Spielmechanik mitteilt wenn ein Spieler austimed...

    Ich weiss nicht wie der Server langfristig reagiert wenn er steaendig doppelte ausloggen-Packete erhaelt, aber ich vermute das sollte er abkoennen.

  2. #62
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ja, ich bin Zuversichtlich, dass doppeltes Ausloggen nichts macht. Um noch ein Argument aufzuführen, warum wir den Zustand des Spielers (on/off) korrekt erkennen können: Wir haben sogar Zugriff auf seinen Ping-Wert, wenn er online ist. Selbst wenn das Spiel nicht mitbekommt, dass der Spieler offline ist (was er ihmo aber schafft) können wir immer noch auf den Pingwert schauen. (Sehr hoch => offline. Konstant => offline.)

    Ich habe es leider noch nicht geschafft mit deinem Pythonskript eine Verbindung zu kappen. Gibt es noch einen Faktor, den man beachten muss, wie z.B. ein Anpassen der Sequenznummer?!

  3. #63
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Ja, ich bin Zuversichtlich, dass doppeltes Ausloggen nichts macht. Um noch ein Argument aufzuführen, warum wir den Zustand des Spielers (on/off) korrekt erkennen können: Wir haben sogar Zugriff auf seinen Ping-Wert, wenn er online ist. Selbst wenn das Spiel nicht mitbekommt, dass der Spieler offline ist (was er ihmo aber schafft) können wir immer noch auf den Pingwert schauen. (Sehr hoch => offline. Konstant => offline.)

    Ich habe es leider noch nicht geschafft mit deinem Pythonskript eine Verbindung zu kappen. Gibt es noch einen Faktor, den man beachten muss, wie z.B. ein Anpassen der Sequenznummer?!
    Also erstmal musst das skript, da es die IP nicht spooft, natuerlich auf dem System laufen wo du gerade Civ unsanft getoetest hast.
    Dann musst du schauen, dass du den richtigen client-lokalen Port bindest, das kann auch aus bestimmten Gruenden mal nicht 2056 sein (z.B. NAT). Das muessen wir auch noch irgendwie rausfinden .
    Ich habe die Sequenznummer bei meinem Test so gewaehlt, dass sie groesser ist als die letzte vom Client benutzte, aber kleiner als die letzte vom Server benutzte nummer.
    Den letzten Teil hab ich wie gesagt frei geraten.

  4. #64
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Zulan Beitrag anzeigen
    Also erstmal musst das skript, da es die IP nicht spooft, natuerlich auf dem System laufen wo du gerade Civ unsanft getoetest hast. Das ist erfüllt
    Dann musst du schauen, dass du den richtigen client-lokalen Port bindest, das kann auch aus bestimmten Gruenden mal nicht 2056 sein (z.B. NAT). Das muessen wir auch noch irgendwie rausfinden
    Ich hatte den PB-Server auf dem gleichen PC laufen. Client hatte dadurch die 2057 erhalten. Die Werte (und die IPs) wurden in deinem Skript angepasst
    .
    Ich habe die Sequenznummer bei meinem Test so gewaehlt, dass sie groesser ist als die letzte vom Client benutzte, aber kleiner als die letzte vom Server benutzte nummer. Dann liegt es wahrscheinlich daran. Ohne Automatisierung ist es gar nicht so leicht eine passende Nummer zu treffen (sofern das wirklich relevant ist. Vllt ist auch was anderes entscheidend)

    Den letzten Teil hab ich wie gesagt frei geraten.
    Ich werds heute Abend noch mal versuchen.

  5. #65
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich glaube ich habe die Syntax der Endnachrichten durchschaut.
    Hier einige Notizen zur Kommunikation:
    Beim Sychronisations-Algo tauschen zwei Werte ihre Position und einer der Werte wird inkrementiert. Außerdem sendet der Client oft 64er-Nachrichten, bei denen er einen neuen Wert vorgibt.

    Code:
    • Beginn immer mit 'fefe' (ab jetzt weggelassen.)
    • < Nachricht vom Server
    • > Nachricht vom Client
    
    [Beginn der Kommunikation]
    > 01 : Client sagt Hallo. Sendet wahrscheinlich Passworthash.
    
    < 02 : Server antwortet irgendwas
    
    > 03 0001 0001 [...]`#192.168.0.22:2057 : Client sendet Daten, die Ip+Port enthalten
    
    < 04 0001 0002 : Server-Syncro-Antwort mit B,A+1
    
    > 64 0002 : Zeitstempel-Nachricht vom Client.
    
    < 00 0002 0002 dcdc 05 […] 192.168.0.22:2056[…]   Nachricht mit Ip+Port vom Server
    < 00 0003 0002 dcdc 0a […] 
    < 00 0004 0002 ffff […]
    
    > 00 0002 0004 [...]
    < 00 0005 0003 [...] Beide Werte erhöht!?
    > 00 0003 0006 [...]
    < 00 0006 0004 Zwei Pakete vom Server, 
    < 00 0007 0004 das zweite sehr groß (Karte)
    
    Das folgende Muster taucht öfter auf 64er-Nachricht vom Client und fast identische Antwort
    des Server. Gesamtlänge der Nachrichten: 49 und 81 Bytes (gut erkennbar)
    > 64 0008
    < 00 0008 0004 [...]
    > 64 0009
    < 00 0009 0004 [gleicher Inhalt wie bei 0008. Sieht nach Idle aus...]
    
    < 66 7469 [...]  ?? Nachricht mit 55 Bytes, kommt öfter
    
    > 64 000f
    > 00 0004 000f 0a000000[...]  Nach 64er gleich eine Nachricht vom Client(!). Deswegen 0f hinten statt vorne
    
    < 00 000f 0005 0b000000[...]
    < 00 0010 0005 [...]
    
    > 64 0011
    < 00 0011 0005
    
    [ Nun zum Traffic am Ende der Session: ]
    > 64 0072
    > 00 002c 0072 [...]
    < 00 0072 002d [...]
    
    > 64 0073
    > 06 002d 0073
    D.h. die Syntax der Endnachricht lautet 06 [Letzte Id vom Server] [Derzeitige Id vom Client]
    Ob die 64er Nachricht vor der 06er-Nachricht optional ist, weiß ich nicht. Jedenfalls kann man alle
    Daten aus der Nachricht des Server ableiten, denn falls '00 A B [...]' vom Server kommt
    lautet die Antwort
    06 B A+1 oder

    64 A+1
    06 B A+1

  6. #66
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Es direkt in der Mod zu lösen erscheint mir nun doch etwas schwierig. Ich gucke mal, ob iptables dafür mächtig genug ist. Diese Lösung wäre dann aber leider plattformabhängig. Aber erst mal schaffen...
    Edit: Aha, wenn man die richtigen Fragen stellt finden man auch so was: http://stackoverflow.com/questions/1...al-destination
    Geändert von Ramkhamhaeng (15. August 2014 um 23:51 Uhr)

  7. #67
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Dann kannst du eine höhere Python-Version verwenden? (Oder was meinst du mit "von der Mod lösen"?)

  8. #68
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Neuere Pythonversion oder auch ganz andere Programme, ja.
    Wir wissen mittlerweile welche Pakete das Upload-Problem beschreiben und wie die Antwort des Clients aussehen müsste, um die Verbindung zu beenden.
    Die Frage, an der wir gerade hängen ist, wie wir an das Datenpaket kommen, welches der Server sendet.
    Dieses Paket enthält unter anderem Quell/Ziel-Ip, Quell/Ziel-Ports und die Daten.

    Man könnte den Traffic beispielsweise versuchen auf einen anderen Port zu lenken. Dabei tritt aber z.B. das Problem auf, dass die ursprüngliche Zieladresse verloren geht.

  9. #69
    Administrator
    Registriert seit
    20.08.04
    Beiträge
    8.964
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Ich weiß jetzt endlich warum die Lösung bei mir zu erst nicht klappte. Es scheitern daran, dass ein DNS Cache noch dafür sorgt, dass die alte IP genutzt wird. Hier habe ich mehr geschrieben:

    http://www.civforum.de/showthread.ph...=1#post6258767

    Edit
    Als beste Lösung für das gamespy-Problem würde ich folgendes vorschlagen: http://realmsbeyond.net/forums/showt...5052#pid495052
    D.h. wir schreiben einfach eine neue Url in die Exe. Könnten wir dafür eine Subdomain vom civforum oder civ-wiki verwenden ?! Ich hätte aber auch noch eine ungenutzte Domain übrig
    Muss denn auf der Domain etwas laufen?
    Verstand op nul, frituur op 180.

  10. #70
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Shakka Beitrag anzeigen
    Muss denn auf der Domain etwas laufen?
    Frozen hat das Thema ja sehr schnell an Dich/Euch vom Forum weitergeleitet, aber Zulan war noch schneller und das Thema konnte meiner Meinung nach schon optimal gelöst werden. Zulan stellt sowohl Subdomain als auch Server (Gamespy-„Ersatz“).
    D.h. meine indirekte Bitte nach Einrichtung einer Subdomain über Civforum würde ich wieder zurück ziehen Es wäre in erster Linie nur um eine Weiterleitung gegangen.

  11. #71
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Shakka Beitrag anzeigen
    Muss denn auf der Domain etwas laufen?
    Ja, der NatNeg Dienst. Grob gesagt tauschen damit verschiedene Spieler die zu einem Spiel verbinden wollen ihre oeffentliche IP/Port aus, damit sie im Spiel miteinander reden koennen. Mehr infos dazu eben
    http://wiki.tockdom.com/wiki/MKWii_N...ntendowifi.net
    oder
    http://realmsbeyond.net/forums/showthread.php?tid=7123

  12. #72
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Es direkt in der Mod zu lösen erscheint mir nun doch etwas schwierig. Ich gucke mal, ob iptables dafür mächtig genug ist. Diese Lösung wäre dann aber leider plattformabhängig. Aber erst mal schaffen...
    Edit: Aha, wenn man die richtigen Fragen stellt finden man auch so was: http://stackoverflow.com/questions/1...al-destination
    Ich finde das umleiten und manuelle weiterleiten der Packete nicht so gut. Was ist denn mit pycap? Ich seh nur noch nicht ganz ob das auch Windows unterstuetzt...

  13. #73
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich habe noch keine Idee, wie ich an die Daten komme, die ich mit Pycap versenden würde.
    Sagen wir beispielsweise, der Pitboss-Server sendet
    [Header-Infos] + "fe:fe:00:00:72:00:2d:[...]"

    Ich brauche die Header-Daten und die farbig markierten Teile. Wie komme ich da ran?

    Mit Iptables könnte man zumindest eine Regel erstellen...
    Dann würde es so gehen:

    1. Es läuft ein Skript mit Admin-Rechten und wartet auf seine Aktivierung.
    2. Pb-Server aktiviert das Script, welches ein paar Iptables-Regeln setzt. Dabei sollte kein Spieler eingeloggt sein.
    3. Der Traffic wird analysiert und die Antwortpakete erstellt. Das Spoofen könnte vllt. über eine ausgefallene Iptables-Regel realisiert werden.
    4. Die Iptables-Regeln werden wider aufgehoben.

  14. #74
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Ich habe noch keine Idee, wie ich an die Daten komme, die ich mit Pycap versenden würde.
    Sagen wir beispielsweise, der Pitboss-Server sendet
    [Header-Infos] + "fe:fe:00:00:72:00:2d:[...]"

    Ich brauche die Header-Daten und die farbig markierten Teile. Wie komme ich da ran?

    Mit Iptables könnte man zumindest eine Regel erstellen...
    Dann würde es so gehen:

    1. Es läuft ein Skript mit Admin-Rechten und wartet auf seine Aktivierung.
    2. Pb-Server aktiviert das Script, welches ein paar Iptables-Regeln setzt. Dabei sollte kein Spieler eingeloggt sein.
    3. Der Traffic wird analysiert und die Antwortpakete erstellt. Das Spoofen könnte vllt. über eine ausgefallene Iptables-Regel realisiert werden.
    4. Die Iptables-Regeln werden wider aufgehoben.
    Pycap provides the ability to capture packets from, and inject packets onto, network interfaces. It dissects commonly found structures in network packets such as Ethernet, IP, ARP, TCP, UDP, and ICMP headers.
    Zum erzeugen der Fake-Packete entweder pycap oder pyip/raw sockets. Dazu braucht man auch einiges an rechten, aber nicht zwangsweise root. Das mit der Aktivierung durch den PB Server ist gut - vorallem wenn man nicht in die Vergangenheit zum letzten Client->Server Packet schauen muss um das logout-Packet zu konstruieren.

  15. #75
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Oh, dass Pycap SOO mächtig ist, hatte ich unterschätzt. Hatte da vorhin keine Beispielanwendungen gefunden.
    Noch was ganz anderes. Beim durchforsten des DLL-Codes bin ich auf
    setNetID(gDLL->getAssignedNetworkID(getID()));
    gestoßen. Da könnte vllt. noch eine andere Lösungsmöglichkeit drin schlummern. Aber nun schlummere ich erst mal selber

    P.S. Bis übernächsten Sonntag habe ich nicht mehr so viel Zeit wie in dieser Woche. Bei Nachfragen kann ich also nicht mehr so schnell reagieren.

Seite 5 von 53 ErsteErste 12345678915 ... LetzteLetzte

Berechtigungen

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