Citire ip dintr-o banda

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Citire ip dintr-o banda

Mesajde mfwsro » Lun Dec 14, 2009 1:13 pm

Salut,am o problema...nu am reusit sa integrez intr-un serviciu posibilitatea de a citii ip-ul unei firme.
Exemplu: Rcs Rds are o banda incepind cu 188.24.0.0 si terminand cu 188.27.255.255.
Ip-ul meu este 188.25.218.123 si vrea sa fac in asa fel incit sa imi citeasca ip-ul meu...din banda de mai sus..fara obisnuitul $_SERVER['REMOTE_ADDR'];
Am incercat ceva dar cred ca este nula:

Cod: Selectaţi tot

function network($ip)
{
$ro = array("188.24.0.0", "188.27.255.255", "Rds");
$result = $ro;
}

Nu stiu daca exprimarea a fost pe masura,dar sper ca cineva sa imi dea o idee unde am gresit sau care e codul corect pt citirea ip-ului din banda respectiva



Avatar utilizator
Niku02
Senior Member
Mesaje: 837
Membru din: Joi Noi 13, 2008 1:16 pm
Localitate: Constanta
Contact:

Mesajde Niku02 » Lun Dec 14, 2009 1:20 pm

Pai si cum ai vrea tu ca pagina sa stie ce ip ai tu ? Eu nu prea am inteles.
Lucrez la o firma de web design si am un magazin de airsoft .

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Lun Dec 14, 2009 1:24 pm

pai functia ta nu face nimic

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Lun Dec 14, 2009 1:48 pm

Simplu,in pagina am implementat asta....

Cod: Selectaţi tot

$ip = $SERVER['REMOTE_ADDR']
$info = network($ip);
$data = explode("_", htmlspecialchars($info));
$name = $data[0];
echo "Name: ".$name."\n"; // imi citeste firma (Rds) dupa ip-ul respectiv

Cei de > aici < au inteles dar nu m-au ajutat exact cum imi doream.[/url]

Avatar utilizator
alexcpp
Average Member
Mesaje: 180
Membru din: Mar Dec 30, 2008 7:11 pm

Mesajde alexcpp » Lun Dec 14, 2009 2:30 pm

Tu vrei sa vezi daca un ip este de la firma rds ?
Pai atunci de ce te complici?

Cod: Selectaţi tot

<?php
function network($ip) {
    $ro = array("188.24.0.0", "188.27.255.255", "Rds");
    if (strcmp($ip, $ro[0]) >= 0 && strcmp($ip, $ro[1]) <= 0)
        return $ro;
    return 0;
}

$ip = $_SERVER['REMOTE_ADDR'];
$info = network($ip);
$name = $info[2];
echo "Name: ".$name."\n"; // imi citeste firma (Rds) dupa ip-ul respectiv
?>

Incearca asa
Ultima oară modificat Lun Dec 14, 2009 2:41 pm de către alexcpp, modificat de 2 ori în total.

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Lun Dec 14, 2009 2:37 pm

ti-au spus si ei acelasi lucru ca si mine.Functia ta nu face nimic.
Spune mai explicit ce doresti sa faci si te ajutam

MarPlo
Senior Member
Mesaje: 885
Membru din: Mie Sep 24, 2008 9:32 am
Localitate: Braila
Contact:

Mesajde MarPlo » Lun Dec 14, 2009 2:44 pm

Din ce am inteles, adica numele firmei in functie de ip, dupa o clasa de ip-uri pe care o stii la general, incearca si dezvola urmatorul exemplu:

Cod: Selectaţi tot

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ip_ex = explode('.', $ip);
$nume = 'RDS';
if ($ip_ex[0]==188 && $ip_ex[1]>=24 && $ip_ex[1]<=27) echo 'IP-ul este de la '.$nume;
else echo 'IP-ul e de la alta firma';
?>

Avatar utilizator
alexcpp
Average Member
Mesaje: 180
Membru din: Mar Dec 30, 2008 7:11 pm

Mesajde alexcpp » Lun Dec 14, 2009 2:48 pm

MarPlo scrie:Din ce am inteles, adica numele firmei in functie de ip, dupa o clasa de ip-uri pe care o stii la general, incearca si dezvola urmatorul exemplu:

Cod: Selectaţi tot

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ip_ex = explode('.', $ip);
$nume = 'RDS';
if ($ip_ex[0]==188 && $ip_ex[1]>=24 && $ip_ex[1]<=27) echo 'IP-ul este de la '.$nume;
else echo 'IP-ul e de la alta firma';
?>

Ce rost are sa imparti sirul in subsiruri cand ai operatii pe siruri

Cod: Selectaţi tot

<?php
function network($ip) {
    $ro = array("188.24.0.0", "188.27.255.255", "Rds");
    if (strcmp($ip, $ro[0]) >= 0 && strcmp($ip, $ro[1]) <= 0)
        return $ro;
    return 0;
}

$ip = $_SERVER['REMOTE_ADDR'];
$info = network($ip);
$name = $info[2];
echo "Name: ".$name."\n"; // imi citeste firma (Rds) dupa ip-ul respectiv
?>

compari ip-ul tau cu cele doua extremitati si returnezi vectorul ala daca ip-ul e bun daca nu o valoarea nula.

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Lun Dec 14, 2009 2:56 pm

MarPlo scrie:Din ce am inteles, adica numele firmei in functie de ip, dupa o clasa de ip-uri pe care o stii la general, incearca si dezvola urmatorul exemplu:

Cod: Selectaţi tot

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ip_ex = explode('.', $ip);
$nume = 'RDS';
if ($ip_ex[0]==188 && $ip_ex[1]>=24 && $ip_ex[1]<=27) echo 'IP-ul este de la '.$nume;
else echo 'IP-ul e de la alta firma';
?>

MarPlo ms si tie si celorlalti vad ca sa inteles problema dar sa procedez asa pt fiecare ip in parte sau cum?Astea apartin Romaniei, firma am o sa o adaug eu nu-i problema...

[editat de vectorialpx]
nu ai voie sa publici IP-uri - e ca si cum eu as scrie aici numarul tau de telefon

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Lun Dec 14, 2009 2:59 pm

faci un array si folosesti funtia in_array pentru a testa daca ip -ul este valid, daca ai lista cu ip-urile pe care le vrei

Avatar utilizator
alexcpp
Average Member
Mesaje: 180
Membru din: Mar Dec 30, 2008 7:11 pm

Mesajde alexcpp » Lun Dec 14, 2009 3:00 pm

Ai putea sa le pui intr-un fisier si sa incarci doua cate doua si sa compari sau intr-o baza de date.
Daca te plictisesti si nu ai ce faci baga-le pe toate intr-un array;
$ro = array(
0 => array($ip1, $ip2),
1 => array($ip1, $ip2), etc
);

Avatar utilizator
alexcpp
Average Member
Mesaje: 180
Membru din: Mar Dec 30, 2008 7:11 pm

Mesajde alexcpp » Lun Dec 14, 2009 3:02 pm

foreverlost scrie:faci un array si folosesti funtia in_array pentru a testa daca ip -ul este valid, daca ai lista cu ip-urile pe care le vrei

Alea is extremitatile. Adica de unde incepe un ip si unde se termina pentru o anumita firma. in_array() cauta daca ip-ul exista, dar daca ip-ul este intre doua extremitati nu o sa ii intoarca nimic.

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Lun Dec 14, 2009 11:14 pm

In primul rand pentru ca ai multe ip-uri faci o baza de date cu un tabel numit ipuri cu 3 campuri: firma, start, stop.
Introduci apoi ip-urile in tabel, la firma pui numele firmei, la start pui ip-ul de inceput si la stop ip-ul de sfarsit.
Apoi incearca scriptul de mai jos, la mine a mers, sper ca si tie o sa iti mearga.

Cod: Selectaţi tot

