[PHP] Verbinding naar een GameServer met fsockopen

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Beste Tweakers.

Ik zit met een probleempje en heb me inmiddels de pleuris gezocht. Ik ben niet de eniste heb ik al gezien ook is hier al een keer de vraag gesteld maar dan voor C++

Hoe kan ik via het netwerk kijken of een systeem een poort in UDP ingebruik heeft.

Ik heb de volgende php code inmiddels gefabriceerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
//Open het netwerk voor connectie. 
$fp = fsockopen("udp://10.0.0.10",27960,&amp;$errno,&amp;$errstr,10); 
if (!$fp) { 
    //Iets werkt er niet.... 
    echo "ERROR: $errno - $errstr\n"; 
    exit; 
} 
else { 
    echo "Nu zou hij dus online zijn....\n";
    //Verbinding sluiten...
    fclose($fp);
}
?>

Het probleem zit hem nu in het feit dat als je de code uitvoert en er is een systeem online op het IP adres 10.0.0.10 dat hij altijd als online wordt beschouwd ongeacht of poort 27960 (RTCW en Q3A) openstaat of niet. |:(
De foutmelding komt pas als het IP niet meer online is. :?
En ik zou graag ideeën horen/zien over hoe ik dit probleem kan omzeilen. Kent er iemand een oplossing voor mijn probleem.


Alvast bedankt,
GameGeek

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

Hmm.. weet niet precies hoe die fsockopen werkt. Maaruh.. UDP is connectionless. Dwz dat als je wat zend, je hier geen reply op krijgt of dit goed is aangekomen of niet. Het enige wat je kan doen is, als je zeker weet dat je iets terug zou moeten krijgen, een bepaalde tijd wachten en als die tijd verstreken is, en je hebt niks terug gehad, dan staat die poort niet open. Met TCP zou je in principe altijd een reply moeten krijgen. (ack of nack)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Het script waar ik het mijne op gebasseerd heb luid als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
//Q3 query/parsescript by M7@bigfoot.de 01/2001 
//Open the network for transmission. 
$fp = fsockopen("udp://$serverip",$port, &amp;amp;$errno,&amp;amp;$errstr,10); 
if (!$fp) { 
    //Something didn't work.... 
    echo "ERROR: $errno - $errstr\n"; 
    exit; 
} 
else { 
    //Send statusrequest. 
    fwrite($fp,"ÿÿÿÿgetstatus\x00"); 
    //wait till we receive a header and store it (isn't used at the moment) 
    //2Do, use header to determine, if we're really talking to the right server/getting the right data. 
    $header=fgets($fp, 20); 
    //now we get the the servers statusdata in one line 
    $data=fgets($fp, 1500); 
    //Prepare socket for end of transmission from gameserver. 
    socket_set_blocking($fp,0); 
    //Now the server lists it's clients, one each line 
    $playernum=0; 
    while(!feof($fp)) { 
        //put the playerinformation in an array, while counting total number of players. 
        $player[$playernum]=fgets($fp, 100); 
        $playernum++; 
    } 
    //Closing connetion 
    fclose($fp);
}
?>

Deze stuurt dus gegevens naar de server. nu stuurt de server in geen van de gevallen data terug,
In plaats daarvan begint het script te hangen en wordt het na 30 seconden afgesloten door PHP omdat dit de maximale running-time is. Althans het script loopt oneindig door in de while lus.
Ook als ik de while lus weg haal, krijg ik constant dat de server online is...
Ook al weet ik 100% zeker (netstat gegevens opgevraagd) dat de poort niet in gebruik is.

Correspondentie met de auteur van het script loopt de hele tijd vast...

  • Grum
  • Registratie: Juni 2001
  • Niet online
het antwoord is meen ik al gegeven :P

  • Sabbi
  • Registratie: December 2000
  • Laatst online: 23:09

Sabbi

je denkt aan mij.

Kan je niet gewoon een nmap uitloaten voeren door php en dan de uitvoer nalezen of de poort open is|?

  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Op dinsdag 04 december 2001 14:19 schreef Sabbi het volgende:
Kan je niet gewoon een nmap uitloaten voeren door php en dan de uitvoer nalezen of de poort open is|?
Is mogelijk, maar dat nmappen kan je toch alleen als ROOT doen?

Lijkt me niet verstandig om een script met user invoer uit te laten voeren als ROOT. :?

Wat betreft connection less poort die UDP, hoe moet het dan wel, want de stukken die ik heb die werken niet,

Misschien dat er nog een andere mogelijkheid is om te controlleren of er een UDP poort open is buiten nmappen en/of fsockopen, dan zou ik het graag horen.

En plz geen aantwoorden van het antwoord is al gegeven, daar schiet ik weinig mee op. Ook al is het goed bedoeld.

Verwijderd

Hey GameGeek,
jij hier?!
Ik heb es wat zitten proberen, maar zou het zo ook niet meer weten...

  • PanMan
  • Registratie: November 1999
  • Laatst online: 16-09 09:15

PanMan

Spun!

nmap hoeft voor de meeste opties niet als root
code:
1
2
3
4
[panman@box ~]$ nmap localhost
Starting nmap V. 2.54BETA28 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
[KNIP] :))

Je kan dus ook met NMAP op 1 poort scannen. Maar dan weet ik eik nog niet of NMAP wel kan detecten of een UDP poort open staat. Zou aan de ene kant zeggen van wel, want NMAP kan alles :), maar aan de andere kant, UDP stuurt nou eenmaal gewoon nix terug als het ontvangen is...
Kijk ander's 's naar de docs van die server, of je die niet een simpel commando kan laten sturen.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Ok, met nmap heb ik kunnen kijken of de poort open staat, dus dat is een mogelijkheid,

nadeel, nmap staat niet op de server waar de site op wordt gehost en ik heb geen mogelijkheid om het op die server te krijgen.

Iemand nog een idee?

  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Zow ff nog een keer de thread omhoog schoppen :)


Dus als iemand nog iets weet ik houd mij aanbevolen....

Een cgi script dat het zelfde doet is ook al goed,
want ook die heb ik geen kunnen vinden.

Verwijderd

Er staat iets op zend.net voor een counter-strike server.. Er staat een link bij met info over q3, ut en hl servers

  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
Misschien heb je hier nog wat aan:
http://www.phpbuilder.com/forum/read.php3?num=2&id=119595&thread=105838

Dit laat hij zien:
http://clans.morat.net/the/fsocktest.php?ip=194.202.78.113&port=27015

Laat eff weten of het werkt (bij mij nog niet iig) :)

  • Martijn.gr
  • Registratie: December 2001
  • Laatst online: 23-05-2023
Het script dat je hebt gepost als laatste dat werkt wel met Counter Strike.

kijk hier maar: http://clans.morat.net/the/fsocktest.php?ip=194.109.69.51&port=27015

Dat is een XS4ALL Server en daar zat op dit moment wel volk op.....

nu doet hij het niet met mijn RTCW server,
de bedoeling is dat het script op een fansite voor RTCW komt te draaien...
Zodat mensen kunnen zien op welke server het gezellig is :)
Pagina: 1