Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Получение информации об IP-адресе
Класс получает информацию об IP-адресе: страна, город и т.п. с сервера ip-adress.com. Можно делать не более 20 запросов с одного IP-адреса. В классе предусмотрена возможность использования прокси, чтобы обойти это ограничение.
ipinfo.class.php
/*
+--------------------------------------------------------------------------
| IpInfo
| ========================================
| by Seregwethrin
| Mail To: seregwethrin@gmail.com (send me bugs if found)
| ========================================
|
+---------------------------------------------------------------------------
|
| > Finds city, country, isp, state, organization by ip address
| > Script written by Seregwethrin
| > Revision: 1.1
| > Date: 2007-02-10
| > Date started: 2007-01-20
|
+--------------------------------------------------------------------------
|
| > This is a test script. I don't know anything about copyrights of ip-adress.com.
| > Get your permissions at ip-adress.com before using this script!
| > php_curl.dll MUST BE LOADED!
|
+--------------------------------------------------------------------------
*/
class ipinfo
{
var $remote_addr;
var $address;
var $country;
var $state;
var $city;
var $isp;
var $organization;
var $result;
function ipinfo()
{
//Save remote addr as class variable.
$this->remote_addr = $_SERVER["REMOTE_ADDR"];
if (!file_exists("ip_info_proxy.txt"))
die("Please upload ip_info_proxy.txt file and chmod it to 0777");
if (!is_writable("ip_info_proxy.txt"))
{
@chmod("ip_info_proxy.txt", 0777);
if (!is_writable("ip_info_proxy.txt"))
die("Please CHMOD ip_info_proxy.txt to 0777");
}
//Load curl extension if not loaded.
if (!extension_loaded('curl'))
{
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
if (!dl('php_curl.dll'))
die("Please read readme.txt and load curl extension");
else
if (!dl('curl.so'))
die("Please read readme.txt and load curl extension");
}
}
//Get datas between begin and end html codes.
function between($beg, $end, $str)
{
$a = explode($beg, $str, 2);
$b = explode($end, $a[1]);
return $b[0];
}
//Trim the codes between < and >, so trim html tags.
function trim_html($str)
{
return trim(preg_replace("/<([^>]+)>/", "", $str));
}
//Choose a proxy for connection
function get_proxy()
{
//Write more proxies. Each proxy gives you 20 query. 127.0.0.1:80's mean is non-proxy.
//Write as ip:port
$proxy = array ("127.0.0.1:80", "202.103.178.162:8080", "62.150.130.26:80", "195.175.37.6:8080");
$txt = file_get_contents("ip_info_proxy.txt");
$txtx = [];
//Explode (generate array) the ip_info_proxy.txt datas
foreach (explode("\n", $txt) as $k=>$v)
{
list($txtx[$k]["proxy"], $txtx[$k]["date"], $txtx[$k]["used"]) = explode("-", $v);
}
//If proxy is not used for 24 hours, reset it.
foreach ($txtx as $k=>$v)
{
if ($v["date"] != date("d.m.Y"))
{
$txtx[$k]["date"] = date("d.m.Y");
$txtx[$k]["used"] = 0;
}
}
//Choose a proxy for connection, and increase it's usage by 1.
foreach ($txtx as $k=>$v)
{
if ($v["used"] < 20)
{
$this->proxy = $v["proxy"];
$txtx[$k]["used"]++;
break;
}
}
//Generate write var for writing ip_info_proxy.txt
$write = "";
foreach ($txtx as $v)
{
if (in_array($v["proxy"], $proxy))
$write .= $v["proxy"]."-".$v["date"]."-".$v["used"]."\n";
}
foreach ($proxy as $v)
{
if(!preg_match('/'.$v.'/', $write))
$write .= $v."-".date("d.m.Y")."-0\n";
}
//Write it
$fp = fopen("ip_info_proxy.txt", "w+");
fwrite($fp, trim($write));
fclose($fp);
}
function check($ip = false, $proxy=false)
{
if ($ip == false) //If ip not given, use remote_addr (client's ip)
$ip = $this->remote_addr;
if ($proxy != false) //If proxy is given, use it.
$this->proxy = $proxy;
else //If proxy is not given, get a proxy
$this->get_proxy();
$postfields = "iq=".urlencode($ip)."&submit=".urlencode("lookup any ip");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.ip-adress.com/index.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_REFERER, "http://www.ip-adress.com");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, "60");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
if ($this->proxy && $this->proxy != "127.0.0.1:80")
{
curl_setopt($ch, CURLOPT_PROXY, $this->proxy); //Use the proxy!
//curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
}
$html = curl_exec($ch);
curl_close($ch);
if($html && $html != "1")
{
$this->address = $this->trim_html($this->between("My ip address:</font>","</font>", $html));
$this->country = $this->trim_html($this->between("IP country:</font>","</font>", $html));
$this->state = $this->trim_html($this->between("IP state:</font>","</font>", $html));
$this->city = $this->trim_html($this->between("IP city:</font>","</font>", $html));
$this->isp = $this->trim_html($this->between("isp:</font>","</font>", $html));
$this->organization = $this->trim_html($this->between("organization:</font>","</font>", $html));
$this->result = "ok"; //Success!
}
elseif ($html == "1")
$this->result = "This ip/proxy has reached limit for this day! (20 query)"; //Fail use more proxies
else
$this->result = "Can't get the page!"; //Fail :(
}
}
/*
+--------------------------------------------------------------------------
| IpInfo Proxy Checker
| ========================================
| by Seregwethrin
| Mail To: seregwethrin@gmail.com (send me bugs if found)
| ========================================
|
+---------------------------------------------------------------------------
|
| > Check proxies for ip-adress.com
| > Script written by Seregwethrin
| > Revision: 1
| > Date: 2007-02-10
| > Date started: 2007-02-10
|
+--------------------------------------------------------------------------
*/
?>
<html>
<head>
<title>Proxy Checker for IPinfo by Seregwethrin</title>
</head>
<body>
<h1 align="center">Proxy Checker for IP-Info</h1>
<h3 align="center">Will check 64.233.183.103 (Google.com) :)</h3>
<p align="center">Use this, before query 20 ips different from yours at
<a href="http://www.ip-adress.com" target="_blank">ip-adress.com</a><br>
<small>Because some transparent proxies can't hide your ip but some can.</small></p>
<form id="form1" name="form1" method="post" action="">
<table width="200" border="1" align="center" cellpadding="5">
<tr>
<td align="center">
<input name="proxy" type="text" id="proxy" size="24"
onFocus="if (this.value == 'Write Proxy Here as ip:port') this.value = '';"
onBlur="if (this.value == '') this.value = 'Write Proxy Here as ip:port';"
value="Write Proxy Here as ip:port" /></td>
</tr>
<tr>
<td align="center"><input name="submit" type="submit" id="submit" value="Check" /></td>
</tr>
</table>
</form>
<?php
if (@$_GET["submit"])
{
include("ipinfo.class.php");
$ipinfo = new ipinfo;
$ipinfo->check("64.233.183.103", $_GET["proxy"]);
if ($ipinfo->result == "ok")
echo '<center><img src="http://img157.imageshack.us/img157/1179/afftickwd7.gif" border="0" />
this proxy is usefull.</center>';
else
echo '<center><img src="http://img157.imageshack.us/img157/9692/affcrossul4.gif" border="0" />
Sorry but there\'s an error with this proxy.<br>
<small><i>Error is:'.$ipinfo->result.'</i></small></center>';
echo "<center><br><br>IP Address:".$ipinfo->address;
echo "<br>Country:".$ipinfo->country;
echo "<br>State:".$ipinfo->state;
echo "<br>City:".$ipinfo->city;
echo "<br>ISP:".$ipinfo->isp;
echo "<br>Organization:".$ipinfo->organization;
echo "<br>Result:".$ipinfo->result;
echo "<br><b>Proxy:</b>".$_GET["proxy"]."</center>";
}
?>
</body>
</html>
Для работы нужно подготовить файл ip_info_proxy.txt со списком Proxy серверов
.
Прокомментировать/Отблагодарить