gethostbyname()

Avrei la necessità di scrivere su un file.dat il nome del provider che l'utente utilizza per collegarsi ad una pagina in php;

Non so se questa funzione faccia proprio al caso mio ma, le ho provate tutte...so che ogni provider ha un determinato range di ip così, come posso fare in modo che se l'ip inizi per 83 miscriva sul file.dat vodafone, se 83 infostrada e via dicendo....

P.S. ho provato a fare una ricerca per sapere più precisamente i range assegnati ai provider ma nulla da fare, altrimenti avrei potuto creare qualcosa di + affidabuile tipo se range è tra 81 e 83 allora...bla bla;

Spero possiate aiutarmi, grazie!

inviato 11 anni fa
yusizu
X 0 X

l'indirizzo IP lo ricavi dalla variabile $_SERVER['REMOTE_ADDR']. La funzione che hai citato non serve nel tuo caso.

Comunque non sarà semplice dall'IP capire il provider. So che il progetto php-stats (http://www.php-stats.com/) fa qualcosa del genere, grazie ad un database di corrispondenze IP->provider che hanno realizzato.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Grazie del link, l'ho appena visitato ma ora ho più dubbi di prima:

ho scaricato il db dalla sezione download solo per spulciare ma,

Secondo voi questo è un Ip (mha!) 104045772810404577590

poi cmq a quanto ho capito si appoggiano sempre al whois (non ricordo l'url)

e allora mi chiedo, non posso passare anchio una query al whois partendo dall'ip generato con la funzione $_server[remoteaddr]??

...ma non dovrei chieder l'autorizzazione al sito??

Spero possiate aiutarmi, a presto!;-)

risposto 11 anni fa
yusizu
X 0 X

 :dunno: non so che dirti,

potresti provare a scrivere sul forum di php-stats anche se credo che gli sviluppatori non siano al momento disponibili.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

guarda quì:

<?php
echo long2ip(1040457728);
echo("\n");
echo long2ip(1040457759);
?>

magari questo può spiegare l'utilizzo di quel DB.

Le funzioni ip2long e long2ip potrebbero fare al caso tuo per l'interpretazione di quel file.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

tagiamo la testa al toro!(poraccio!)

ho pensato che magari con un pò di aiuto O0 potrei realizzare qualcosa del tipo:

if ("$_server['remoteaddr] inizia per/*non saprei come scriverlo*/ 80")

{

echo ("tin.it");

}

elseif ($_server['remoteaddr] inizia per/*non saprei come scriverlo*/ 83)

{

echo ("Vodafone.it");

}

echo("$_server['remoteaddr]")

?>

So che non è un granchè dal punto di vista dell'affidabilità(x non parlare del codice!)ma potrebbe funzionare?

risposto 11 anni fa
yusizu
X 0 X

guarda quì:

<?php
echo long2ip(1040457728);
echo("\n");
echo long2ip(1040457759);
?>

magari questo può spiegare l'utilizzo di quel DB.

Le funzioni ip2long e long2ip potrebbero fare al caso tuo per l'interpretazione di quel file.

 :bye:

non saprei da dover iniziare :'(

risposto 11 anni fa
yusizu
X 0 X

un indirizzo IP può essere espresso anche come un numero interno (long). Il PHP metta a disposizione 2 funzioni per convertire un IP in un numero intero (ip2long) e viceversa (long2ip). Ho notato che se dividi in 2 numeri il numero che sta all'inizio di ogni riga di quel file e poi li converti con logn2ip ottieni proprio 2 indirizzi IP. Potrebbero essere i limiti del range di IP appartenenti ad un provider.

Se vuoi semplicemente prendere le prime 2 cifre dell'IP ti basta la funzione substr

if (substr($_server['remoteaddr'],0,2) == '80')

{

 ...

}

elseif(substr($_server['remoteaddr'],0,2) == '83')

...

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
un indirizzo IP può essere espresso anche come un numero interno (long). Il PHP metta a disposizione 2 funzioni per convertire un IP in un numero intero (ip2long) e viceversa (long2ip). Ho notato che se dividi in 2 numeri il numero che sta all'inizio di ogni riga di quel file e poi li converti con logn2ip ottieni proprio 2 indirizzi IP. Potrebbero essere i limiti del range di IP appartenenti ad un provider.

sei stato fin troppo chiaro solo che mi complicherei la vita (se ho tempo mi ci metto cmq)

x quanto riguarda:Se vuoi semplicemente prendere le prime 2 cifre dell'IP ti basta la funzione substr

if (substr($_server['remoteaddr'],0,2) == '80')

{

 ...

}

elseif(substr($_server['remoteaddr'],0,2) == '83')

...

io ho il problema di dover scrivere le variabili sun file.dat,

allora dovrei prima convertire la variabile $_server['remoteaddr']e poi scrivere sul file

solamente il risultato(vodafone, tim..);

Come faccio creo una nuova variabile con il risultato e poi la mando in scrittura?

ti posto il codice che utilizzo:

<?
$addr = $_SERVER['REMOTE_ADDR'];
$provider1 = "Vodafone";
$provider2 = "libero";

if (substr($_SERVER['REMOTE_ADDR'],0,2) == '151')
{
$stat = "$provider2\n";
$a = fopen("stat.dat", "a+");
fputs($a, $stat);
fclose($a);
}
elseif(substr($_SERVER['REMOTE_ADDR'],0,2) == '83')
{
$stat = "$provider1\n";
$a = fopen("stat.dat", "a+");
fputs($a, $stat);
fclose($a);
}
else 
{ 
$stat = "$addr\n";
$a = fopen("stat.dat", "a+");
fputs($a, $stat);
fclose($a);
}

?>

purtroppo però mi stampa l'ip 151.xx.x.xx invece di libero.

Ho sbagliato qualcosa?

risposto 11 anni fa
yusizu
modificato 11 anni fa
X 0 X

a me sembra corretto  ???  :dunno:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
['remoteaddr'],0,2)

A me non convince qello 0 e quel 2, forse perchè non ne conosco il significato;

Certo è che qualche problema cè di sicuro altrimenti.......... ???

risposto 11 anni fa
yusizu
X 0 X

Infatti l'errore è proprio li inquanto:

($_SERVER['REMOTE_ADDR'],0,2)

mi restituisce solo i primi 2 numeri dell'ip che nel mio caso(151) sono 3

 :)...ma devo specificarlo x forza di quanto numeri deve essere composta la parte iniziale dell'IP??...altrimenti mi si complica la vita!!! ???

poi ripensandoci e devo dire che è proprio unrange,:<?php

echo long2ip(1040457728);

echo("\n");

echo <?php

echo long2ip(1040457728);

echo("\n");

echo long2ip(1040457759);

?>

come faccio  a scrivere if ($_SERVER['REMOTE_ADDR} compreso tra long2ip(1040457728))

{

...

}

????tnks!

risposto 11 anni fa
yusizu
modificato 11 anni fa
X 0 X

prova con qualcosa del genere (non testato!!!)

<?php
error_reporting(E_ALL);
$ip = sprintf("%u",ip2long('62.77.33.16'));

echo $ip;

$handle = fopen('it.db','rb');

while (!feof($handle)) {
   $buffer = fgets($handle);
   $start= (int)substr($buffer,0,10);
   $end= (int)substr($buffer,10,10);
   if($ip >= $start && $ip <= $end)
      echo substr($buffer,20);
}


?>

 :bye:

P.S.: vado in ferie!!!  8)

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda