#IpInfo Tool: Codice sorgente Php

Come promesso, rilascio il codice sorgente della mia pagina: IpInfo

First Of All, diamo a Cesare quel che è di Cesare, e quindi iniziamo a dire come otteniamo i dati…

Prima di tutto, è doveroso dire che tutto parte da: http://ipinfo.io/

Questo sito offre uno splendido servizio, gratis entro determinati limiti, ma non per le pagine https (come la mia) ecc…

Allora com’è che io ce l’ho?

No, tranquilli, non ho pagato e non sto pubblicando uno script che chiede pagamenti!

In realtà, in quella pagina, elenca alcuni metodi per ricavare i dati, ma è solo andando nella pagina “developers”: http://ipinfo.io/developers che scopro l’url “json: http://ipinfo.io/8.8.8.8/json

Output (ps: 8.8.8.8 è google dns, usato semplicemente come esempio):

{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3845,-122.0881",
  "org": "AS15169 Google Inc.",
  "postal": "94040"
}

da qui a pensare: beh, ma allora catturo la pagina con file_get_contents ed è fatta!

e infatti è così:

echo file_get_contents("http://ipinfo.io/8.8.8.8/json");

// output:
{ "ip": "8.8.8.8", "hostname": "google-public-dns-a.google.com", "city": "Mountain View", "region": "California", "country": "US", "loc": "37.3845,-122.0881", "org": "AS15169 Google Inc.", "postal": "94040" }

Quindi abbiamo un url che ci ritorna dei dati in formato json di qualunque ip semplicemente definendolo nell’url stesso (se non definiamo l’ip ci ritorna i dati del nostro stesso ip, = in questo caso i dati del nostro server dato che è il server a chiederli tramite file_get_contents)!!! facile realizzare il tutto con un po’ di sano php 😛

Dopo varie prove, modifiche, test, ottimizzazioni, indentazione, varie ecc… Questo il codice da me creato, con tanto di ottimizzazione per ipb nei commenti:

<?php

/*
Author: Salvatore Noschese > https://www.laltroweb.it/
Source and Support: https://www.laltroweb.it/homepage/ipinfo-tool-codice-sorgente-php-r185/
*/
$ip = isset($_POST['ip']) && !empty($_POST['ip']) ? htmlspecialchars($_POST['ip']) : $_SERVER['REMOTE_ADDR'];	
$file_get_contents = file_get_contents("http://ipinfo.io/".$ip."/json");
$json_decode = json_decode($file_get_contents, true);

echo "
<form method='post'>
	<label for='ip'>IP Address:</label>
	<input type='text' name='ip' id='ip' value='".(isset($_POST['ip']) && !empty($_POST['ip']) ? $ip : '')."' placeholder='eg: 8.8.8.8' autofocus title='only standard ip address here' pattern='((^|\.)((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]?\d))){4}$' required>
	<!--
	IPB Users can use this:
	<button type='submit' style='height: 35px'>
		<i class='fa fa-search'></i>
	</button>
	Otherwise classic Submit:
	-->
	<input type='submit' value='Go'>
</form>";
if(isset($json_decode["bogon"]))
{
echo "<p class='ipsType_richText'>This is a <a href='https://en.wikipedia.org/wiki/Bogon_filtering' title='Bogon filtering' target='_blank'>bogon</a> or a private IP address that should not appear on the Internet.</p>";
}
elseif(isset($json_decode["loc"]))
{
echo "
<p>
<!--
IPB Users can use this:
  <img class='ipsResponsive_hidePhone' src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=500x375'>
  <img class='ipsResponsive_hideDesktop ipsResponsive_hideTablet' src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=300x225'>
Otherwise set size:
-->
<img src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=500x375'>
</p>";
}
echo "
<code>\n";

foreach($json_decode as $key => $value)
{
	$key = isset($_POST['ip']) && !empty($_POST['ip']) ? str_replace("ip", "RequestIp", $key) : str_replace("ip", "YourIp", $key);
	echo "\t<p>".ucwords($key) . ": " . $value."</p>\n";
}

echo "</code>";
	
?>

file_get_contents c’è ancora, ma adesso lavora di default sull’ip del visitatore, e poi – tramite form – sull’ip richiesto (e il form direi che è ben protetto grazie al pattern che accetta solo un formato ip valido, e, giusto per ulteriore sicurezza, è comunque filtrato da htmlspecialchars). Quindi stampo un output quanto più pulito possibile, e – in certi aspetti – persino migliore dell’originale! Il sito originale, infatti, mostra la mappa – con un punto indefinito in mare – anche per gli ip “bogon“. Io, invece, la mostro solo se esistono coordinate valide e quindi se l’ip è valido! inoltre differenzio “ip” con YourIp/RequestIp, e sistemo le maiuscole anziché lasciare tutto minuscolo.

Insomma, queste poche righe di codice, che poi partono da un semplice file_get_contents e ancor prima da un semplice url, vi permetteranno di ottenere questo identico risultato (soprattutto se siete utenti ipb – diversamente cambierà leggermente il campo input):

https://www.laltroweb.it/tools/ipinfo/

 

È tutto, spero sia di vostro gradimento!

Per dubbi, difficoltà, problemi, bug, varie ed eventuali, non esitate a chiedere (sul forum se pensate si tratti di una discussione lunga – così vi seguirò meglio, o anche qui nei commenti – anche da visitatori) 😉

Se lo usate nel vostro sito, gradirei almeno un feedback o, meglio ancora, un backlink a questo articolo, o all’homepage… Insomma, qualcosa!

Ma non fate quelli che lo installano e lo spaccian per roba loro, perché non è gentile 😕

 




Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.