Newsgroup: it.comp.www.php
Titolo: Da dove vengono i visitatori?

Problema:
ho un form dove il visitatore deve indicare in quale nazione 
vive scegliendo da un campo SELECT.
Problema piu' grosso:
i visitatori hanno il cervello rinsecchito e credono che
Zurigo sia in provincia di Chieti, oppure vogliono fare i
figaccioni e far credere che vivono a Tonga (come quelli
che ad agosto vanno in auto con tutti i finestrini chiusi
per far credere che hanno il condizionatore...).
Soluzione:
far capire al visitatore che e' inutile che faccia il furbo,
tanto lo sappiamo benissimo da dove arriva!
<?
$Nazioni = array(
"it"=>"Italia",
"fr"=>"Francia",
"de"=>"Germania",
# ecc.
);
$NazDefault = "it";
$DNG = array( #domini non geografici
"com", "net", "org", "edu",
"gov", "mil", "info", "biz",
# ecc.
);
$host = gethostbyaddr($REMOTE_ADDR);
$provider = preg_replace ("/.*\.(.*)\.(.*)/", "$1.$2", $host);
list ($tmp, $nazione) = explode(".", $provider);
echo "Stai usando il provider $provider ($host)
if (!in_array($nazione, $DNG)) {
    echo ", quindi dovresti vivere in ";
    echo $Nazioni[$nazione];
    }
echo "<br>\n\n";
echo "<form>\n"; # mancano ACTION e METHOD
echo "<SELECT>";
foreach ($Nazioni as $key=>$value) {
    echo "<OPTION";
    if ($key==$nazione) echo " SELECTED";
    if ( (in_array($nazione, $DNG)) &&
         ($codice==$NazDefault) ) 
	 echo " SELECTED";
    echo " VALUE=\"$key\">$value\n";
}
echo "</SELECT>\n";
echo "</form>\n";
?>
Provate il tutto on-line su
http://www.comune.dianosanpietro.im.it/cal2003/
(e fatelo provare ai vostri amici all'estero, se non avete
voglia di chiamare al telefono un provider in Nuova Guinea
per vedere cosa succede cambiando nazione).
In ogni caso, ogni volta che viene compilato il form
mi arriva un messaggio con nazione indicata e host
risolto: se qualcuno prova a fare il furbo riaggiusto
il database con PhpMyAdmin...
Ciao
-- 
Marco Bernardini - bernama chiocciola libero it
E' bello volare alti e liberi come un'aquila,
ma nessuna talpa e' mai finita nei motori di un jet.

Si... sembra ok... ma non sempre l'ip risolve in un domain name

 tanto lo sappiamo benissimo da dove arriva!
Beh.. ma uno che vuole nascondere la provenienza usa come minimo un proxy.
Non che sia anonimo cosě.. ma un po' ti complica la vita.
Ah.. se vuoi eliminarli... quello dal  Tennessee  ed il brasiliano sono io..
:)

 Si... sembra ok... ma non sempre l'ip risolve in un domain name
In tal caso:
$socket=fsockopen('
whois.ripe.net
',43,$errno,$errstr,15);
if ($socket) {
    fputs($socket,"$REMOTE_ADDR\n");
    $risposta=fread($socket,10240);
    fclose($socket);
}
Il problema è elaborare $risposta per trovare il dominio del provider...
-- 
Lorenzo

 :)
 
Beh, ce li lascio: sono abbastanza attendibili, visto che il traceroute
mi rimanda laggiu' e posso mostrare al sindaco le mappine di qualche
traceroute grafico cosi' e' contento...
Diciamo che il "target" dello script e' il navigatore medio ed ormai,
come sappiamo, la media e' scesa molto in basso :-(
Piuttosto, fammi poi sapere cosa ti diceva la pagina arrivando dal
Brasile: ho visto che gethostaddr() non ha risolto il numerico.
ciao
-- 
Marco Bernardini - bernama chiocciola libero it
Per farvi strada nella vita non approfittate mai delle cariche che
vi sono state assegnate, a meno che non siate un minatore.

 Il problema è elaborare $risposta per trovare il dominio del provider...
 
E non tutti ci sono sul whiois del ripe (Reseaux IP Europeens):
l'indirizzo brasiliano da cui ha chiamato Icaro - 200.162.45.185 - viene
risolto (via Web) con inetnum: 0.0.0.0 - 255.255.255.255, alla faccia del
risultato ristretto...
http://swhois.net
 almeno rimanda al lacnic (Latin American and Caribbean
IP address Regional Registry) che rimanda a 
whois.nic.br
 che dice:
inetnum: 
200.162.45.128/26
entidade: Konecta Telecomunicações Ltda.
Penso che scriptare tutti i salti sia quasi impossibile.
Una volta esisteva 
www.ipindex.net
, un database con tutti gli IP
assegnati (una pacchia per le ricerche off-line!), ma adesso sembra sia
sparito; c'e' comunque un mirror in spagna:
http://blues.eurovia.es/mirrors/www.ipindex.net/
ciao!
-- 
Marco Bernardini - bernama chiocciola libero it
Per farvi strada nella vita non approfittate mai delle cariche che
