PDA

Bekijk Volledige Versie : Foreach loopt niet door?



Nielsvk
30/05/07, 21:33
Hi,

Heeft iemand enig idee hoe ik met dit script:


function checkserver($server){
$ports = array('21','80','53');
foreach ($ports as $nummers => $portsn) {
$sock = @fsockopen($server,$portsn,$errno,$errstr,1);
if ($sock){
return "true";
} else {
return "ERROR: Can't connect to port ".$portsn." (101)";
}
}
}

Een doorlopende loop te maken? (ik zat zelf te denken aan while, maar ik heb ook niet zoveel kennis op deze gebieden, meer in SQL etc.) Het probleem is dat de loop niet door loopt, ik krijg alleen de error van: "Can't connect to port: 21 (101)" maar ik hoor ook 80 en 53 te krijgen (dus 3 error's) en het ip-adres draait deze poorten niet dus daar kan het ook niet aan liggen.. Iemand enig idee?

Alvast bedankt, Niels. :W:

Ramon Fincken
30/05/07, 21:37
Heb je alle benodigde variabelen van je fsockopen wel gedefinieerd?
Staat je server dit commando wel toe?

nielsrenselaar
30/05/07, 21:49
Je kan maar 1 value returnen. Aangezien je functie 3 keer doorlopen wordt, wordt er 3 keer een waarde gereturnt, alleen de laatste zie je daadwerkelijk. Dit kan je aanpassen door de return in echo te veranderen. Of als je het wel in zijn return state wil gebruiken, zoiets van maken:


function checkserver($server){
$ports = array('21','80','53');
$msg = false;

foreach ($ports as $nummers => $portsn) {
$sock = @fsockopen($server,$portsn,$errno,$errstr,1);

if (!$sock){
$msg .= "ERROR: Can't connect to port ".$portsn." (101)<br/>";
}

}
return ($msg) ? $msg : "Alles lijkt okee!";
}

Succes er mee!

ju5t
30/05/07, 21:52
Je kunt het beter zo doen:


function checkserver($server){
$ports = array('21','80','53');
foreach ($ports as $nummers => $portsn) {
$sock = @fsockopen($server,$portsn,$errno,$errstr,1);
if ($sock){
$result[$portsn] = true;
} else {
$result[$portsn] = false;
}
}
return $result;
}

$result = checkserver("127.0.0.1");

foreach($result as $key => $val)
{
if($val)
{
echo "Connection to port: ".$key." successfull";
}
else
{
echo "Connection to port: ".$key." failed.";
}
}

Nielsvk
30/05/07, 22:13
Heb je alle benodigde variabelen van je fsockopen wel gedefinieerd?
Staat je server dit commando wel toe?

Ja, als je een beetje scripter ben had je het ook wel kunnen weten, en als je leest zie je dat ik zeg dat ik wel iets terug krijg ;)

@nielsrenselaar: Bedankt, zal ik zeker gebruik van maken! :) (Naam genoot (headbang))

@getUP: Ik gebruik toch liever die van nielsrenselaar, toch bedankt!

Ramon Fincken
30/05/07, 22:34
Overheengelezen, de return is het m, voor de liefhebbers heb ik hier nog een scriptje liggen:


<html>

<head>

<title>Port Checker</title>

<style type="text/css">

body {

margin: 0px;
font-family: Verdana;
font-size: 8pt;
color: #000000;

}

</style>

</head>

</head>
<body>
<?php

$ip = "123.123.123.123"; // Ik gebruik geen REMOTE_ADDR want dan klopt de scanner niet meer doe dit dus ook niet
$port = array("80","21","22","8443","444","2222","2525", "25"); // Vul hier te poorten in die je wil scanner
// Van alle zaken hier onder blijf je af

$online_ports = 0;

echo "<table cellspacing=\"0\" cellpadding=\"5\" width=\"100%\">";
echo "<tr><td width=\"70%\">IP + Poort</td>";
echo "<td width=\"30%\" align=\"center\">Status</td></tr>";
echo "<tr><td height=\"1\" bgcolor=\"#808080\"></td><td height=\"1\" bgcolor=\"#808080\"></td></tr>";

for($i=0; $i<count($port); $i++) {

$achtergrond = ($i%2 == 0)?"#F6F6F6":"********";

$fp = @fsockopen($ip, $port[$i], $errno, $errstr, 1);

if(!$fp){

$status = "<font color=\"#FF0000\">offline</font>";

} else{

$status = "<font color=\"#008800\">online</font>";
$online_ports = $online_ports + 1;

}

echo "<tr><td bgcolor=\"" . $achtergrond . "\">" . $ip . ":" . $port[$i] . "</td>";
echo "<td bgcolor=\"" . $achtergrond . "\" align=\"center\">" . $status . "</td></tr>";

}

echo "</table>";

$offline_ports = count($port) - $online_ports;

echo "<table cellspacing=\"0\" cellpadding=\"5\" width=\"100%\">";
echo "<tr><td height=\"1\" bgcolor=\"#808080\"></td></tr>";
echo "<tr><td>Statistieken</td></tr>";
echo "<tr><td height=\"1\" bgcolor=\"#808080\"></td></tr>";
echo "<tr><td bgcolor=\"#F6F6F6\">";

echo "<table width=\"300\">";
echo "<tr><td>Aantal gescande poorten </td><td>" . count($port) . "</td></tr>";
echo "<tr><td>Aantal <font color=\"#008800\">Online</font> poorten</font></td><td>" . $online_ports . "</td></tr>";
echo "<tr><td>Aantal <font color=\"#FF0000\">Offline</font> poorten</td><td>" . $offline_ports . "</td></tr>";
echo "</table>";

echo "</td></tr>";
echo "<tr><td height=\"1\" bgcolor=\"#808080\"></td></tr>";
echo "</table>";

?>

</body>
</html>

Nielsvk
31/05/07, 07:41
Ik ben met een monitoring script bezig, geen echte port checker.. :) Toch bedankt voor je reacties.

mind
31/05/07, 11:18
in dat geval moet je dit draadje eens lezen: http://www.webhostingtalk.nl/scripting-techniek-beveiliging/97257-het-grote-noc-script-support-topic.html