Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
29.05.2002, 19:55
Danielxx



Hi,
ich möchte die Serverliste vom Server abfragen (z.B. half-life.east.won.net:6003). Ich habe mich damit noch nicht so richtig beschäftigt und weiß nicht genau wie ich das machen soll. Wie man den Status einen einzelnen Server mit php abfrägt weiß ich seit heute, hab gerade das Tutorial gemacht. So ähnlich müsste das mit der Serverliste auch gehen, oder? Ich hoffe mir kann einer Helfen. Sollte in php oder c/c++ sein.

MfG
Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche
001
29.05.2002, 20:32
Damocles



Ich denke mal, das ist kein HL-Editing.

--

Damocles

Die Hölle wird von jeder Generation in der Fantasie neu gestaltet. Ihr Gebiet wird nach Absurditäten abgesucht und in frischer Form neu erbaut; ihre Schrecken werden unter die Lupe genommen und, wenn nötig, neu erfunden, um dem jeweiligen neuen Klima der Grausamkeit gerecht zu werden; ihre Architektur wird abgewandelt, damit sie dem Auge der modernen Verdammten etwas zu bieten hat.

zum Seitenanfang zum Seitenende Profil || Suche
002
30.05.2002, 00:10
feigling



Hmm, ich meine, sowas gab es hier schonmal.
Such einfach mal mit der Forensuche. Ich bin mir eigentlich fast 100%ig sicher, dass die Frage schonmal da war und dass die auch beanwortet wurde.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
30.05.2002, 09:01
Danielxx



Sorry, nach was muss ich Suchen? Wenn ich "Serverliste" suche finde ich leider nichts brauchbarens.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
30.05.2002, 13:16
Ferdi



[zum löschen freigegenben]

--


Dieser Beitrag wurde am 30.05.2002 um 13:17 von Ferdi bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
30.05.2002, 21:06
apfelkorn



warum denn das schon wieder?

Ic habe bis jetzt noch keine Protokollbeschreibung gesehn, wo das Protokoll zum Masterserver beschrieben wird...

--

zum Seitenanfang zum Seitenende Profil || Suche
006
30.05.2002, 22:48
Danielxx



@Ferdi

Ich würd aufpassen, dass du nicht gleich gelöscht wirst. Wenn du nichts anderes als spammen kannst, dann solltest du erst gar nicht posten.

Ich habe leider nichts passendes gefunden, hat das noch niemand gemacht?

--

zum Seitenanfang zum Seitenende Profil || Suche
007
30.05.2002, 23:07
blair



ei leute...

klar gibts ne protokoll beschreibung... lest ihr nich die dateien, die beim sdk dabei sind?

ich hab sowas für rr gemacht, und es geht...

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs

zum Seitenanfang zum Seitenende Profil || Suche
008
31.05.2002, 09:18
Danielxx



Ich hab mir das Protokoll angeschaut, werd aber daraus nicht schlau. Ich versuche gerade ds in php zu machen, aber bei mir will das einfach nicht. Könnte mir vielleicht jemand ein Codebeispiel, wie ich die Verbindung zum Masterserver aufbauen kann geben? php oder c/c++.

Das steht im Protokoll, nur weiß ich nicht, wie ich das umsetzen kann.

Master server query protocol:

Sent to master:

(byte) ASCII 'c' ( A2M_GET_SERVERS )

Response from master:

(int32) -1
(byte) ASCII 'd' ( M2A_SERVERS )
(byte) unused

// This is followed by as many 6 byte ip addresses as will fit in the message. The master currently feeds about 2K worth of IP address ( 300+ or so ), but we may up that # significantly in the near future.

(4 x byte) ip address
(int16) port #

Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche
009
31.05.2002, 10:29
apfelkorn



achso... na das hab ich bis jetzt immer übersehen, aber das erklärt einiges...

danke

--

zum Seitenanfang zum Seitenende Profil || Suche
010
31.05.2002, 14:44
Andy_



@Danielxx,

Wenn du dich mal in Sockets schlau machen würdest, würdest du wissen wie man das verwirklicht. Es gibt nicht für jede Kleinigkeit einen Beispielcode.

BTW: Es gab mal den CS-Launcher (ja, dieses Tool für ein dummes Spiel) als OpenSource, der konnte auch Serverlisten übertragen, leider ist die Page aber down...

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
011
31.05.2002, 16:51
Ferdi



