Autor Beitrag
Blackdead
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 30.05.08 19:33 
Hallo,
ich habe eigentlich kein Problem, eher eine Frage, bei deren Beantwortung ich hilfe von erfahrenen Delphi programmierern bräuchte.

Ich habe mir einen kleinen Chat gebastelt, welcher mir mit Hilfe zweier Internetseiten die Server IP des akktuelle Battlefield 2 Server des Clienten ausgibt.

Funktioniert so auch wunderbar, jedoch hätte ich gerne eine elegantere Lösung, da die Seiten:
erstens ein zugriffs Limit haben(sprich maximal x anfragen pro Minute),
zweitens nicht ganz akktuell sind(akktualisierung ca. alle 40 sekunden) und
drittens möchte ich die Seiten nicht überstrapazieren und die Daten akktueller halten...

Nun bin ich verzeifelt am überlegen wie andere Programme z.B Xfire(www.xfire.com) an die Server IP kommen. Das Programm braucht ja auch keine andere Webseite um die Server IP rauszubekommen.


Jetzt zu meiner Frage: Wie kann ich die Server IP noch rausbekommen, ausser durch den zugriff auf andere Webseiten...
Gibt es von dem Programm(in meinem Fall Battlefield 2) irgendwelche einträge, variablen oder sonstiges welche ich auslesen könnte oder gar eine .dll? Wie kann ich diese Variablen auslesen und woher weiss man das es solche Variablen gibt?


Für konstruktive Lösungsvorschläge bedanke ich mich schoneinmal im vorraus.


Moderiert von user profile iconAXMD: Topic aus Dateizugriff verschoben am Fr 30.05.2008 um 19:51
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Fr 30.05.08 19:50 
Wenn der aktuelle Server bekannt ist, wo liegt dann Schwierigkeit, dessen IP-Adresse herauszubekommen? :gruebel:

AXMD
Blackdead Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 30.05.08 20:05 
Der aktuelle Server ist ja der BF2.exe bekannt, jedoch nicht meinem Programm...
Desshalb würde ich gern wissen wie ich den akktuellen wert der BF2.exe entlocken kann, sodass ich ihn auch in meinem Programm benutzen kann.

Ich kann die IP zwar über die anfrage einer Website herrausfinden, will jedoch lieber einen anderen weg, den über das programm(bf2), nehmen, da dieser einfach sicherer ist und mein Programm "unabhängiger" macht.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 30.05.08 20:13 
normalerweise kann manden client per UDP abfragen (ich mein bei CS wars so)

ansonsten musst du die Adresse im Speicher finden wo die IP steht und dann mit OpenProcess / ReadProcesssMemory usw auslesen. dazu findest hier im forum was. TSearch hilft dir denk ich zum finden der Adresse.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Blackdead Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 30.05.08 21:03 
user profile iconuall@ogc hat folgendes geschrieben:
normalerweise kann manden client per UDP abfragen (ich mein bei CS wars so)

ansonsten musst du die Adresse im Speicher finden wo die IP steht und dann mit OpenProcess / ReadProcesssMemory usw auslesen. dazu findest hier im forum was. TSearch hilft dir denk ich zum finden der Adresse.


Könntest du mir für die Abfrage mit UDP vielleicht ein Beispiel geben?
Mit TSearch habe ich es mal ausprobiert, mir ist jedoch nicht klar nach was ich wirklich suchen soll... ich suche ja den String: "abc.def.ghi.jkl" und was das für ein wert ist, ist mir grad unklar :S
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 30.05.08 21:10 
geh aufn server und such nach dem 4bytewert (bei 255.255.0.0 z.b. $0000FFFF)

UDP geradekeine ahnugn google hilft

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Blackdead Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 30.05.08 22:19 
Nicht das hier was falsch verstanden wurde: Ich habe einen Chat-Clienten auf einem pc, auf dem grade Battlefield 2 Online gespielt wird und suche die ip des servers auf dem sich der client befindet. Ich bin also nicht der BF2 serverm das wäre ja leicht... Ich suche die IP des Servers wo sich der Client drauf befindet, bis jetzt habe ich das mit einer Online abfrage herrausbekommen, die jedoch sehr umständlich ist. Ich will jetzt die IP dierekt am Clienten auslesen, irgendwo wird die BF2.exe das schon zwischenspeichern...

@uall@ogc: kleine frage was wäre beispielsweise 62.104.18.14 für ein byte wert?
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 31.05.08 02:21 
Ich mache sowas immer mit Socket Hooks!

user profile iconBlackdead hat folgendes geschrieben:

@uall@ogc: kleine frage was wäre beispielsweise 62.104.18.14 für ein byte wert?


Schreibe doch mal mit WriteProcessMemory einen Integerwert in den Speicher und schau dir diese Stelle an. :wink: (Integer sind 4 Bytes groß.)
Blackdead Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 31.05.08 12:26 
user profile icon-=LordEvil=- hat folgendes geschrieben:
Ich mache sowas immer mit Socket Hooks!

[...]


Ahhh genau das was ich gesucht habe!
Hättest du eventuell ein kleinen Beispiel Code für einen Socket Hook?
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 31.05.08 16:32 
Schau dir erstmal an welche Dll verwendet wird (winsock.dll,ws2_32.dll), fang' die Packete mit einem Sniffer ab und schau dir die Funktionen an die verwendet werden.
'connect' könnte des Rätsels Lösung sein!
Hookbeispiele findest du hier genug!

Diese Methode funktioniert selbstverständlich nur dann wenn die Hookdll den unmittelbaren Connect versuch mitlesen kann!
Dh. sollte der Client bereits mit dem Server verbunden sein, und du injezierst deine "send"-Hook-Dll gibt es kein Resultat.

Es gibt genügend Wege, studiere die Winsock-Funktionen und du wirst keine Probleme haben!