Avatar billede martinbk Nybegynder
04. august 2003 - 12:00 Der er 13 kommentarer og
2 løsninger

gethostbyaddr loop

hejsa jeg har følgende kode

<form method="post">
<input type=text name="range">
<input type="submit" name="submit" value="submit">
</form>
<?
if ($_POST['submit']) {
$range = $_POST['range'];
$ip = explode("-", $range);
}
?>

meningen er nu at jeg vil have mit script til at kører gethostbyaddr() funktionen på samtlige indtastede ip'er kunne f.eks. være 195.24.54.1-195.24.54.240
så skal jeg have fat i et loop der kører hver eneste igennem, problemmet ligger jo blot i man også kan indtaste 195.24.54.1-195.24.60.240 hvordan laver jeg et sådan loop

Mvh Martin
Avatar billede tipsen Nybegynder
04. august 2003 - 12:18 #1
Det var jo meget sødt - jeg startede med følgende oplæg og det fungerer selvfølglig ikke - prøv selv:

$iprange = '195.24.54.1-195.24.60.240';
list($ip1, $ip2) = explode('-', $iprange);
$ipstart = explode('.', $ip1);
$ipslut = explode('.', $ip2);
for ($i=$ipstart[0];$i <= $ipslut[0]; $i++) {
    for ($j=$ipstart[1];$j <= $ipslut[1]; $j++) {
        for ($k=$ipstart[2];$k <= $ipslut[2]; $k++) {
            for ($l=$ipstart[3]; $l <= $ipslut[3]; $l++) {
                echo "$i.$j.$k.$l<br>";
            }
        }
    }
}
Avatar billede tipsen Nybegynder
04. august 2003 - 12:25 #2
Jeg ved ikke om det kan betale sig at omskrive ovenstående så det fungerer eller prøve en helt anden ide, men om ikke andet vil jeg da foreslå dig at genoverveje brugen af gethostbyaddr(), der så vidt jeg husker er en temmelig tung funktion - hvis den pludselig skal kaldes flere 100 gange er det vist temmelig hårdt for serveren.
Avatar billede andy Nybegynder
04. august 2003 - 12:26 #3
Lige en bemærkning:
Du kommer til at stresse din DNS unødigt meget, for ikke at tale om at du nok vil modtage timeouts flere af dine forspørgelser....
Avatar billede andy Nybegynder
04. august 2003 - 12:27 #4
tipsen er igen hurtigere........ lol
Avatar billede martinbk Nybegynder
04. august 2003 - 12:30 #5
tipsen min server er en P4 2Ghz som faktisk ikke laver en dyt... kører lidt mailserver.. så den overlever nok, men jeg kan umiddelbart ikke se andre mugligheder til at lave reverse DNS på en ip range (uden at skulle gøre det manuelt) hvilket jeg ikke rigtig har lyst til
Avatar billede martinbk Nybegynder
04. august 2003 - 12:33 #6
og andy, hvorfor unødig meget?...
Avatar billede sostack Nybegynder
04. august 2003 - 14:03 #7
LAd være med at gøre som jeg, og checke om den også kan tage '127.24.54.1-128.28.56.240' !! Tro mig, det kan den, men det tager laaaaaang tid ;-}

$iprange = '127.24.54.1-127.28.56.240';
list($ip1, $ip2) = explode('-', $iprange);
$ipstart = explode('.', $ip1);
$ipslut = explode('.', $ip2);
$gemmes0 = $ipslut[0];
$gemmes1 = $ipslut[1];
$gemmes2 = $ipslut[2];
$gemmes3 = $ipslut[3];
for ($i=$ipstart[0];$i <= $ipslut[0]; $i++) {
if($ipslut[0] > $i)
{
    $ipslut[1] = 255;
} else {
    $ipslut[1] = $gemmes1;
}
    for ($j=$ipstart[1];$j <= $ipslut[1]; $j++) {
    if($ipslut[1] > $j)
    {
    $ipslut[2] = 255;
    } else {
    $ipslut[2] = $gemmes2;
    }   
        for ($k=$ipstart[2];$k <= $ipslut[2]; $k++) {
    if($ipslut[2] > $k)
    {
        $ipslut[3] = 255;
    } else {
        $ipslut[3] = $gemmes3;
   
    }
            for ($l=$ipstart[3]; $l <= $ipslut[3]; $l++) {
                echo "$i.$j.$k.$l<br>";
            }
        }
    }
}

//sostack
Avatar billede erikjacobsen Ekspert
04. august 2003 - 14:13 #8
<?

$s1='195.24.54.1';
$s2='195.24.60.240';

$i1=ip2long($s1);
$i2=ip2long($s2);

for ($i=$i1;$i<=$i2;$i++) {
  $s=long2ip($i);
  print "$s er ".gethostbyaddr($s)."<br>\n";
}

?>
Avatar billede sostack Nybegynder
04. august 2003 - 14:17 #9
Det gælder om at kende alle funktionerne i PHP (og andre sprog), det gør livet meget nemmere ;-}

//sostack
Avatar billede tipsen Nybegynder
04. august 2003 - 14:24 #10
Tjahh - det er en af de dér oplevelser, hvor første tanke er "Hvorfor tænkte jeg ikke på det?" :-) Nice, Erik!
Avatar billede erikjacobsen Ekspert
04. august 2003 - 14:30 #11
Jah, der er lidt bøvl med positive og negative tal, så man skal ikke passere
128.0.0.0 i det interval man checker. Men ellers er det vistnok ok.
Avatar billede sostack Nybegynder
04. august 2003 - 15:04 #12
Så skulle problemet med 128.0.0.0 være løst:
<?php
$s1='127.255.255.250';
$s2='128.0.0.5';
$i1=decbin(ip2long($s1));
$i2=decbin(ip2long($s2));

WHILE(bindec($i1) <= bindec($i2)) {
  print $i1 . " er " . long2ip(bindec($i1)) . "<br>\n";//  . " er ".gethostbyaddr(long2ip(bindec($i1))).
  $i1 = bindec($i1);
  $i1++;
  $i1 = decbin($i1);
}

?>

//sostack
Avatar billede martinbk Nybegynder
04. august 2003 - 17:45 #13
sostack smid et svar, deler points mellem dig og erik, han gav jo grund idé'en i løsningen :)
Avatar billede erikjacobsen Ekspert
04. august 2003 - 19:39 #14
Det er nu også så meget at gøre ud af det. Hvis man lige checker at
det første nummer er mindre end det andet kan man blot: $i1=ip2long($s1);
$i2=ip2long($s2)+1;
for ($i=$i1;(int)$i<>(int)$i2;$i++) {
  $s=long2ip($i);
  print "$s er $i  ".gethostbyaddr($s)."<br>\n";
}
Avatar billede sostack Nybegynder
05. august 2003 - 05:55 #15
Ja, han er lidt for hård til PHP, ham Erik.

//sostack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester