Is het mogelijk om vanuit PHP een ping te doen naar een host? Ik heb wel al gevonden hoe je een shell kan starten met het ping commando en dan de results analyseren, maar ik zit eigenlijk te hopen op een makkelijker methode...
Wat heb je zelf al ondernomen??
Al in de manual gezocht onder "Network Functions" ?
[google=ping from php]
http://www.php.net/manual/en/ref.network.php
Al in de manual gezocht onder "Network Functions" ?
[google=ping from php]
http://www.php.net/manual/en/ref.network.php
[ Voor 34% gewijzigd door Sn3akz op 16-07-2003 16:53 ]
Ik had gevonden dat je via een shell kan pingen, maar dat geeft problemen qua platform-onafhankelijkheid omdat op elke versie van ping wel andere resultaten geeft.Sn3akz schreef op 16 July 2003 @ 16:52:
Wat heb je zelf al ondernomen??
Verder heb ik de 4000 pagina's dikke php manual op trefwoorden doorzocht en kon niets zinnigs vinden.
Dat dus
Wat ik doe is het volgende
code:
Dit probeert een netwerk verbinding te maken met poort 80, verder niets, werkt vrij aardig als ping 1
| $fp=fsockopen($hostname, 80, $errno, $errstr, 10); |
Hee dat is een slimme oplossing met die fsockopen(). Ik zal hem vanavond (als het hier binnen niet meer 34 graden is
) uitproberen!
Idee! Op deze manier kan ik ook andere systemen achter een router pingen door daar portmappings voor aan te maken op de router. Moet ik alleen een poortje hebben waar die machines altijd op reageren. Het gaat om Windows 2000 servers, dus die reageren allemaal netjes op poort 3389
Dank voor je creatieve oplossing!
Idee! Op deze manier kan ik ook andere systemen achter een router pingen door daar portmappings voor aan te maken op de router. Moet ik alleen een poortje hebben waar die machines altijd op reageren. Het gaat om Windows 2000 servers, dus die reageren allemaal netjes op poort 3389
Dank voor je creatieve oplossing!
misschien kan deze code helpen?
het is een pagina waarmee je kan portscannen / pingen / tracen
standaard wordt het ip van de gebruiker ingevuld...
alles gebeurt vanop de server naar de gekozen target toe.
have fun with it !
Stimpie
EDIT: even vergeten bij te zeggen: traceroute werkt enkel op linux-servers vermoed ik...
EDIT 2: beetje opgekuist, was de code vergeten om code te plaatsen
het is een pagina waarmee je kan portscannen / pingen / tracen
standaard wordt het ip van de gebruiker ingevuld...
alles gebeurt vanop de server naar de gekozen target toe.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| <? if(phpversion() >= "4.2.0"){ extract($_POST); extract($_GET); extract($_SERVER); extract($_ENV); } ?> <html> <head> <script> function m(el) { if (el.defaultValue==el.value) el.value = "" } </script> </head> <body> <h2>Network Query Tool</h2> <form method="post" action="<? echo $PHP_SELF; ?>"> <input type="radio" name="queryType" value="checkp">Check port: <input type="text" name="portNum" size="5" maxlength="5" value="80"><br> <input type="radio" name="queryType" value="p"> Ping host<br> <input type="radio" name="queryType" value="tr"> Traceroute to host<br> <input type="radio" name="queryType" value="all" checked> Do it all<br> <input type="text" name="target" value="<? echo $REMOTE_ADDR; ?>" onFocus="m(this)"> <input type="submit" name="Submit" value="Do It"> </form> <? function message($msg){ echo $msg; flush(); } function checkp($target,$portNum){ message("<p><b>Checking Port $portNum</b>...<blockquote>"); if (! $sock = fsockopen($target, $portNum, $num, $error, 5)) $msg .= "Port $portNum does not appear to be open."; else{ $msg .= "Port $portNum is open and accepting connections."; fclose($sock); } $msg .= "</blockquote></p>"; message($msg); } function p($target){ message("<p><b>Ping Results:</b><blockquote>"); if (! $msg .= trim(nl2br(`ping -c5 '$target'`))) #bugfix $msg .= "Ping failed. Host may not be active."; $msg .= "</blockquote></p>"; message($msg); } function tr($target){ message("<p><b>Traceroute Results:</b><blockquote>"); if (! $msg .= trim(nl2br(`/usr/sbin/traceroute '$target'`))) #bugfix $msg .= "Traceroute failed. Host may not be active."; $msg .= "</blockquote></p>"; message($msg); } #If the form has been posted, process the query, otherwise there's nothing to do if(!$queryType) { exit; } #Make sure the target appears valid if( (!$target) || (!preg_match("/^[\w\d\.\-]+\.[\w\d]{1,4}$/i",$target)) ){ message("Error: You did not specify a valid target host or IP."); exit; } #Figure out which tasks to perform, and do them if( ($queryType=="all") || ($queryType=="checkp") ) checkp($target,$portNum); if( ($queryType=="all") || ($queryType=="p") ) p($target); if( ($queryType=="all") || ($queryType=="tr") ) tr($target); ?> |
have fun with it !
Stimpie
EDIT: even vergeten bij te zeggen: traceroute werkt enkel op linux-servers vermoed ik...
EDIT 2: beetje opgekuist, was de code vergeten om code te plaatsen
[ Voor 60% gewijzigd door stimpie79 op 16-07-2003 18:13 . Reden: cleanup ]
op minn homepage doek t gewoon zo:
mooit tabelletje op mn site, met computernaam, en erachter dit plaatje aangeroepen met online.php?ip=192.168.0.xx
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <? $plaatje = imagecreate(10,10); $clr_rood = imagecolorallocate($plaatje,255,0,0); $clr_groen = imagecolorallocate($plaatje,0,255,0); $bla= exec("ping $ip -c 1 -q -w 1 -n",$result); if (substr($result[3],23,1)){ $bla = imagefilledrectangle($plaatje,0,0,10,10,$clr_groen); } else { $bla = imagefilledrectangle($plaatje,0,0,10,10,$clr_rood); } Header("Content-type: image/gif"); ImageGIF($plaatje); ?> |
mooit tabelletje op mn site, met computernaam, en erachter dit plaatje aangeroepen met online.php?ip=192.168.0.xx
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
Dit is ook een mooie, met plaatjes... Alleen moet ik dan zorgen dat ik de GD functies kan gebruiken. Dat moet ik nog ff uitzoeken hoe dat gaat op een Windows server, maar ga ik zeker proberen.
Verwijderd
GD-functies zitten er standaard al in. Tenminste, als je een redelijk nieuwe PHP-versie gebruikt. Gewoon in php.ini het commentaar-teken weghalen bij de gd-functie. Als ik me goed herinner kun je die vinden onder 'exclusions' ofzo.Verwijderd schreef op 16 July 2003 @ 17:58:
Dit is ook een mooie, met plaatjes... Alleen moet ik dan zorgen dat ik de GD functies kan gebruiken. Dat moet ik nog ff uitzoeken hoe dat gaat op een Windows server, maar ga ik zeker proberen.
Jawel, maar ook dit is, zoals gezegd, niet platform onafhankelijkSuper_ik schreef op 16 July 2003 @ 17:37:
op minn homepage doek t gewoon zo:
PHP:
1...
mooit tabelletje op mn site, met computernaam, en erachter dit plaatje aangeroepen met online.php?ip=192.168.0.xx
Hoewel op de meeste OS'en ping wel begrepen zal worden
Het probleem zit hem in het resultaat wat je terugkrijgt van een ping comando. Ik neem aan dat de TS het puur gaat om het aantal ms. Dit moet je dus met een regexp of explode tevoorschijn toveren. Die regexp is echter niet platform onafhankelijk.
Klopt mijn denkwijze tot zover?
Tot nu toe lijkt ut met fsock open wel te gaan.. toch?
Het gaat mij primair om in een oogopslag te kunnen zien bij welke klant er problemen zijn met het internet of waar de server down is. De tijden zijn niet zo belangrijk. Ik wil pingen naar de router om te kijken of internet nog "up" is, en met het idee van fsockopen() kan ik ook nog kijken of specifieke servers achter die router nog "up" zijn. En met php kan ik dat schriptje op m'n website knallen en desnoods vanaf m'n vakantieadres zien of er ergens problemen zijn.
Kun je niet via het ICMP protocol werken dmv een socket?
Universeler kan het niet imho
Universeler kan het niet imho
Wat? Je bedoelt dus pingen door te PINGEN?! Hoe kom je er op!Glimi schreef op 16 juli 2003 @ 21:03:
Kun je niet via het ICMP protocol werken dmv een socket?
Universeler kan het niet imho
De TS is een beetje vaag over bedoeling, maar als 'ie er meerdere servers achter een firewall mee wil bereiken, is de kans dat dit gaat werken erg klein wanneer die servers geen extern IP adres hebben. Ook willen ICMP pakketjes nog wel eens geblokkeerd worden door firewalls. Het is dus maar de vraag of het een geschikte oplossing is voor het probleem van de TS, maar in het algemeen lijkt die suggestie me gewoon de enige goede oplossing (right tool for the right job).
Pagina: 1