<?php
//conectare la baza de date (poate trebuie modificat user, pass, etc.)
$connect=mysql_connect("localhost","root","")or die("Eroare de conectare!");
mysql_select_db("nume_baza_date")or die("Eroare baza de date!");

$my_ip=$_SERVER["REMOTE_ADDR"]; //aici poti pune direct un ip ca sa faci teste, de exemplu "188.24.0.0" care ai zis ca e pentru RDS

$sel=mysql_query("SELECT * FROM `ipuri`");
$firma="";
while($r=mysql_fetch_array($sel))
   {
      if(ip2long($my_ip)>=ip2long($r["start"]) && ip2long($my_ip)<=ip2long($r["stop"]))
         {
            $firma=$r["firma"];
            break;   
         }
   }   
if($firma!=""){echo "Ip-ul este de la firma ".$firma;}else{echo "Ip-ul nu este de la nicio firma din baza de date!";}

mysql_close($connect);
?>

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Mar Dec 15, 2009 8:52 am

Cod: Selectaţi tot

/**
 * Use mode
 *
 * - trebuie decat sa pui functie si ii pui ca parametru ip-ul primit si returnezi ce ai tu nevoie
 * - faci un string din lista ta de ip-uri de genul clasaStart1-clasaEnd1,  clasaStart2-clasaEnd2 etc.
 * Sunt cam ocupat ca o finalizam eu.
 * Poti sa testezi si sa imi spui cum merge
 *
 *
 *
 */

$stringIp   = 'string ip-uri separate prin virgula';
$ip         = 'ip-ul pe care il primesti';

$stringIp   = '217.156.0.0-217.156.127.255, 45.6.4.6.4'; // de test
$ip         = '217.156.5.50';// de test
$arrParts   = explode( '.', $ip );
if ( is_array( $arrParts ) && count( $arrParts ) == 4 )
{
   $findFirst = strpos( $stringIp, (string)$arrParts[ 0 ] );
   if ( $findFirst !== false )
   {
         $findLocation = strpos( $stringIp, ',', $findFirst ); // final ip class
         $stringClasa  = substr( $stringIp, $findFirst, $findLocation );
         $stringClasa  = trim( $stringClasa );
         $arrIp         = explode( '-', $stringClasa );
         if ( is_array( $arrIp ) && count( $arrIp ) == 2 )
         {
               $startRange = explode( '.', $arrIp[ 0 ] );
               $endRange   = explode( '.', $arrIp[ 1 ] );
               if ( is_array( $startRange ) && is_array( $endRange ) && count( $startRange ) == 4 && count( $endRange ) == 4 )
               {
                  if ( testRange( $startRange, $endRange, $arrParts  ) )
                  {
                     echo 'ip corect';
                  }
               }
               else
               {
                  // wrong range defined
               }
         }
         else
         {
            // no ip range or bad defined
         }
   }
   else
   {
      // invalid first group
   }

}
else
{
   // invalid ip
}
function testRange( $first, $last, $needle )
{
   $return = false;
   for ( $i = 0; $i < 4; $i++ )
   {
      if ( $needle >= $first && $needle <= $last )
      {
         $return = true;
      }
      else
      {
         $return = false;
         $i = 10;
      }
   }
   return $return;
}


nu prea am avut timp iar la prima testare a parut sa mearga.

Bafta!
Ultima oară modificat Mie Dec 16, 2009 8:36 am de către foreverlost, modificat de 2 ori în total.

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Mar Dec 15, 2009 8:54 am

alexcpp scrie:
foreverlost scrie:faci un array si folosesti funtia in_array pentru a testa daca ip -ul este valid, daca ai lista cu ip-urile pe care le vrei

Alea is extremitatile. Adica de unde incepe un ip si unde se termina pentru o anumita firma. in_array() cauta daca ip-ul exista, dar daca ip-ul este intre doua extremitati nu o sa ii intoarca nimic.



Mersi pentru atentionare, my mistake eram cam obosit :D


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 42 vizitatori