[PHP] Pingen naar een host?

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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...

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
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

[ Voor 34% gewijzigd door Sn3akz op 16-07-2003 16:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sn3akz schreef op 16 July 2003 @ 16:52:
Wat heb je zelf al ondernomen??
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.

Verder heb ik de 4000 pagina's dikke php manual op trefwoorden doorzocht en kon niets zinnigs vinden.

Dat dus :)

Acties:
  • 0 Henk 'm!

  • ekoopman
  • Registratie: April 2003
  • Laatst online: 13-09 16:08
Wat ik doe is het volgende
code:
1
$fp=fsockopen($hostname, 80, $errno, $errstr, 10);
Dit probeert een netwerk verbinding te maken met poort 80, verder niets, werkt vrij aardig als ping :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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!

Acties:
  • 0 Henk 'm!

  • stimpie79
  • Registratie: Juni 2003
  • Laatst online: 18-09 16:28
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.


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 ]


Acties:
  • 0 Henk 'm!

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 23:27

Super_ik

haklust!

op minn homepage doek t gewoon zo:
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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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.

Acties:
  • 0 Henk 'm!

Verwijderd

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.
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.

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Super_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
Jawel, maar ook dit is, zoals gezegd, niet platform onafhankelijk

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? :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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.

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Kun je niet via het ICMP protocol werken dmv een socket?
Universeler kan het niet imho :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Glimi schreef op 16 juli 2003 @ 21:03:
Kun je niet via het ICMP protocol werken dmv een socket?
Universeler kan het niet imho :)
Wat? Je bedoelt dus pingen door te PINGEN?! Hoe kom je er op! :P

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