spamen? eh....ich hab nur meinen post wieder wegeditiert weil er nichts gebracht hätte...hab eben erst hinterher gemerkt dass die Seite(n) inzwischen down sind.
also ganz ruhig....

--

zum Seitenanfang zum Seitenende Profil || Suche
012
31.05.2002, 21:00
Danielxx



@Ferdi
Sorry, hab was falsch verstanden

Ich hab es jetzt geschafft, die Serverliste abzufragen *stolzbin* :-)
Ich kann nur die ip nicht finden, ich habe z.B.

protocol\45\challenge\1691764994\players\0\max\12\gamedir\cstrike\map\de_dust2\type\d\password\1\os\w\secure\1\lan\0\version\1.0.0.4

Aber es gibt dort keine ip, woher bekomm ich die?

Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche
013
31.05.2002, 22:09
Andy_



Zitat:
Danielxx postete
// This is followed by as many 6 byte ip addresses as will fit in the message. The master currently feeds about 2K worth of IP address ( 300+ or so ), but we may up that # significantly in the near future.

(4 x byte) ip address
(int16) port #

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
014
31.05.2002, 22:21
Danielxx



Und was heißt das zu Deutsch?
Was muss ich genau machen?

--

zum Seitenanfang zum Seitenende Profil || Suche
015
01.06.2002, 02:00
Andy_



Zitat:
Hab mich mit dem Protokoll etwas auseinandergesetzt:
Also, erstens schickst du dem Server eine falsche Anfrage, du schickst ihm ein 'e', aber das Ergebnis braucht nur der HL-Client selber.
schicken soltest du ihm aber ein 'c', dann gibt er dir als antwort erst 6 Bytes schrott, das solltest du am anfang einfach ins leere auslesen lassen, dann kommen erst 4 Bytes (IP-Adresse) und dann 2 Bytes (Port), diese zwei sachen wiederholen sich dann immer wieder nacheinander, nur halt mit unterschiedlichen Ip's/ports.
Das sind die ServerIP's, die im Masterserver gespeichert sind. Die Daten aus den einzelnen Servern parst du einfach nach der normalen Game Server-Info Tuts (z.B. das auf DHCC).
Ungefähr genauso arbeitet der HL-Client, man sieht erst, das er relativ schnell die Serverbatch vom Masterserver läd, (mit den IP's und Ports), und dann jeden Server in dieser Batch anpingt und dessen Stats ausliest. (Deshalb diese 2 Abfrag-Phasen)

Habs mittlerweile hinbekommen in php zu coden, werde es päter als Tut releasen. Ist aber im allgemeinen garnicht sehr schwer zu coden, nur udp suckt hierbei ein bischen, weils so langsam ist.

--

42 Es gibt keinen Sinn des Lebens.


Dieser Beitrag wurde am 01.06.2002 um 04:32 von Andy bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
016
01.06.2002, 12:02
Danielxx



Hi,
ich check das mit der IP immer noch nicht ganz. Ich habe das mal in php probiert:
Er soll 100 Serverips vom Masterserver holen

for($i=0;$i<100;$i++)
{
fwrite($hl->fp,1);
fread($hl->fp,6);

echo $hl->get_byte();
echo".";
echo $hl->get_byte();
echo".";
echo $hl->get_byte();
echo".";
echo $hl->get_byte();
echo":";
echo $hl->get_int16();
echo "<br>";

}
Alle IPs die er mir anzeigt gehen aber leider nicht. Was mache ich falsch?

Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche
017
01.06.2002, 12:28
Andy_



Der Server gibt die IP's als ASCII Nummer zurück, außerdem ist im DHCC-Tutorial die 16 Bit auslesung nicht passend:Quellcode:for($i=0;$i<100;$i++)
{
fwrite($hl->fp,1);
fread($hl->fp,6);

echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo":";
$s_port = unpack("nint",fread($hl->fp,2));
echo $s_port['int'];
echo "<br>";

}

--

42 Es gibt keinen Sinn des Lebens.


Dieser Beitrag wurde am 01.06.2002 um 12:29 von Andy bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
01.06.2002, 20:47
Danielxx



Zitat:
Andy postete
Der Server gibt die IP's als ASCII Nummer zurück, außerdem ist im DHCC-Tutorial die 16 Bit auslesung nicht passend:Quellcode:for($i=0;$i<100;$i++)
{
fwrite($hl->fp,1);
fread($hl->fp,6);

echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo".";
echo ord($hl->get_byte());
echo":";
$s_port = unpack("nint",fread($hl->fp,2));
echo $s_port['int'];
echo "<br>";

}

Hi,
vielen Dank für deine Bemühungen, leider funktioniert der Code auch nicht. Es kommen ips raus, die gibt es gar nicht. Die sehen alle auch ziemlich gleich aus.

z.B.
51.50.48.49:17490
49.49.49.49:25455
49.57.49.49:25966
53.53.52.53:12344
49.49.57.53:23661
57.49.49.49:26994
49.49.57.49:24944
49.49.49.49:27748
49.57.49.57:29555
57.49.49.57:30556

Daniel

--


Dieser Beitrag wurde am 01.06.2002 um 20:48 von Danielxx bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
019
01.06.2002, 21:05
Andy_



ups, hab net gesehen das die funktion get_ip schon die ord() funktion benutzt, also dort überall das ord() entfernen... dann müsste der rest funktzen, sonst kann ich auch net weiterhelfen.

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
020
01.06.2002, 21:44
Danielxx



Hi,
vielen Dank, jetzt funktioniert es.
Jetzt muss ich das Ganze nur noch in c/c++ realisieren. Hast du vielleicht davon auch eine Ahnung? Bei mir hängt sich das Programm beim abfragen des Servers auf. Das liegt warscheinlich daran, das ich was falsches sende, war bei mit in php am Anfang auch. In php sende ich einfach nur ein byte, aber in c/c++ muss ich einen char angeben, deshalb weiß ich noch nicht genau wie ich das machen muss. Werd das aber sicherlich noch rausfinden.

Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche
021
01.06.2002, 22:06
Andy_



Im Doc fürs Serverprotokoll findest du ganz unten den C++ Code des HL-Launchers, denn kannst du zur Hilfe nehmen. Sonst müsste ich den Code sehen, inwiefern du das verwirklicht hast.

Aprops, hier ist mein PHP-Server Query Script: http://hacks.slware.com/serverlist/phpinfo2.php

--

42 Es gibt keinen Sinn des Lebens.


Dieser Beitrag wurde am 01.06.2002 um 22:07 von Andy bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
01.06.2002, 22:16
Danielxx



Ich hab mir den Code mal angeschaut, aber was ist bitte schön NET_Config und NET_SendPacket?
Ich habe das mal mit der MFC Klasse CSocket probiert, das haut aber noch nicht ganz hin.

--

zum Seitenanfang zum Seitenende Profil || Suche
023
01.06.2002, 22:45
Danielxx



Hab das jetzt mal mit WinSock probiert, läuft aber noch nicht ganz. Er hängt sich beim lesen der Daten auf.

Quellcode:
long rc;  
SOCKET s;  
char buf[256];  
SOCKADDR_IN addr;  
SOCKADDR_IN remoteAddr;  
int remoteAddrLen=sizeof(SOCKADDR_IN);

addr.sin_family=AF_INET;
addr.sin_port=htons(27010);
addr.sin_addr.s_addr=inet_addr("udp://half-life.east.won.net");

WSADATA wsa;  
WSAStartup(MAKEWORD(2,0),&wsa);

//UDP Socket erstellen
s=socket(AF_INET,SOCK_DGRAM,0);
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));

rc=send(s,"c",1,0);
[b]rc=recv(s,buf,256,0);[/b]

--


Dieser Beitrag wurde am 01.06.2002 um 22:48 von Danielxx bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
024
03.06.2002, 17:06
Danielxx



Okay, ich habe es jetzt geschafft eine Verbindung zum Masterserver herzustellen, aber leider bekomme ich immer nur eine ip Adresse. Was mache ich falsch?

char c='c';
SendTo(&c, 1, Sock.Port, (char const *)Sock.Addr);

void CSock::OnReceive(int nErrorCode)
{
BYTE Buf[4000];
CString AddrR;
UINT PortR;

int Len = ReceiveFrom( Buf, sizeof(Buf), AddrR, PortR);

int ip1=(int)Buf[6];
int ip2=(int)Buf[7];
int ip3=(int)Buf[8];
int ip4=(int)Buf[9];

int port=((int)Buf[10]<<8)+Buf[11];

CString Adresse;
Adresse.Format("%d.%d.%d.%d:%d);
AfxMessageBox(Adresse);
}

Daniel

--

zum Seitenanfang zum Seitenende Profil || Suche