mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 13:38:32 +01:00
MDL-12796 iplookup rewrite
This commit is contained in:
parent
25c3f91a52
commit
7c09710cbf
@ -13,13 +13,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
|
||||
$options[0] = get_string('choose') .'...';
|
||||
$temp->add(new admin_setting_configselect('country', get_string('country', 'admin'), get_string('configcountry', 'admin'), 0, $options));
|
||||
|
||||
$iplookups = array();
|
||||
if ($plugins = get_list_of_plugins('iplookup')) {
|
||||
foreach ($plugins as $plugin) {
|
||||
$iplookups[$plugin] = $plugin;
|
||||
}
|
||||
}
|
||||
$temp->add(new admin_setting_configselect('iplookup', get_string('iplookup', 'admin'), get_string('configiplookup', 'admin'), 'hostip', $iplookups));
|
||||
$temp->add(new admin_setting_heading('iplookup', get_string('iplookup', 'admin'), get_string('iplookupinfo', 'admin')));
|
||||
$temp->add(new admin_setting_configfile('geoipfile', get_string('geoipfile', 'admin'), get_string('configgeoipfile', 'admin', $CFG->dataroot.'/geoip/'), $CFG->dataroot.'/geoip/GeoLiteCity.dat'));
|
||||
$temp->add(new admin_setting_configtext('googlemapkey', get_string('googlemapkey', 'admin'), get_string('configgooglemapkey', 'admin', $CFG->wwwroot), ''));
|
||||
|
||||
$ADMIN->add('location', $temp);
|
||||
|
||||
|
@ -530,14 +530,14 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
|
||||
echo "<td class=\"cell c1\" align=\"right\">".userdate($log->time, '%a').
|
||||
' '.userdate($log->time, $strftimedatetime)."</td>\n";
|
||||
echo "<td class=\"cell c2\">\n";
|
||||
link_to_popup_window("/iplookup/index.php?ip=$log->ip&user=$log->userid", 'iplookup',$log->ip, 400, 700);
|
||||
link_to_popup_window("/iplookup/index.php?ip=$log->ip&user=$log->userid", 'iplookup',$log->ip, 440, 700);
|
||||
echo "</td>\n";
|
||||
$fullname = fullname($log, has_capability('moodle/site:viewfullnames', get_context_instance(CONTEXT_COURSE, $course->id)));
|
||||
echo "<td class=\"cell c3\">\n";
|
||||
echo " <a href=\"$CFG->wwwroot/user/view.php?id={$log->userid}&course={$log->course}\">$fullname</a>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td class=\"cell c4\">\n";
|
||||
link_to_popup_window( make_log_url($log->module,$log->url), 'fromloglive',"$log->module $log->action", 400, 600);
|
||||
link_to_popup_window( make_log_url($log->module,$log->url), 'fromloglive',"$log->module $log->action", 440, 700);
|
||||
echo "</td>\n";;
|
||||
echo "<td class=\"cell c5\">{$log->info}</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
@ -1,18 +1,25 @@
|
||||
iplookup
|
||||
--------
|
||||
iplookup info
|
||||
-------------
|
||||
|
||||
These plugins will show you something about an IP address.
|
||||
1/ old plugins are not supported anymore
|
||||
|
||||
Moodle scripts call the index.php in this directory like this:
|
||||
|
||||
/iplookup/index.php?ip=222.222.222.222&user=1
|
||||
2/ general information in admin settings "Site Administration/Location/Location settings"
|
||||
|
||||
Both parameters are optional, they default to the current user.
|
||||
3/ technical info:
|
||||
|
||||
index.php loads the lib.php from a specified subdirectory
|
||||
to actually display some sort of map or description.
|
||||
xplanet commadline
|
||||
xplanet -projection rectangular -latitude 0.00 -longitude 0.00 -num_times 1 -geometry 620x310 -output earth.jpeg -quality 90 -config config.txt
|
||||
|
||||
The current plugin is selected using $CFG->iplookup.
|
||||
config.txt
|
||||
[earth]
|
||||
shade=100
|
||||
|
||||
Cheers,
|
||||
Martin
|
||||
original Earth map from:
|
||||
http://www.radcyberzine.com/xglobe/
|
||||
|
||||
marker.gif
|
||||
custom made in Inkscape
|
||||
|
||||
Petr Skoda (skodak), January 2008
|
||||
|
||||
$Id$
|
BIN
iplookup/earth.jpeg
Normal file
BIN
iplookup/earth.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
@ -1,22 +0,0 @@
|
||||
<?php // $Id$
|
||||
// Lookup a user using HostIP
|
||||
|
||||
function iplookup_display($ip, $user=0) {
|
||||
|
||||
print_header();
|
||||
if ($user) {
|
||||
if ($user = get_record('user', 'id', $user)) {
|
||||
print_heading(fullname($user).", $user->city, $user->country", 'center', '4');
|
||||
}
|
||||
}
|
||||
|
||||
echo 'Search results: <iframe src="http://www.hostip.info/api/get.html?ip='.$ip.'" height="60" width="300"></iframe>';
|
||||
|
||||
echo '<object data="http://www.hostip.info/map/frame.html?ip='.$ip.'" '.
|
||||
'type="text/html" border="0" width="610" height="330"></object>';
|
||||
|
||||
close_window_button();
|
||||
print_footer('none');
|
||||
}
|
||||
|
||||
?>
|
@ -1,19 +1,177 @@
|
||||
<?php // $Id$
|
||||
// Do an IP lookup of a user, using selected plugin
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.org //
|
||||
// //
|
||||
// Copyright (C) 2008 onwards Petr Skoda (skodak) //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
require('../config.php');
|
||||
require('../config.php');
|
||||
require_once($CFG->libdir.'/filelib.php');
|
||||
require_once($CFG->libdir.'/geoip/geoipcity.inc');
|
||||
|
||||
require_login();
|
||||
require_login();
|
||||
|
||||
$ip = optional_param('ip', getremoteaddr());
|
||||
$user = optional_param('user', $USER->id);
|
||||
$ip = optional_param('ip', getremoteaddr(), PARAM_HOST);
|
||||
$user = optional_param('user', $USER->id, PARAM_INT);
|
||||
|
||||
if (empty($CFG->iplookup)) {
|
||||
set_config('iplookup', 'hostip');
|
||||
if (isset($CFG->iplookup)) {
|
||||
//clean up of old settings
|
||||
set_config('iplookup', NULL);
|
||||
}
|
||||
|
||||
$info = array($ip);
|
||||
$note = array();
|
||||
|
||||
if (!preg_match('/(^\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/', $ip, $match)) {
|
||||
print_error('invalidipformat', 'error');
|
||||
}
|
||||
|
||||
if ($match[1] > 255 or $match[2] > 255 or $match[3] > 255 or $match[4] > 255) {
|
||||
print_error('invalidipformat', 'error');
|
||||
}
|
||||
|
||||
if ($match[1] == '127' or $match[1] == '10' or ($match[1] == '172' and $match[2] >= '16' and $match[2] <= '31') or ($match[1] == '192' and $match[2] == '168')) {
|
||||
print_error('iplookupprivate', 'error');
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
if ($user = get_record('user', 'id', $user, 'deleted', 0)) {
|
||||
$info[] = fullname($user);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($CFG->geoipfile) and file_exists($CFG->geoipfile)) {
|
||||
$gi = geoip_open($CFG->geoipfile, GEOIP_STANDARD);
|
||||
$location = geoip_record_by_addr($gi, $ip);
|
||||
geoip_close($gi);
|
||||
|
||||
if (empty($location)) {
|
||||
print_error('iplookupfailed', 'error', '', $ip);
|
||||
}
|
||||
if (!empty($location->city)) {
|
||||
$info[] = $location->city;
|
||||
}
|
||||
|
||||
require("$CFG->dirroot/iplookup/$CFG->iplookup/lib.php");
|
||||
if (!empty($location->country_code)) {
|
||||
$countries = get_list_of_countries();
|
||||
if (isset($countries[$location->country_code])) {
|
||||
// prefer our localized country names
|
||||
$info[] = $countries[$location->country_code];
|
||||
} else {
|
||||
$info[] = $location->country_name;
|
||||
}
|
||||
}
|
||||
$longitude = $location->longitude;
|
||||
$latitude = $location->latitude;
|
||||
$note[] = get_string('iplookupmaxmindnote', 'admin');
|
||||
|
||||
iplookup_display($ip, $user);
|
||||
} else {
|
||||
$ipdata = download_file_content('http://netgeo.caida.org/perl/netgeo.cgi?target='.$ip);
|
||||
if ($ipdata === false) {
|
||||
error('Can not connect to NetGeo server at http://netgeo.caida.org, please check proxy settings or better install MaxMind GeoLite City data file.');
|
||||
}
|
||||
$matches = null;
|
||||
if (!preg_match('/LAT:\s*(-?\d+\.\d+)/s', $ipdata, $matches)) {
|
||||
print_error('iplookupfailed', 'error', '', $ip);
|
||||
}
|
||||
$latitude = (float)$matches[1];
|
||||
if (!preg_match('/LONG:\s*(-?\d+\.\d+)/s', $ipdata, $matches)) {
|
||||
print_error('iplookupfailed', 'error', '', $ip);
|
||||
}
|
||||
$longitude = (float)$matches[1];
|
||||
|
||||
if (preg_match('/CITY:\s*([^<]*)/', $ipdata, $matches)) {
|
||||
if (!empty($matches[1])) {
|
||||
$info[] = s($matches[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (preg_match('/COUNTRY:\s*([^<]*)/', $ipdata, $matches)) {
|
||||
if (!empty($matches[1])) {
|
||||
$countrycode = $matches[1];
|
||||
$countries = get_list_of_countries();
|
||||
if (isset($countries[$countrycode])) {
|
||||
// prefer our localized country names
|
||||
$info[] = $countries[$countrycode];
|
||||
} else {
|
||||
$info[] = $countrycode;
|
||||
}
|
||||
}
|
||||
}
|
||||
$note[] = get_string('iplookupnetgeonote', 'admin');
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (empty($CFG->googlemapkey)) {
|
||||
$info = implode(' - ', $info);
|
||||
$note = implode('<br />', $note);
|
||||
|
||||
$imgwidth = 620;
|
||||
$imgheight = 310;
|
||||
$dotwidth = 18;
|
||||
$dotheight = 30;
|
||||
|
||||
$dx = round((($longitude + 180) * ($imgwidth / 360)) - $imgwidth - $dotwidth/2);
|
||||
$dy = round((($latitude + 90) * ($imgheight / 180)));
|
||||
|
||||
print_header(get_string('iplookup', 'admin').': '.$info, $info);
|
||||
|
||||
echo '<div id="map" style="width:'.($imgwidth+$dotwidth).'px; height:'.$imgheight.'px;">';
|
||||
echo '<img src="earth.jpeg" style="width:'.$imgwidth.'px; height:'.$imgheight.'px" alt="" />';
|
||||
echo '<img src="marker.gif" style="width:'.$dotwidth.'px; height:'.$dotheight.'px; margin-left:'.$dx.'px; margin-bottom:'.$dy.'px;" alt="" />';
|
||||
echo '</div>';
|
||||
echo '<div id="note">'.$note.'</div>';
|
||||
print_footer('empty');
|
||||
|
||||
} else {
|
||||
$info = implode(' - ', $info);
|
||||
$note = implode('<br />', $note);
|
||||
|
||||
$meta = '
|
||||
<script src="http://maps.google.com/maps?file=api&v=2&key='.$CFG->googlemapkey.'" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
//<![CDATA[
|
||||
|
||||
function load() {
|
||||
if (GBrowserIsCompatible()) {
|
||||
var map = new GMap2(document.getElementById("map"));
|
||||
map.addControl(new GSmallMapControl());
|
||||
map.addControl(new GMapTypeControl());
|
||||
var point = new GLatLng('.$latitude.', '.$longitude.');
|
||||
map.setCenter(point, 4);
|
||||
map.addOverlay(new GMarker(point));
|
||||
map.setMapType(G_HYBRID_MAP);
|
||||
}
|
||||
}
|
||||
|
||||
//]]>
|
||||
</script>
|
||||
';
|
||||
|
||||
print_header(get_string('iplookup', 'admin').': '.$info, $info, '', '', $meta, false, ' ', '', false, 'onload="load()" onunload="GUnload()"');
|
||||
|
||||
echo '<div id="map" style="width: 650px; height: 360px"></div>';
|
||||
echo '<div id="note">'.$note.'</div>';
|
||||
print_footer('empty');
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -1,340 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
@ -1,7 +0,0 @@
|
||||
To make this program fit into Moodle, I:
|
||||
|
||||
- deleted the black and white earth image
|
||||
- modified plotconf.inc slightly to use Moodle configs
|
||||
- modified plot.php slightly to use Moodle's background colour
|
||||
|
||||
Martin Dougiamas, 26/8/2002
|
@ -1,60 +0,0 @@
|
||||
IP-Atlas version 1.0
|
||||
-=----=-
|
||||
|
||||
Description
|
||||
-----------
|
||||
This script uses NetGeo to plot a host on the globe.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
PHP 4 and GD (Optional).
|
||||
|
||||
The GD library is available at http://www.boutell.com/gd/ and PHP is at
|
||||
http://www.php.net/
|
||||
|
||||
Installation
|
||||
------------
|
||||
Put these files somewhere on your webserver, and point your browser to plot.php
|
||||
|
||||
Note: You can symlink "ln -s plot.php index.php" if you need to. If you
|
||||
have any problems running it, send an email to ivan@xpenguin.com
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
All options can be edited in plotconf.inc.
|
||||
|
||||
If you want to integrate IP-Atlas into your website, open up plot.php and
|
||||
ip-atlas_prefs.php and edit the parts where it starts writing the html
|
||||
(find for "<html>") and where it ends (</html>). You should replace theses
|
||||
with your site template headers/footers.
|
||||
|
||||
You can create a new language file for IP-Atlas if you follow the directions
|
||||
inside any language file in the languages/ directory.
|
||||
|
||||
If you create a new language file, please email it to ivan@xpenguin.com so
|
||||
it can be included in the next version.
|
||||
|
||||
Bugs
|
||||
----
|
||||
1. The famous windows bug (also happens in other cirumstances)
|
||||
|
||||
If nothing appears when running the script on windows, open up plotconf.inc
|
||||
and change the $trygd variable to "0".
|
||||
|
||||
Contributions
|
||||
-------------
|
||||
Thanks to Sten Kalenda (sten@ipjam.com) for adding security features and
|
||||
cleaning up the code.
|
||||
|
||||
Thanks to Armin Kunaschik (Armin.Kunaschik@varetis.de) for his proxy patch
|
||||
that enables this program to run behind a firewall.
|
||||
|
||||
Thanks to Daniel Quinlan (daniel@chaosengine.net) for a patch that fixes
|
||||
many problems on windows.
|
||||
|
||||
Also thanks to many users for reporting bugs.
|
||||
|
||||
Copyright
|
||||
---------
|
||||
IP-Atlas is Copyright (c) 2002 Ivan Kozik, and can be redistributed under
|
||||
the GPL.
|
@ -1,4 +0,0 @@
|
||||
The database for this is REALLY old now and this service is
|
||||
next to useless.
|
||||
|
||||
Included here for backward compatibility.
|
@ -1,243 +0,0 @@
|
||||
AD Andorra
|
||||
AE United Arab Emirates
|
||||
AF Afghanistan
|
||||
AG Antigua and Barbuda
|
||||
AI Anguilla
|
||||
AL Albania
|
||||
AM Armenia
|
||||
AN Netherlands Antilles
|
||||
AO Angola
|
||||
AQ Antarctica
|
||||
AR Argentina
|
||||
AS American Samoa
|
||||
AT Austria
|
||||
AU Australia
|
||||
AW Aruba
|
||||
AZ Azerbaijan
|
||||
BA Bosnia and Herzegovina
|
||||
BB Barbados
|
||||
BD Bangladesh
|
||||
BE Belgium
|
||||
BF Burkina Faso
|
||||
BG Bulgaria
|
||||
BH Bahrain
|
||||
BI Burundi
|
||||
BJ Benin
|
||||
BM Bermuda
|
||||
BN Brunei Darussalam
|
||||
BO Bolivia
|
||||
BR Brazil
|
||||
BS Bahamas
|
||||
BT Bhutan
|
||||
BV Bouvet Island
|
||||
BW Botswana
|
||||
BY Belarus
|
||||
BZ Belize
|
||||
CA Canada
|
||||
CC Cocos (Keeling) Islands
|
||||
CF Central African Republic
|
||||
CG Congo
|
||||
CH Switzerland
|
||||
CI Cote D'Ivoire (Ivory Coast)
|
||||
CK Cook Islands
|
||||
CL Chile
|
||||
CM Cameroon
|
||||
CN China
|
||||
CO Colombia
|
||||
CR Costa Rica
|
||||
CS Czechoslovakia (former)
|
||||
CU Cuba
|
||||
CV Cape Verde
|
||||
CX Christmas Island
|
||||
CY Cyprus
|
||||
CZ Czech Republic
|
||||
DE Germany
|
||||
DJ Djibouti
|
||||
DK Denmark
|
||||
DM Dominica
|
||||
DO Dominican Republic
|
||||
DZ Algeria
|
||||
EC Ecuador
|
||||
EE Estonia
|
||||
EG Egypt
|
||||
EH Western Sahara
|
||||
ER Eritrea
|
||||
ES Spain
|
||||
ET Ethiopia
|
||||
FI Finland
|
||||
FJ Fiji
|
||||
FK Falkland Islands (Malvinas)
|
||||
FM Micronesia
|
||||
FO Faroe Islands
|
||||
FR France
|
||||
FX France, Metropolitan
|
||||
GA Gabon
|
||||
GB Great Britain (UK)
|
||||
GD Grenada
|
||||
GE Georgia
|
||||
GF French Guiana
|
||||
GH Ghana
|
||||
GI Gibraltar
|
||||
GL Greenland
|
||||
GM Gambia
|
||||
GN Guinea
|
||||
GP Guadeloupe
|
||||
GQ Equatorial Guinea
|
||||
GR Greece
|
||||
GS S. Georgia and S. Sandwich Isls.
|
||||
GT Guatemala
|
||||
GU Guam
|
||||
GW Guinea-Bissau
|
||||
GY Guyana
|
||||
HK Hong Kong
|
||||
HM Heard and McDonald Islands
|
||||
HN Honduras
|
||||
HR Croatia (Hrvatska)
|
||||
HT Haiti
|
||||
HU Hungary
|
||||
ID Indonesia
|
||||
IE Ireland
|
||||
IL Israel
|
||||
IN India
|
||||
IO British Indian Ocean Territory
|
||||
IQ Iraq
|
||||
IR Iran
|
||||
IS Iceland
|
||||
IT Italy
|
||||
JM Jamaica
|
||||
JO Jordan
|
||||
JP Japan
|
||||
KE Kenya
|
||||
KG Kyrgyzstan
|
||||
KH Cambodia
|
||||
KI Kiribati
|
||||
KM Comoros
|
||||
KN Saint Kitts and Nevis
|
||||
KP Korea (North)
|
||||
KR Korea (South)
|
||||
KW Kuwait
|
||||
KY Cayman Islands
|
||||
KZ Kazakhstan
|
||||
LA Laos
|
||||
LB Lebanon
|
||||
LC Saint Lucia
|
||||
LI Liechtenstein
|
||||
LK Sri Lanka
|
||||
LR Liberia
|
||||
LS Lesotho
|
||||
LT Lithuania
|
||||
LU Luxembourg
|
||||
LV Latvia
|
||||
LY Libya
|
||||
MA Morocco
|
||||
MC Monaco
|
||||
MD Moldova
|
||||
MG Madagascar
|
||||
MH Marshall Islands
|
||||
MK Macedonia
|
||||
ML Mali
|
||||
MM Myanmar
|
||||
MN Mongolia
|
||||
MO Macau
|
||||
MP Northern Mariana Islands
|
||||
MQ Martinique
|
||||
MR Mauritania
|
||||
MS Montserrat
|
||||
MT Malta
|
||||
MU Mauritius
|
||||
MV Maldives
|
||||
MW Malawi
|
||||
MX Mexico
|
||||
MY Malaysia
|
||||
MZ Mozambique
|
||||
NA Namibia
|
||||
NC New Caledonia
|
||||
NE Niger
|
||||
NF Norfolk Island
|
||||
NG Nigeria
|
||||
NI Nicaragua
|
||||
NL Netherlands
|
||||
NO Norway
|
||||
NP Nepal
|
||||
NR Nauru
|
||||
NT Neutral Zone
|
||||
NU Niue
|
||||
NZ New Zealand (Aotearoa)
|
||||
OM Oman
|
||||
PA Panama
|
||||
PE Peru
|
||||
PF French Polynesia
|
||||
PG Papua New Guinea
|
||||
PH Philippines
|
||||
PK Pakistan
|
||||
PL Poland
|
||||
PM St. Pierre and Miquelon
|
||||
PN Pitcairn
|
||||
PR Puerto Rico
|
||||
PT Portugal
|
||||
PW Palau
|
||||
PY Paraguay
|
||||
QA Qatar
|
||||
RE Reunion
|
||||
RO Romania
|
||||
RU Russian Federation
|
||||
RW Rwanda
|
||||
SA Saudi Arabia
|
||||
Sb Solomon Islands
|
||||
SC Seychelles
|
||||
SD Sudan
|
||||
SE Sweden
|
||||
SG Singapore
|
||||
SH St. Helena
|
||||
SI Slovenia
|
||||
SJ Svalbard and Jan Mayen Islands
|
||||
SK Slovak Republic
|
||||
SL Sierra Leone
|
||||
SM San Marino
|
||||
SN Senegal
|
||||
SO Somalia
|
||||
SR Suriname
|
||||
ST Sao Tome and Principe
|
||||
SU USSR (former)
|
||||
SV El Salvador
|
||||
SY Syria
|
||||
SZ Swaziland
|
||||
TC Turks and Caicos Islands
|
||||
TD Chad
|
||||
TF French Southern Territories
|
||||
TG Togo
|
||||
TH Thailand
|
||||
TJ Tajikistan
|
||||
TK Tokelau
|
||||
TM Turkmenistan
|
||||
TN Tunisia
|
||||
TO Tonga
|
||||
TP East Timor
|
||||
TR Turkey
|
||||
TT Trinidad and Tobago
|
||||
TV Tuvalu
|
||||
TW Taiwan
|
||||
TZ Tanzania
|
||||
UA Ukraine
|
||||
UG Uganda
|
||||
UK United Kingdom
|
||||
UM US Minor Outlying Islands
|
||||
US United States
|
||||
UY Uruguay
|
||||
UZ Uzbekistan
|
||||
VA Vatican City State (Holy See)
|
||||
VC Saint Vincent and the Grenadines
|
||||
VE Venezuela
|
||||
VG Virgin Islands (British)
|
||||
VI Virgin Islands (U.S.)
|
||||
VN Viet Nam
|
||||
VU Vanuatu
|
||||
WF Wallis and Futuna Islands
|
||||
WS Samoa
|
||||
YE Yemen
|
||||
YT Mayotte
|
||||
YU Yugoslavia
|
||||
ZA South Africa
|
||||
ZM Zambia
|
||||
ZR Zaire
|
||||
ZW Zimbabwe
|
Binary file not shown.
Before Width: | Height: | Size: 42 KiB |
@ -1,4 +0,0 @@
|
||||
<img src="hr.gif" width="100%" height="2" vspace="2">
|
||||
<table align="right" width="100%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr><td align="right" width="100%"><a href="http://www.xpenguin.com/ip-atlas.php">IP-Atlas</a> <?php echo $version; ?></td></tr>
|
||||
</table>
|
Binary file not shown.
Before Width: | Height: | Size: 35 B |
@ -1,5 +0,0 @@
|
||||
A:link { font-weight: bold; text-decoration: none; color: #005177; }
|
||||
A:visited { text-decoration: none; color: #005177; font-weight: bold; }
|
||||
A:hover { text-decoration: underline; }
|
||||
BODY { font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12px; }
|
||||
TD { font-family: Verdana, Helvetica, Arial, sans-serif; color: #000000; font-size: 12px; }
|
@ -1,246 +0,0 @@
|
||||
<?php
|
||||
|
||||
include("plotconf.inc");
|
||||
include("plot.inc");
|
||||
|
||||
if (isset($HTTP_GET_VARS["lastquery"])){
|
||||
$HTTP_GET_VARS["lastquery"] = clean_param($HTTP_GET_VARS["lastquery"], PARAM_HOST);
|
||||
}
|
||||
|
||||
?>
|
||||
<?php
|
||||
|
||||
if(shouldrun($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
|
||||
$drawmode = "GD";
|
||||
} else {
|
||||
$drawmode = "CSS";
|
||||
}
|
||||
|
||||
if(isset($HTTP_POST_VARS["button"])) {
|
||||
|
||||
// cleanup post data
|
||||
$HTTP_POST_VARS["shape"] = clean_param($HTTP_POST_VARS["shape"], PARAM_ALPHA);
|
||||
$HTTP_POST_VARS["color"] = clean_param($HTTP_POST_VARS["color"], PARAM_ALPHA);
|
||||
$HTTP_POST_VARS["color"] = clean_param($HTTP_POST_VARS["size"], PARAM_INT);
|
||||
$HTTP_POST_VARS["earthimage"] = clean_param($HTTP_POST_VARS["earthimage"], PARAM_FILE);
|
||||
$HTTP_POST_VARS["cssdot"] = clean_param($HTTP_POST_VARS["cssdot"], PARAM_FILE);
|
||||
$HTTP_POST_VARS["seldrawmode"] = clean_param($HTTP_POST_VARS["seldrawmode"],PARAM_ALPHA);
|
||||
// unset the earth image if we don't have it in our list
|
||||
if (!in_array($HTTP_POST_VARS["earthimage"],$earthimages)) {
|
||||
unset($HTTP_POST_VARS["earthimage"]);
|
||||
}
|
||||
|
||||
|
||||
// save data from the POST
|
||||
setcookie ("atlasprefs", "", time() - 36000000);
|
||||
setcookie ("atlasprefs", "$HTTP_POST_VARS[shape]:$HTTP_POST_VARS[color]:$HTTP_POST_VARS[size]:$HTTP_POST_VARS[earthimage]:$HTTP_POST_VARS[cssdot]:$HTTP_POST_VARS[seldrawmode]", time() + 36000000, $cookiepath);
|
||||
|
||||
$setshape = $HTTP_POST_VARS["shape"];
|
||||
$setcolor = $HTTP_POST_VARS["color"];
|
||||
$setsize = $HTTP_POST_VARS["size"];
|
||||
$setearthimage = $HTTP_POST_VARS["earthimage"];
|
||||
$setcssdot = $HTTP_POST_VARS["cssdot"];
|
||||
$setseldrawmode = $HTTP_POST_VARS["seldrawmode"];
|
||||
|
||||
|
||||
|
||||
if($setseldrawmode == "1") {
|
||||
$drawmode = "GD";
|
||||
} else {
|
||||
$drawmode = "CSS";
|
||||
}
|
||||
|
||||
} elseif(isset($HTTP_COOKIE_VARS["atlasprefs"]) && validcookie($HTTP_COOKIE_VARS["atlasprefs"])) {
|
||||
// get data from the cookie
|
||||
@list($setshape, $setcolor, $setsize, $setearthimage, $setcssdot, $setseldrawmode) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]);
|
||||
} else {
|
||||
$setshape = "Diamond";
|
||||
$setsize = "3";
|
||||
$setcolor = "red";
|
||||
$setearthimage = $earthimages[$defaultimage];
|
||||
$setcssdot = "reddot.gif";
|
||||
|
||||
if(shouldrun($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
|
||||
$setseldrawmode = 1;
|
||||
} else {
|
||||
$setseldrawmode = 0;
|
||||
}
|
||||
|
||||
// override old cookie if there is post data
|
||||
|
||||
if(isset($HTTP_POST_VARS["seldrawmode"])) {
|
||||
$setsetdrawmode = $HTTP_POST_VARS["seldrawmode"];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<?php # START HTML
|
||||
?>
|
||||
|
||||
<html><head><title><?php echo t("IP-Atlas Preferences") ?></title>
|
||||
|
||||
<!-- your head tags here -->
|
||||
<link rel="Stylesheet" href="ip-atlas.css">
|
||||
</head><body bgcolor="#ffffff">
|
||||
|
||||
</head><body>
|
||||
|
||||
<b><?php echo t("IP-Atlas preferences"); ?></b> <?php echo t("(cookie based)"); ?><br /><br />
|
||||
|
||||
<?php
|
||||
if(isset($HTTP_POST_VARS["button"])) {
|
||||
print t("Your settings have been saved. You can now try"); ?> <a href="plot.php<?php if(isset($HTTP_GET_VARS["lastquery"])) { echo "?address=$HTTP_GET_VARS[lastquery]"; } ?>"><?php print t("plotting something.")."</a>"."<br /><br />";
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<form action="ip-atlas_prefs.php<?php if(isset($HTTP_GET_VARS["lastquery"])) { echo "?lastquery=$HTTP_GET_VARS[lastquery]"; } ?>" method="POST">
|
||||
|
||||
<?php if(istheregd()) {
|
||||
echo t("Draw mode (defaults guessed for your browser):");
|
||||
|
||||
print "<br /><select name=\"seldrawmode\">";
|
||||
|
||||
if(!isset($setseldrawmode)) {
|
||||
if(shouldrun($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
|
||||
$setseldrawmode = 1;
|
||||
} else {
|
||||
$setseldrawmode = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if($setseldrawmode == "1") {
|
||||
echo "<option value=\"1\" selected>GD";
|
||||
echo "<option value=\"0\">CSS";
|
||||
} elseif($setseldrawmode == "0") {
|
||||
echo "<option value=\"1\">GD";
|
||||
echo "<option value=\"0\" selected>CSS";
|
||||
}
|
||||
|
||||
print "</select><br /><br />";
|
||||
|
||||
} else {
|
||||
|
||||
print "<input type=\"hidden\" name=\"seldrawmode\" value=\"0\" />";
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<?php echo t("Pointer Preferences (the dot that marks lat/lon):"); ?><br />
|
||||
<?php
|
||||
if($drawmode == "GD") {
|
||||
print '
|
||||
<input type="hidden" name="cssdot" value="reddot.gif" />
|
||||
|
||||
<table><tr>
|
||||
|
||||
<td>'.t("Shape:").'</td><td><select name="shape">
|
||||
';
|
||||
|
||||
$shapes = array("Diamond", "Diamond Outline", "Square", "Square Outline", "Cross");
|
||||
foreach($shapes as $curshape) {
|
||||
|
||||
if($setshape == $curshape) {
|
||||
print "<option value=\"$curshape\" selected>".t($curshape);
|
||||
} else {
|
||||
print "<option value=\"$curshape\">".t($curshape);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
print "</select></td></tr><tr><td>".t("Size:")."</td><td><select name=\"size\">";
|
||||
|
||||
$sizes = array("2", "3", "4", "5", "6", "7", "8");
|
||||
foreach($sizes as $cursize) {
|
||||
|
||||
if($setsize == $cursize) {
|
||||
print "<option value=\"$cursize\" selected>$cursize";
|
||||
} else {
|
||||
print "<option value=\"$cursize\">$cursize";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
print "</select></td></tr><tr><td>".t("Color:")."</td><td><select name=\"color\">";
|
||||
|
||||
$colors = array("red", "white", "yellow", "magenta", "cyan", "green", "violet");
|
||||
foreach($colors as $curcolor) {
|
||||
|
||||
if($setcolor == $curcolor) {
|
||||
print "<option value=\"$curcolor\" selected>".t($curcolor);
|
||||
} else {
|
||||
print "<option value=\"$curcolor\">".t($curcolor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
print "
|
||||
</select></td></tr></table>
|
||||
";
|
||||
|
||||
} elseif($drawmode == "CSS") {
|
||||
|
||||
print t("Pointer:")." <select name=\"cssdot\">";
|
||||
|
||||
foreach($cssdots as $curdot) {
|
||||
|
||||
list($filename, $curdot, , ) = split(":", $curdot);
|
||||
|
||||
if($setcssdot == $filename) {
|
||||
print "<option value=\"$filename\" selected>$curdot";
|
||||
} else {
|
||||
print "<option value=\"$filename\">$curdot";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
print "</select><br />";
|
||||
|
||||
print '
|
||||
<input type="hidden" name="shape" value="Diamond" />
|
||||
<input type="hidden" name="color" value="Red" />
|
||||
<input type="hidden" name="size" value="3" />
|
||||
';
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
<?php echo t("Other Preferences:") ?><br />
|
||||
<?php echo t("Earth Image:") ?>
|
||||
<select name="earthimage">
|
||||
|
||||
<?php
|
||||
|
||||
foreach($earthimages as $curentry) {
|
||||
|
||||
list($curfile, $curname, , ) = split(":", $curentry);
|
||||
|
||||
if($setearthimage == $curfile) {
|
||||
print "<option value=\"$curfile\" selected>$curname";
|
||||
} else {
|
||||
print "<option value=\"$curfile\">$curname";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
</select>
|
||||
<br /><br />
|
||||
<input type="Submit" name="button" value="<?php echo t("Save") ?>">
|
||||
|
||||
<div align="right">
|
||||
[ <a href="plot.php<?php if(isset($HTTP_GET_VARS["lastquery"])) { echo "?address=$HTTP_GET_VARS[lastquery]"; } ?>"><?php echo t("main") ?></a> ]<br /><br />
|
||||
</div>
|
||||
<?php include("footer.inc"); ?>
|
||||
</body></html>
|
@ -1,182 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
Blank Language File
|
||||
|
||||
copy this language file from messages.blank.inc to
|
||||
messages.<country code>.inc.
|
||||
|
||||
please email new language files to ivan@xpenguin.com
|
||||
copy a language file to messages.<cc>.inc and \
|
||||
edit what $p is on encountering an english phrase.
|
||||
|
||||
please notice the punctuation and capitilization.
|
||||
|
||||
change the $language variable in plotconf.inc after
|
||||
creating a language file.
|
||||
|
||||
*/
|
||||
|
||||
function lookup($phrase) {
|
||||
switch($phrase) {
|
||||
|
||||
# start translating the $p here
|
||||
|
||||
case "Plotting" :
|
||||
$p = ""; break;
|
||||
|
||||
case "preferences" :
|
||||
$p = ""; break;
|
||||
|
||||
case "locate me" :
|
||||
$p = ""; break;
|
||||
|
||||
case "IP/Hostname:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "You at" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Submit" :
|
||||
$p = ""; break;
|
||||
|
||||
case "main" :
|
||||
$p = ""; break;
|
||||
|
||||
# Used in context "(host) is located in"
|
||||
case "is" :
|
||||
$p = ""; break;
|
||||
|
||||
# Used in context "You at (host) are located in"
|
||||
case "are" :
|
||||
$p = ""; break;
|
||||
|
||||
case "located in" :
|
||||
$p = ""; break;
|
||||
|
||||
case "cannot be located." :
|
||||
$p = ""; break;
|
||||
|
||||
case "cannot be resolved." :
|
||||
$p = ""; break;
|
||||
|
||||
case "is a host in the private IP address range." :
|
||||
$p = ""; break;
|
||||
|
||||
case "does not resolve." :
|
||||
$p = ""; break;
|
||||
|
||||
case "is not a valid IP address." :
|
||||
$p = ""; break;
|
||||
|
||||
case "Temporary lookup failure." :
|
||||
$p = ""; break;
|
||||
|
||||
case "IP-Atlas Preferences" :
|
||||
$p = ""; break;
|
||||
|
||||
# make the 'p' lowercase if possible in your language
|
||||
|
||||
case "IP-Atlas preferences" :
|
||||
$p = ""; break;
|
||||
|
||||
case "(cookie based)" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Draw mode (defaults guessed for your browser):" :
|
||||
$p = ""; break;
|
||||
|
||||
// next two phrases are combined
|
||||
case "Your settings have been saved. You can now try" :
|
||||
$p = ""; break;
|
||||
|
||||
case "plotting something." :
|
||||
$p = ""; break;
|
||||
|
||||
case "Pointer Preferences (the dot that marks lat/lon):" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Shape:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Size:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Color:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Pointer:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Other Preferences:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Earth Image:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Color" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Grayscale" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Save" :
|
||||
$p = ""; break;
|
||||
|
||||
# shape names:
|
||||
case "Diamond" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Diamond Outline" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Square" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Square Outline" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Cross" :
|
||||
$p = ""; break;
|
||||
|
||||
# colors:
|
||||
|
||||
case "red" :
|
||||
$p = ""; break;
|
||||
|
||||
case "white" :
|
||||
$p = ""; break;
|
||||
|
||||
case "yellow" :
|
||||
$p = ""; break;
|
||||
|
||||
case "magenta" :
|
||||
$p = ""; break;
|
||||
|
||||
case "cyan" :
|
||||
$p = ""; break;
|
||||
|
||||
case "green" :
|
||||
$p = ""; break;
|
||||
|
||||
case "violet" :
|
||||
$p = ""; break;
|
||||
|
||||
# stop here
|
||||
|
||||
// return in english if the phrase couldn't be found
|
||||
default:
|
||||
$p = $phrase; break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// return english if match was blank
|
||||
if($p == "") { $p = $phrase; }
|
||||
|
||||
return $p;
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,185 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
Italian Language File
|
||||
|
||||
I forgot who started translating this file, email me so i can put your
|
||||
email here.
|
||||
|
||||
please email new language files to ivan@xpenguin.com
|
||||
copy a language file to messages.<cc>.inc and \
|
||||
edit what $p is on encountering an english phrase.
|
||||
|
||||
you can start off with messages.blank.inc
|
||||
|
||||
please notice the punctuation and capitilization.
|
||||
|
||||
change the $language variable in plotconf.inc after
|
||||
creating a language file.
|
||||
|
||||
*/
|
||||
|
||||
function lookup($phrase) {
|
||||
switch($phrase) {
|
||||
|
||||
# start translating the $p here
|
||||
|
||||
case "Plotting" :
|
||||
$p = "Mappa di"; break;
|
||||
|
||||
case "preferences" :
|
||||
$p = "preferenze"; break;
|
||||
|
||||
case "locate me" :
|
||||
$p = "localizzami"; break;
|
||||
|
||||
case "IP/Hostname:" :
|
||||
$p = "IP/Nome host:"; break;
|
||||
|
||||
case "You at" :
|
||||
$p = "Tu"; break;
|
||||
|
||||
case "Submit" :
|
||||
$p = ""; break;
|
||||
|
||||
case "main" :
|
||||
$p = ""; break;
|
||||
|
||||
# Used in context "(host) is located in"
|
||||
case "is" :
|
||||
$p = "è"; break;
|
||||
|
||||
# Used in context "You at (host) are located in"
|
||||
case "are" :
|
||||
$p = "sei"; break;
|
||||
|
||||
case "located in" :
|
||||
$p = "stato localizzato in"; break;
|
||||
|
||||
case "cannot be located." :
|
||||
$p = "non può essere localizzato."; break;
|
||||
|
||||
case "cannot be resolved." :
|
||||
$p = "non può essere risolto."; break;
|
||||
|
||||
case "is a host in the private IP address range." :
|
||||
$p = "è un host in un range di IP privati."; break;
|
||||
|
||||
case "does not resolve." :
|
||||
$p = "irrisolvibile."; break;
|
||||
|
||||
case "is not a valid IP address." :
|
||||
$p = "non è un indirizzo IP valido."; break;
|
||||
|
||||
case "Temporary lookup failure." :
|
||||
$p = "Errore temporaneo di lookup."; break;
|
||||
|
||||
case "IP-Atlas Preferences" :
|
||||
$p = "Preferenze IP-Atlas"; break;
|
||||
|
||||
# make the 'p' lowercase if possible in your language
|
||||
|
||||
case "IP-Atlas preferences" :
|
||||
$p = "Preferenze IP-Atlas"; break;
|
||||
|
||||
case "(cookie based)" :
|
||||
$p = "(basato su cookie)"; break;
|
||||
|
||||
case "Draw mode (defaults guessed for your browser):" :
|
||||
$p = ""; break;
|
||||
|
||||
// next two phrases are combined
|
||||
case "Your settings have been saved. You can now try" :
|
||||
$p = "Le tue impostazioni sono state salvate "; break;
|
||||
|
||||
case "plotting something." :
|
||||
$p = "torna indietro."; break;
|
||||
|
||||
case "Pointer Preferences (the dot that marks lat/lon):" :
|
||||
$p = "Preferenze puntatore (il simbolo che indica la lat/lon):"; break;
|
||||
|
||||
case "Shape:" :
|
||||
$p = "Forma:"; break;
|
||||
|
||||
case "Size:" :
|
||||
$p = "Dimensione:"; break;
|
||||
|
||||
case "Color:" :
|
||||
$p = "Colore:"; break;
|
||||
|
||||
case "Pointer:" :
|
||||
$p = "Puntatore:"; break;
|
||||
|
||||
# any help here?
|
||||
|
||||
case "Other Preferences:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Earth Image:" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Color" :
|
||||
$p = "Colore"; break;
|
||||
|
||||
case "Grayscale" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Save" :
|
||||
$p = ""; break;
|
||||
|
||||
# shape names:
|
||||
case "Diamond" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Diamond Outline" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Square" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Square Outline" :
|
||||
$p = ""; break;
|
||||
|
||||
case "Cross" :
|
||||
$p = ""; break;
|
||||
|
||||
# colors:
|
||||
|
||||
case "red" :
|
||||
$p = ""; break;
|
||||
|
||||
case "white" :
|
||||
$p = ""; break;
|
||||
|
||||
case "yellow" :
|
||||
$p = ""; break;
|
||||
|
||||
case "magenta" :
|
||||
$p = ""; break;
|
||||
|
||||
case "cyan" :
|
||||
$p = ""; break;
|
||||
|
||||
case "green" :
|
||||
$p = ""; break;
|
||||
|
||||
case "violet" :
|
||||
$p = ""; break;
|
||||
|
||||
# stop here
|
||||
|
||||
// return in english if the phrase couldn't be found
|
||||
default:
|
||||
$p = $phrase; break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
if($p == "") { $p = $phrase; }
|
||||
|
||||
return $p;
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,13 +0,0 @@
|
||||
<?php // $Id$
|
||||
// Lookup a user using ipatlas and NetGeo
|
||||
|
||||
// The database for this is REALLY old now and this service is
|
||||
// next to useless.
|
||||
|
||||
function iplookup_display($ip, $user=0) {
|
||||
global $CFG;
|
||||
|
||||
redirect($CFG->wwwroot.'/iplookup/ipatlas/plot.php?address='.$ip.'&user='.$user);
|
||||
}
|
||||
|
||||
?>
|
@ -1,398 +0,0 @@
|
||||
<?php
|
||||
|
||||
$version = "1.0";
|
||||
|
||||
// check for bad agents immidietly
|
||||
$blockbadagents=1;
|
||||
if($blockbadagents == 1) {
|
||||
// those metaquery assholes at t-dialin and others can't
|
||||
// get another dumber using the default user-agent, can they?
|
||||
|
||||
$agent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
|
||||
|
||||
if(
|
||||
strstr("libwww-perl", $agent) ||
|
||||
strstr("lwp-trivial", $agent) ||
|
||||
strstr("LWP::Simple", $agent) ||
|
||||
strstr("PHP/", $agent)) {
|
||||
|
||||
// goodbye
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function s10_rfc_1918_ip($in) {
|
||||
|
||||
if (ereg('^(127\.)', $in, $part)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (ereg('^(10\.)', $in, $part)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (ereg('^(192\.168\.)', $in, $part)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (ereg('^(172\.)' . '([0-9]{1,3})', $in, $part)) {
|
||||
if(($part[2] > 15) and ($part[2] < 32)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
function stuffanalyze($stuff) {
|
||||
|
||||
$stuff2[0] = array_values(preg_grep ("/CITY:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (CITY)");
|
||||
$stuff2[1] = array_values(preg_grep ("/STATE:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (STATE)");
|
||||
$stuff2[2] = array_values(preg_grep ("/COUNTRY:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (COUNTRY)");
|
||||
$stuff2[3] = array_values(preg_grep ("/LAT:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (LAT)");
|
||||
$stuff2[4] = array_values(preg_grep ("/LONG:/", $stuff)) or die("Sorry, but the lookup for this IP address failed! (LONG)");
|
||||
|
||||
// all the stuff2 values are actually arrays, making the following code look like crap
|
||||
|
||||
// the power of $count
|
||||
|
||||
if(isset($stuff2[0][0])) {
|
||||
|
||||
for ($count = 0; $count < count($stuff2); $count++) {
|
||||
$stuff2[$count] = $stuff2[$count][0];
|
||||
$stuff2[$count] = ucwords(strtolower(trim(substr(substr($stuff2[$count], 15), 0, -5))));
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// if no data was found
|
||||
$stuff2 = array("bad", "bad", "bad", "bad", "bad");
|
||||
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
|
||||
return $stuff2;
|
||||
|
||||
}
|
||||
|
||||
function getlatdata($ip) {
|
||||
|
||||
global $firewall_host;
|
||||
global $firewall_port;
|
||||
global $use_firewall;
|
||||
|
||||
|
||||
$data = array("");
|
||||
|
||||
if ($use_firewall) {
|
||||
|
||||
$fp = fsockopen ($firewall_host, $firewall_port, $errno, $errstr, 30) or die("Could not open socket to proxy");
|
||||
if (!$fp) {
|
||||
echo "$errstr ($errno)<br/>\n";
|
||||
} else {
|
||||
fputs ($fp, "GET http://netgeo.caida.org/perl/netgeo.cgi?target=$ip HTTP/1.0\r\nHost: netgeo.caida.org\r\n\r\n") or die("Could not write to socket");
|
||||
while (!feof($fp)) {
|
||||
$packet = fgets ($fp,128) or die("Could not read from socket");
|
||||
array_push($data, $packet) or die("Could not push data into array");
|
||||
}
|
||||
fclose ($fp);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
$fp = fsockopen ("netgeo.caida.org", 80, $errno, $errstr, 30) or die("Could not open socket to caida.org");
|
||||
if (!$fp) {
|
||||
echo "$errstr ($errno)<br/>\n";
|
||||
} else {
|
||||
fputs ($fp, "GET /perl/netgeo.cgi?target=$ip HTTP/1.0\r\nHost: netgeo.caida.org\r\n\r\n") or die("Could not write to socket");
|
||||
while (!feof($fp)) {
|
||||
$packet = fgets ($fp,128) or die("Could not read from socket");
|
||||
array_push($data, $packet) or die("Could not push socket data into array");
|
||||
}
|
||||
fclose ($fp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// make it an array
|
||||
|
||||
return $data;
|
||||
|
||||
}
|
||||
|
||||
function finddot($name, $cssdots, $defaultdot) {
|
||||
foreach($cssdots as $x) {
|
||||
list($filename, , $width, $height) = split(":", $x);
|
||||
if($filename == $name) { $found = 1; $return = array($name, $width, $height); }
|
||||
}
|
||||
if(isset($found)) {
|
||||
return $return;
|
||||
} else {
|
||||
$dott = $cssdots[$defaultdot];
|
||||
list($dott, , $width, $height) = split(":", $dott);
|
||||
return array($dott, $width, $height);
|
||||
}
|
||||
}
|
||||
|
||||
function getlocationcoords($lat, $lon, $width, $height) {
|
||||
// some cartographers weren't mathematicians, up is apparently negative to them
|
||||
$lat = ($lat * -1);
|
||||
|
||||
$lat = ($lat + 90);
|
||||
$lon = ($lon + 180);
|
||||
$x = ($lon * ($width / 360));
|
||||
$y = ($lat * ($height / 180));
|
||||
|
||||
$x = round($x);
|
||||
$y = round($y);
|
||||
return array($x, $y);
|
||||
}
|
||||
|
||||
function getimagecoords($earthimages, $image) {
|
||||
foreach($earthimages as $x) {
|
||||
list($file, , $width, $height) = split(":", $x);
|
||||
if($file == $image) {
|
||||
$coords = array("$width", "$height");
|
||||
return $coords;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validcookie($cookie) {
|
||||
if(preg_match("/.*.:.*.:.*.:.*.:.*./", $cookie)) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
function isvalidimage($cookie, $earthimages, $defaultimage) {
|
||||
# list(, , , $setearthimage) = split(":", $cookie);
|
||||
$setearthimage = $cookie;
|
||||
if(isset($setearthimage)) {
|
||||
// check if the image is one actually defined, not a cookie edit
|
||||
foreach($earthimages as $image) {
|
||||
list($testearthimage, , , ) = split(":", $image);
|
||||
if($testearthimage == $setearthimage) {
|
||||
$found = 1;
|
||||
}
|
||||
}
|
||||
if(isset($found)) {
|
||||
return $setearthimage;
|
||||
} else {
|
||||
return $earthimages[$defaultimage];
|
||||
}
|
||||
} else {
|
||||
return $earthimages[$defaultimage];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function istheregd() {
|
||||
global $trygd;
|
||||
if($trygd == 1) {
|
||||
if (@ImageTypes() & IMG_PNG) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
function checkbrowser($agent) {
|
||||
if (strstr($agent, "Mozilla/4.7") || strstr($agent, "Opera 6") || strstr($agent, "Opera/6")) {
|
||||
return FALSE;
|
||||
} else {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
function shouldrun($agent) {
|
||||
|
||||
// could cause probs... dunno
|
||||
global $HTTP_COOKIE_VARS;
|
||||
|
||||
// check for new format of cookie with 6 parameters
|
||||
if(@preg_match("/.*.:.*.:.*.:.*.:.*.:.*./", $HTTP_COOKIE_VARS["atlasprefs"])) {
|
||||
list( , , , , , $drawmode) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]);
|
||||
} else {
|
||||
$drawmode = "";
|
||||
}
|
||||
|
||||
// don't try to understand below, it figures out whether
|
||||
// to run it in css or gd based of prefs, server ability, and user agent.
|
||||
|
||||
if(istheregd() && ($drawmode == "1")) {
|
||||
return TRUE;
|
||||
} elseif($drawmode == "0") {
|
||||
return FALSE;
|
||||
} elseif(checkbrowser($agent) && istheregd()) {
|
||||
return TRUE;
|
||||
} elseif(!checkbrowser($agent)) {
|
||||
return FALSE;
|
||||
} elseif (!istheregd()) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function s10_validate_ip($in) {
|
||||
if (is_string($in) && ereg('^([0-9]{1,3})\.([0-9]{1,3})\.' .
|
||||
'([0-9]{1,3})\.([0-9]{1,3})$' ,
|
||||
$in, $part)) {
|
||||
if ($part[1] <= 255 && $part[2] <= 255 &&
|
||||
$part[3] <= 255 && $part[4] <= 255)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
function getstuff($address, $local) {
|
||||
|
||||
$address = trim($address);
|
||||
|
||||
# some people still think that urls are hostnames
|
||||
$address = str_replace("http://", "", $address);
|
||||
$address = preg_replace("/\/.*$/", "", $address);
|
||||
|
||||
// Security checks
|
||||
$address = escapeshellcmd($address);
|
||||
|
||||
$values = array();
|
||||
|
||||
$values["address"] = $address;
|
||||
|
||||
if(eregi("[a-z]", $address)){
|
||||
$ipaddress = gethostbyname($address);
|
||||
|
||||
if($ipaddress == $address) {
|
||||
|
||||
$values["validity"] = "no";
|
||||
|
||||
}
|
||||
|
||||
$values["hostname"] = $address;
|
||||
|
||||
$values["ishost"] = "yes";
|
||||
|
||||
} else {
|
||||
|
||||
if(s10_validate_ip($address)) {
|
||||
|
||||
$ipaddress = $address;
|
||||
$values["hostname"] = "";
|
||||
} else {
|
||||
$values["validity"] = "no";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!isset($values["validity"])) {
|
||||
if(s10_rfc_1918_ip($ipaddress)) {
|
||||
$private = "yes";
|
||||
} else {
|
||||
$private = "no";
|
||||
}
|
||||
} else {
|
||||
$private = "no";
|
||||
}
|
||||
|
||||
if(!isset($ipaddress)) { $ipaddress = ""; }
|
||||
|
||||
$values["ipaddress"] = $ipaddress;
|
||||
|
||||
if(!isset($values["validity"]) && ($private == "no")) {
|
||||
|
||||
$stuff = getlatdata($ipaddress);
|
||||
|
||||
list(
|
||||
|
||||
$values["city"],
|
||||
$values["state"],
|
||||
$values["country"],
|
||||
$values["lat"],
|
||||
$values["lon"]
|
||||
|
||||
) = stuffanalyze($stuff);
|
||||
|
||||
$desc = "";
|
||||
|
||||
// check if it is the user's ip address
|
||||
if($local == 1) { $desc .= t("You at"); }
|
||||
|
||||
// add the ip address and hostname
|
||||
$desc .= "<b>$values[hostname]</b> (<b>$values[ipaddress]</b>) ";
|
||||
|
||||
// use "are" if it is the user's ip address
|
||||
if($local == 1) { $desc .= t("are"); } else { $desc .= t("is"); }
|
||||
|
||||
$desc .= " ".t("located in")." ";
|
||||
|
||||
// add the city if it's there
|
||||
if($values["city"]) {
|
||||
$desc .= "$values[city], ";
|
||||
}
|
||||
|
||||
// add the state if its there
|
||||
if($values["state"]) {
|
||||
$desc .= "$values[state], ";
|
||||
}
|
||||
|
||||
if($values["country"]) {
|
||||
// make the country code capital so its ready for lookup
|
||||
$values["country"] = strtoupper($values["country"]);
|
||||
// convert the country code to a country name
|
||||
$countries = file("countries.txt") or die("Could not open countries file");
|
||||
$precountry = array_values(preg_grep("/$values[country] /", $countries));
|
||||
$values["country"] = trim(substr($precountry[0], 4));
|
||||
$desc .= "$values[country].";
|
||||
}
|
||||
|
||||
$desc .= " <font color=\"#aaaaaa\">($values[lat], $values[lon])</font>";
|
||||
|
||||
$state = $values["state"];
|
||||
$city = $values["city"];
|
||||
|
||||
// decide if address can't resolve, be located, or if it's fine
|
||||
if($values["lat"] == "0.00" && $values["lon"] == "0.00" && (@($state != "bad" && $city != "bad"))) {
|
||||
$values["desc"] = "<b>$values[address]</b> ".t("cannot be located.");
|
||||
$values["lat"] = "";
|
||||
$values["lon"] = "";
|
||||
} elseif($values["lat"] == "" && $values["lon"] == "") {
|
||||
$values["desc"] = "<b>$values[address]</b> ".t("cannot be located.");
|
||||
} else {
|
||||
$values["desc"] = $desc;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// check if it was a host before and decide on an error message
|
||||
|
||||
if($private == "yes") {
|
||||
$values["desc"] = "<b>$address</b> ".t("is a host in the private IP address range.");
|
||||
} elseif(@($values["state"] == "bad" && $values["city"] == "bad")) {
|
||||
$values["desc"] = t("Temporary lookup failure.");
|
||||
} elseif(isset($values["ishost"])) {
|
||||
$values["desc"] = "<b>$address</b> ".t("does not resolve.");
|
||||
} else {
|
||||
$values["desc"] = "<b>$address</b> ".t("is not a valid IP address.");
|
||||
}
|
||||
|
||||
// some blank lat/lon for the image script or it will plot us in the center
|
||||
$values["lon"] = "";
|
||||
$values["lat"] = "";
|
||||
|
||||
}
|
||||
|
||||
return($values);
|
||||
}
|
||||
|
||||
?>
|
@ -1,139 +0,0 @@
|
||||
<?php
|
||||
|
||||
include("plotconf.inc");
|
||||
include("plot.inc");
|
||||
|
||||
if (isset($user)) {
|
||||
$user = get_record("user", "id", $user);
|
||||
$fullname = fullname($user, true);
|
||||
$username = "<b>$fullname</b> [$user->city, $user->country] : ";
|
||||
} else {
|
||||
$username = "";
|
||||
}
|
||||
|
||||
// cleanup
|
||||
if (isset($HTTP_GET_VARS["lastquery"])) {
|
||||
$HTTP_GET_VARS["lastquery"] = clean_param($HTTP_GET_VARS["lastquery"], PARAM_HOST);
|
||||
}
|
||||
|
||||
// check if it is the user's ip, or another host
|
||||
|
||||
if(!isset($HTTP_GET_VARS["address"]) || ($HTTP_GET_VARS["address"] == "")) {
|
||||
$address = $HTTP_SERVER_VARS['REMOTE_ADDR'];
|
||||
$local = 1;
|
||||
} else {
|
||||
$HTTP_GET_VARS["address"] = clean_param($HTTP_GET_VARS["address"], PARAM_HOST);
|
||||
$address = $HTTP_GET_VARS["address"];
|
||||
$local = 0;
|
||||
}
|
||||
|
||||
// this is the most important function, gets lat/lon and description of location
|
||||
$values = getstuff($address, $local) or die("Error in plot.inc");
|
||||
|
||||
if(isset($logging) && is_writable("plotlog.txt")) {
|
||||
$log = @fopen("plotlog.txt", "a") or print "";
|
||||
@fputs($log, $HTTP_SERVER_VARS["REMOTE_ADDR"] ."\t". date("F j, Y, g:i a") . "\t$address\t$values[address]\t$values[lat]\t$values[lon]\n") or print "";
|
||||
@fclose($log);
|
||||
}
|
||||
|
||||
if(isset($HTTP_COOKIE_VARS["atlasprefs"]) && validcookie($HTTP_COOKIE_VARS["atlasprefs"])) {
|
||||
list( , , , $imagething) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]);
|
||||
$imagething = clean_param($imagething, PARAM_FILE);
|
||||
$earthimage = isvalidimage($imagething, $earthimages, $defaultimage);
|
||||
} else {
|
||||
$earthimage = $earthimages[$defaultimage];
|
||||
}
|
||||
|
||||
if(strstr($earthimage, ":")) {
|
||||
list($earthimage, , , ) = split(":", $earthimage);
|
||||
}
|
||||
|
||||
// check if we need to run it in css mode
|
||||
if(!shouldrun($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
|
||||
|
||||
list($width, $height) = getimagecoords($earthimages, $earthimage);
|
||||
|
||||
// make sure some coords were found
|
||||
if($values["lat"] == "" || $values["lon"] == "") {
|
||||
|
||||
$display = " ";
|
||||
$extracss = "";
|
||||
|
||||
} else {
|
||||
|
||||
list($x, $y) = getlocationcoords($values["lat"], $values["lon"], $width, $height);
|
||||
|
||||
if(isset($HTTP_COOKIE_VARS["atlasprefs"])) {
|
||||
list( , , , , $dotname) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]);
|
||||
$dotname = clean_param($dotname, PARAM_FILE);
|
||||
list($thedot, $dotwidth, $dotheight) = finddot($dotname, $cssdots, $defaultdot);
|
||||
} else {
|
||||
$dotname = $cssdots[$defaultdot];
|
||||
list($dotname, , , ) = split(":", $dotname);
|
||||
$dotname = clean_param($dotname, PARAM_FILE);
|
||||
list($thedot, $dotwidth, $dotheight) = finddot($dotname, $cssdots, $defaultdot);
|
||||
}
|
||||
|
||||
// magical formula for placing the css dot
|
||||
$x = ($x - floor($dotwidth / 2));
|
||||
$y = ($y - floor($dotheight / 2));
|
||||
|
||||
$extracss = "<style>
|
||||
#dotDiv { padding-left:$x; padding-top:$y; }
|
||||
</style>";
|
||||
$display = "<div id=\"dotDiv\"><img width=\"$dotwidth\" height=\"$dotheight\" src=\"$thedot\">";
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// gd mode
|
||||
|
||||
list($width, $height) = getimagecoords($earthimages, $earthimage) or die("Unable to find width/height for image $earthimage in config file");
|
||||
$extracss = "";
|
||||
$display = "<img src=\"plotimage.php?lat=$values[lat]&lon=$values[lon]\" width=\"$width\" height=\"$height\" alt=\"\" />";
|
||||
|
||||
}
|
||||
|
||||
# START HTML
|
||||
|
||||
print '
|
||||
|
||||
<html><head><title>'.t("Plotting").' '.$values["address"].'</title>
|
||||
'.$extracss.'
|
||||
|
||||
<!-- your head tags here -->
|
||||
<link rel="Stylesheet" href="ip-atlas.css">
|
||||
</head><body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<a name="map"></a>
|
||||
|
||||
<table valign="top" cellpadding=0 cellspacing=0 border=0 background="'.$earthimage.'" width="'.$width.'" height="'.$height.'"><tr><td valign="top">'.$display.'</td></tr></table>
|
||||
|
||||
|
||||
<br />
|
||||
';
|
||||
|
||||
if(isset($address)) {
|
||||
print "$username $values[desc]";
|
||||
}
|
||||
|
||||
$PHP_SELF = 'plot.php';
|
||||
|
||||
print '
|
||||
<br /><br />
|
||||
<form method="GET" action="'.$PHP_SELF.'#map">
|
||||
<table width="100%"><tr><td nowrap align="left">
|
||||
'.t("IP/Hostname:").' <input value="'.$values["address"].'" type="text" size="30" name="address" /><input type="Submit" value="'.t("Submit").'" /></td><td align="right" width="100%">
|
||||
[ <a href="ip-atlas_prefs.php?lastquery='?><?php if(isset($HTTP_GET_VARS["address"])) { echo $HTTP_GET_VARS["address"]; } ?><?php echo '">'.t("preferences").'</a> ]
|
||||
[ <a href="'."$PHP_SELF".'">'.t("locate me").'</a> ]
|
||||
</td></tr></table>
|
||||
</form>
|
||||
';
|
||||
|
||||
include("footer.inc");
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
?>
|
@ -1,61 +0,0 @@
|
||||
<?php
|
||||
|
||||
require("../../config.php");
|
||||
|
||||
# try to find GD on the server? set this
|
||||
# to "0" if the script doesn't work or there is a broken image
|
||||
if ($CFG->gdversion == 1 or $CFG->gdversion == 2) {
|
||||
$trygd = "1";
|
||||
} else {
|
||||
$trygd = "0";
|
||||
}
|
||||
|
||||
# language (look in language/ dir for language files)
|
||||
$language = "en"; global $language;
|
||||
|
||||
include("translate.inc");
|
||||
|
||||
# display warnings? set to "0" if there are warnings
|
||||
# on the screen. report these to ivan@xpenguin.com so
|
||||
# this option will become unnessessary.
|
||||
$warnings = "1";
|
||||
|
||||
# earth images
|
||||
# url path:name:width:height
|
||||
# everything must be accurate!
|
||||
# take new image names out of the t()
|
||||
|
||||
$earthimages = array();
|
||||
$earthimages[0] = "earth_620.jpg:".t("Color").":620:310";
|
||||
|
||||
# which image out of those is the default?
|
||||
$defaultimage = 0;
|
||||
|
||||
# css dots for netscape 4 users and systems without GD
|
||||
# url path:name:width:height
|
||||
$cssdots = array();
|
||||
$cssdots[0] = "reddot.gif:Red 7x7:7:7";
|
||||
$cssdots[1] = "yellowdot.gif:Yellow 7x7:7:7";
|
||||
$defaultdot = 0;
|
||||
|
||||
# block user agents "libwww-perl" "lwp-trivial" "LWP::Simple" "PHP/"
|
||||
$blockbadagents = 1;
|
||||
|
||||
# log entries? comment the line to disable.
|
||||
#$logging = "yes";
|
||||
|
||||
# path to the cookie
|
||||
$cookiepath = "/";
|
||||
|
||||
# set $use_firewall to "1" if behind a proxy
|
||||
if ($CFG->proxyhost and $CFG->proxyport) {
|
||||
$use_firewall="1";
|
||||
$firewall_host=$CFG->proxyhost;
|
||||
$firewall_port=$CFG->proxyport;
|
||||
} else {
|
||||
$use_firewall="";
|
||||
$firewall_host="localhost";
|
||||
$firewall_port=3128;
|
||||
}
|
||||
|
||||
?>
|
@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
include("plotconf.inc");
|
||||
include("plot.inc");
|
||||
|
||||
$form_vars = ${"HTTP_".$HTTP_SERVER_VARS["REQUEST_METHOD"]."_VARS"};
|
||||
$lat = $form_vars['lat'];
|
||||
$lon = $form_vars['lon'];
|
||||
|
||||
if(isset($HTTP_COOKIE_VARS["atlasprefs"]) && validcookie($HTTP_COOKIE_VARS["atlasprefs"])) {
|
||||
list($setshape, $setcolor, $setsize, $earthimage, , ) = split(":", $HTTP_COOKIE_VARS["atlasprefs"]);
|
||||
} else {
|
||||
$setshape = "Diamond";
|
||||
$setcolor = "red";
|
||||
$setsize = "3";
|
||||
$earthimage = $earthimages[$defaultimage];
|
||||
list($earthimage, , , ) = split(":", $earthimage);
|
||||
}
|
||||
|
||||
$earthimage = isvalidimage($earthimage, $earthimages, $defaultimage);
|
||||
|
||||
if(strstr($earthimage, ":")) {
|
||||
list($earthimage, , , ) = split(":", $earthimage);
|
||||
}
|
||||
|
||||
list($width, $height) = getimagecoords($earthimages, $earthimage);
|
||||
|
||||
if($setsize > 8 || $setsize < 2) {
|
||||
$setsize = 2;
|
||||
}
|
||||
|
||||
$im = @ImageCreate ($width, $height)
|
||||
or die ("Cannot Initialize new GD image stream");
|
||||
$background_color = ImageColorAllocate ($im, 255, 255, 255);
|
||||
|
||||
|
||||
// color table
|
||||
if($setcolor == "red") { $r = "255"; $g = "0"; $b = "0"; }
|
||||
elseif($setcolor == "white") { $r = "255"; $g = "255"; $b = "254"; }
|
||||
elseif($setcolor == "yellow") { $r = "255"; $g = "255"; $b = "0"; }
|
||||
elseif($setcolor == "magenta") { $r = "255"; $g = "0"; $b = "255"; }
|
||||
elseif($setcolor == "cyan") { $r = "0"; $g = "255"; $b = "255"; }
|
||||
elseif($setcolor == "green") { $r = "0"; $g = "225"; $b = "0"; }
|
||||
elseif($setcolor == "violet") { $r = "191"; $g = "0"; $b = "255"; }
|
||||
else { $r = "255"; $g = "0"; $b = "0"; }
|
||||
|
||||
$loc_color = ImageColorAllocate ($im, $r, $g, $b);
|
||||
|
||||
if($lat == "" && $lon == "") { } else {
|
||||
|
||||
list($x, $y) = getlocationcoords($lat, $lon, $width, $height);
|
||||
|
||||
if($setshape == "Diamond") {
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
ImageFill($im, $x, $y, $loc_color);
|
||||
} elseif($setshape == "Diamond Outline") {
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
} elseif($setshape == "Square") {
|
||||
ImageFilledRectangle($im, ($x - $setsize), ($y - $setsize), ($x + $setsize), ($y + $setsize), $loc_color);
|
||||
} elseif($setshape == "Square Outline") {
|
||||
ImageRectangle($im, ($x - $setsize), ($y - $setsize), ($x + $setsize), ($y + $setsize), $loc_color);
|
||||
} elseif($setshape == "Cross") {
|
||||
ImageLine($im, ($x - $setsize), $y, ($x + $setsize), $y, $loc_color);
|
||||
ImageLine($im, $x, ($y - $setsize), $x, ($y + $setsize), $loc_color);
|
||||
} else {
|
||||
// draw a diamond if error
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x - $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y + $setsize), $loc_color);
|
||||
ImageLine($im, ($x + $setsize), $y, $x, ($y - $setsize), $loc_color);
|
||||
ImageFill($im, $x, $y, $loc_color);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
ImageColorTransparent ($im, $background_color);
|
||||
Header("Pragma: no-cache");
|
||||
Header("Expires: Thu, 26-Oct-1972 12:00:00");
|
||||
Header("Content-type: image/png");
|
||||
ImagePng ($im);
|
||||
ImageDestroy($im);
|
||||
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 53 B |
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
function t($phrase) {
|
||||
global $language;
|
||||
if($language == "en") {
|
||||
return $phrase;
|
||||
} else {
|
||||
include_once("languages/messages.$language.inc");
|
||||
$phrase = lookup($phrase, $language);
|
||||
return $phrase;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 53 B |
BIN
iplookup/marker.gif
Normal file
BIN
iplookup/marker.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 649 B |
@ -120,6 +120,8 @@ $string['configfrontpage'] = 'The items selected above will be displayed on the
|
||||
$string['configfrontpageloggedin'] = 'The items selected above will be displayed on the site\'s front page when a user is logged in.';
|
||||
$string['configfullnamedisplay'] = 'This defines how names are shown when they are displayed in full. For most mono-lingual sites the most efficient setting is the default \"First name + Surname\", but you may choose to hide surnames altogether, or to leave it up to the current language pack to decide (some languages have different conventions).';
|
||||
$string['configgdversion'] = 'Indicate the version of GD that is installed. The version shown by default is the one that has been auto-detected. Don\'t change this unless you really know what you\'re doing.';
|
||||
$string['configgeoipfile'] = 'Location of GeoIP City binary data file. This file is not part of Moodle distribution and must be obtained separately from <a href=\"http://www.maxmind.com/\">MaxMind</a>. You can either buy a commercial version or use the free version.<br />Simply download <a href=\"http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz\">http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz</a> and extract it into \"$a\" directory on your server.';
|
||||
$string['configgooglemapkey'] = 'You need to enter a special key to use Google Maps for IP address lookup visualization. You can obtain the key free of charge at <a href=\"http://code.google.com/apis/maps/signup.html\">http://code.google.com/apis/maps/signup.html</a>.<br />Your web site URL is: $a';
|
||||
$string['configgradebookroles'] = 'This setting allows you to control who appears on the gradebook. Users need to have at least one of these roles in a course to be shown in the gradebook for that course.';
|
||||
$string['configgradeexport'] = 'Choose which gradebook export formats are your primary methods for exporting grades. Chosen plugins will then set and use a \"last exported\" field for every grade. For example, this might result in exported records being identified as being \"new\" or \"updated\". If you are not sure about this then leave everything unchecked.';
|
||||
$string['configguestroleid'] = 'This role is automatically assigned to the guest user. It is also temporarily assigned to not enrolled users when they enter course that allows guests without password. Please verify that the role has moodle/legacy:guest and moodle/course:view capability.';
|
||||
@ -352,7 +354,9 @@ $string['frontpagesettings'] = 'Front Page settings';
|
||||
$string['fullnamedisplay'] = 'Full Name Format';
|
||||
$string['gdversion'] = 'GD version';
|
||||
$string['generalsettings'] = 'General settings';
|
||||
$string['geoipfile'] = 'GeoIP City data file';
|
||||
$string['globalsquoteswarning'] = '<p><strong>Security Warning</strong>: to operate properly, Moodle requires <br />that you make certain changes to your current PHP settings.<p/><p>You <em>must</em> set <code>register_globals=off</code> and/or <code>magic_quotes_gpc=on</code>. <br />If possible, you should set <code>register_globals=off</code> to improve general <br /> server security, setting <code>magic_quotes_gpc=on</code> is also recommended.<p/><p>These settings are controlled by editing your <code>php.ini</code>, Apache/IIS <br />configuration or <code>.htaccess</code> file.</p>';
|
||||
$string['googlemapkey'] = 'Google Maps API key';
|
||||
$string['gotofirst'] = 'Go to first missing string';
|
||||
$string['gradebook'] = 'Gradebook';
|
||||
$string['gradebookroles'] = 'Graded roles';
|
||||
@ -387,6 +391,12 @@ $string['intcachemax'] = 'Int. cache max';
|
||||
$string['invalidsection'] = 'Invalid section.';
|
||||
$string['invaliduserchangeme'] = 'Username \"changeme\" is reserved -- you cannot create an account with it.';
|
||||
$string['iplookup'] = 'IP address lookup';
|
||||
$string['iplookupinfo'] = '
|
||||
By default Moodle uses the free online NetGeo (The Internet Geographic Database) server to lookup location of IP addresses, unfortunately this database is not maintained anymore and may return <em>wildly incorrect</em> data.
|
||||
It is recommended to install local copy of free GeoLite City database from MaxMind.<br />
|
||||
IP address location is displayed on simple map or using Google Maps. Please note that you need to have a Google account and apply for free Google Maps API key to enable interactive maps.';
|
||||
$string['iplookupmaxmindnote'] = 'This product includes GeoLite data created by MaxMind, available from <a href=\"http://www.maxmind.com/\">http://www.maxmind.com/</a>.';
|
||||
$string['iplookupnetgeonote'] = 'The NetGeo server is currently being used to look up geographical information. For more accurate results we recommend installing a local copy of the MaxMind GeoLite database.';
|
||||
$string['keeptagnamecase'] = 'Keep tag name casing';
|
||||
$string['lang'] = 'Default language';
|
||||
$string['lang16notify'] = 'Moodle 1.6 and above allows you to install and update language packs directly from download.moodle.org by following the link below';
|
||||
|
@ -49,10 +49,13 @@ $string['guestnoeditprofileother'] = 'The guest user profile cannot be edited';
|
||||
$string['invalidcourse'] = 'Invalid course';
|
||||
$string['invalidfieldname'] = '\"$a\" is not a valid field name';
|
||||
$string['invalidfiletype'] = '\"$a\" is not a valid file type';
|
||||
$string['invalidipformat'] = 'Invalid IP address format';
|
||||
$string['invalidmd5'] = 'Invalid md5';
|
||||
$string['invalidrequest'] = 'Invalid request';
|
||||
$string['invalidrole'] = 'Invalid role';
|
||||
$string['invalidurl'] = 'Invalid url';
|
||||
$string['iplookupfailed'] = 'Can not find geo information about this IP address $a.';
|
||||
$string['iplookupprivate'] = 'Can not display lookup of private IP address';
|
||||
$string['invalidxmlfile'] = '\"$a\" is not a valid XML file';
|
||||
$string['listnopeers'] = 'No peers of item found.';
|
||||
$string['listnoitem'] = 'Item not found.';
|
||||
|
44
lib/geoip/ChangeLog.htm
Normal file
44
lib/geoip/ChangeLog.htm
Normal file
@ -0,0 +1,44 @@
|
||||
* Fix bug where PHP API didn't work with new edition of GeoIP ISP
|
||||
|
||||
1.6 2007-1-10
|
||||
* Added AX/Aland Islands, GG/Guernsey, IM/Isle of Man, JE/Jersey (ISO-3166-1 changes)
|
||||
* Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
|
||||
* geoip_country_(code|name)_by_addr now work against Geo(IP|Lite) City (Frank Mather)
|
||||
* Added code to lookup zoneinfo timezone given country and region (Frank Mather)
|
||||
* TP/East Timor changed to TL/Timor-Leste, reflecting changes in ISO-3166
|
||||
|
||||
1.5 2005-11-1
|
||||
* Added Shared Memory support for GeoIP City (Frank Mather)
|
||||
* Replaced Yugoslavia with Serbia and Montenegro
|
||||
* Removed global declaration for $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
|
||||
and $GEOIP_COUNTRY_CODES3
|
||||
|
||||
1.4 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
|
||||
* Formatted file according to PEAR library standards.
|
||||
* Moved $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
|
||||
* $GEOIP_COUNTRY_CODES3 and $GEOIP_COUNTRY_NAMES into the
|
||||
* GeoIP class, so that library will still work even when
|
||||
* not included in the $GLOBAL context.
|
||||
|
||||
* Updated geoip_country_code_by_addr to work with PHP5 (Eric of Host Ultra)
|
||||
* Replaced bit operators (| and &) with logical operators (|| and &&)
|
||||
* Defined GEOIP_ISP_EDITION
|
||||
|
||||
1.3 2004-8-4
|
||||
* Changed license from GPL to LGPL so code can be included in PEAR
|
||||
* added global definitions to prevent undefined variables error when including from function (C<>dric Dufour)
|
||||
* Updated country names
|
||||
* Added support for GeoIP City, version 1 with DMA and Area codes
|
||||
|
||||
1.2 2003-10-28
|
||||
* Added support for Shared Memory (Jason Priebe)
|
||||
* Added support for Distributed queries
|
||||
* Added support for GeoIP Region, version 1
|
||||
* Added Anonymous Proxy and Satellite Provider code/labels
|
||||
* Changed Taiwan, Province of China to Taiwan
|
||||
|
||||
1.1 2003-01-15
|
||||
* Added support for GeoIP Region and GeoIP City
|
||||
|
||||
1.0 2002-11-21
|
||||
* Initial checkin to CVS
|
43
lib/geoip/README.htm
Normal file
43
lib/geoip/README.htm
Normal file
@ -0,0 +1,43 @@
|
||||
Requirements
|
||||
|
||||
None (only the 'GeoIP.dat' file is needed). To download a free GeoIP Standard Country
|
||||
database, go to
|
||||
http://maxmind.com/download/geoip/database/
|
||||
|
||||
Install
|
||||
|
||||
Just place the 'geoip.inc' file somewhere according to the 'include_path' directive of
|
||||
your 'php.ini' file, or just place it in the same directory as your PHP scripts.
|
||||
|
||||
Usage
|
||||
|
||||
Gets country name by hostname :
|
||||
|
||||
include("geoip.inc");
|
||||
|
||||
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
|
||||
|
||||
echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
|
||||
geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
|
||||
echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
|
||||
geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
|
||||
|
||||
geoip_close($gi);
|
||||
|
||||
Memory Caching:
|
||||
To enable memory caching, pass GEOIP_SHARED_MEMORY or
|
||||
GEOIP_MEMORY_CACHE to the second argument of geoip_open
|
||||
|
||||
For GEOIP_SHARED_MEMORY, requires php >= 4.0.4,
|
||||
and --enable-shmop passed at configure time, see
|
||||
http://us2.php.net/manual/en/ref.shmop.php
|
||||
In addition, you should call geoip_load_shared_mem
|
||||
before calling geoip_open. See sample_city.php for an
|
||||
example of shared memory caching.
|
||||
|
||||
Working with PHP5.
|
||||
geoip_country_code_by_addr should work
|
||||
with PHP. For help with the other
|
||||
routines, please contact support@maxmind.com
|
||||
|
||||
Thanks to Jim Winstead.
|
498
lib/geoip/geoip.inc
Normal file
498
lib/geoip/geoip.inc
Normal file
@ -0,0 +1,498 @@
|
||||
<?php
|
||||
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
|
||||
/* geoip.inc
|
||||
*
|
||||
* Copyright (C) 2007 MaxMind LLC
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
define("GEOIP_COUNTRY_BEGIN", 16776960);
|
||||
define("GEOIP_STATE_BEGIN_REV0", 16700000);
|
||||
define("GEOIP_STATE_BEGIN_REV1", 16000000);
|
||||
define("GEOIP_STANDARD", 0);
|
||||
define("GEOIP_MEMORY_CACHE", 1);
|
||||
define("GEOIP_SHARED_MEMORY", 2);
|
||||
define("STRUCTURE_INFO_MAX_SIZE", 20);
|
||||
define("DATABASE_INFO_MAX_SIZE", 100);
|
||||
define("GEOIP_COUNTRY_EDITION", 106);
|
||||
define("GEOIP_PROXY_EDITION", 8);
|
||||
define("GEOIP_ASNUM_EDITION", 9);
|
||||
define("GEOIP_NETSPEED_EDITION", 10);
|
||||
define("GEOIP_REGION_EDITION_REV0", 112);
|
||||
define("GEOIP_REGION_EDITION_REV1", 3);
|
||||
define("GEOIP_CITY_EDITION_REV0", 111);
|
||||
define("GEOIP_CITY_EDITION_REV1", 2);
|
||||
define("GEOIP_ORG_EDITION", 110);
|
||||
define("GEOIP_ISP_EDITION", 4);
|
||||
define("SEGMENT_RECORD_LENGTH", 3);
|
||||
define("STANDARD_RECORD_LENGTH", 3);
|
||||
define("ORG_RECORD_LENGTH", 4);
|
||||
define("MAX_RECORD_LENGTH", 4);
|
||||
define("MAX_ORG_RECORD_LENGTH", 300);
|
||||
define("GEOIP_SHM_KEY", 0x4f415401);
|
||||
define("US_OFFSET", 1);
|
||||
define("CANADA_OFFSET", 677);
|
||||
define("WORLD_OFFSET", 1353);
|
||||
define("FIPS_RANGE", 360);
|
||||
define("GEOIP_UNKNOWN_SPEED", 0);
|
||||
define("GEOIP_DIALUP_SPEED", 1);
|
||||
define("GEOIP_CABLEDSL_SPEED", 2);
|
||||
define("GEOIP_CORPORATE_SPEED", 3);
|
||||
|
||||
class GeoIP {
|
||||
var $flags;
|
||||
var $filehandle;
|
||||
var $memory_buffer;
|
||||
var $databaseType;
|
||||
var $databaseSegments;
|
||||
var $record_length;
|
||||
var $shmid;
|
||||
var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
|
||||
"" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5,
|
||||
"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "AN" => 10, "AO" => 11,
|
||||
"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17,
|
||||
"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23,
|
||||
"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29,
|
||||
"BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35,
|
||||
"BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41,
|
||||
"CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47,
|
||||
"CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53,
|
||||
"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59,
|
||||
"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65,
|
||||
"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71,
|
||||
"FM" => 72, "FO" => 73, "FR" => 74, "FX" => 75, "GA" => 76, "GB" => 77,
|
||||
"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83,
|
||||
"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89,
|
||||
"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95,
|
||||
"HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101,
|
||||
"IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107,
|
||||
"IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113,
|
||||
"KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119,
|
||||
"KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125,
|
||||
"LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131,
|
||||
"LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137,
|
||||
"MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143,
|
||||
"MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149,
|
||||
"MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
|
||||
"NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161,
|
||||
"NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167,
|
||||
"PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173,
|
||||
"PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179,
|
||||
"PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185,
|
||||
"RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191,
|
||||
"SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197,
|
||||
"SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203,
|
||||
"SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209,
|
||||
"TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215,
|
||||
"TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221,
|
||||
"UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227,
|
||||
"VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
|
||||
"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239,
|
||||
"ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245,
|
||||
"O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250
|
||||
);
|
||||
var $GEOIP_COUNTRY_CODES = array(
|
||||
"", "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ",
|
||||
"AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH",
|
||||
"BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA",
|
||||
"CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU",
|
||||
"CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG",
|
||||
"EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB",
|
||||
"GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT",
|
||||
"GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN",
|
||||
"IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM",
|
||||
"KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS",
|
||||
"LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", "MM", "MN",
|
||||
"MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA",
|
||||
"NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA",
|
||||
"PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY",
|
||||
"QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI",
|
||||
"SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD",
|
||||
"TF", "TG", "TH", "TJ", "TK", "TM", "TN", "TO", "TL", "TR", "TT", "TV", "TW",
|
||||
"TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN",
|
||||
"VU", "WF", "WS", "YE", "YT", "RS", "ZA", "ZM", "ME", "ZW", "A1", "A2", "O1",
|
||||
"AX", "GG", "IM", "JE"
|
||||
);
|
||||
var $GEOIP_COUNTRY_CODES3 = array(
|
||||
"","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","AQ","ARG",
|
||||
"ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI",
|
||||
"BEN","BMU","BRN","BOL","BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC",
|
||||
"COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV",
|
||||
"CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH",
|
||||
"ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD",
|
||||
"GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM","GUM",
|
||||
"GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IO",
|
||||
"IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA",
|
||||
"PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
|
||||
"LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC",
|
||||
"MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL",
|
||||
"NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER",
|
||||
"PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT",
|
||||
"REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM",
|
||||
"SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF",
|
||||
"TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA",
|
||||
"UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT",
|
||||
"WLF","WSM","YEM","YT","SRB","ZAF","ZMB","MNE","ZWE","A1","A2","O1",
|
||||
"ALA","GGY","IMN","JEY"
|
||||
);
|
||||
var $GEOIP_COUNTRY_NAMES = array(
|
||||
"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates",
|
||||
"Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia",
|
||||
"Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa",
|
||||
"Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina",
|
||||
"Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain",
|
||||
"Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil",
|
||||
"Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize",
|
||||
"Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the",
|
||||
"Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook
|
||||
Islands", "Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape
|
||||
Verde", "Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti",
|
||||
"Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia",
|
||||
"Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji",
|
||||
"Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe
|
||||
Islands", "France", "France, Metropolitan", "Gabon", "United Kingdom",
|
||||
"Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland",
|
||||
"Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia
|
||||
and the South Sandwich Islands", "Guatemala", "Guam", "Guinea-Bissau",
|
||||
"Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras",
|
||||
"Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India",
|
||||
"British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of",
|
||||
"Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan",
|
||||
"Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic
|
||||
People's Republic of", "Korea, Republic of", "Kuwait", "Cayman Islands",
|
||||
"Kazakstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia",
|
||||
"Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg",
|
||||
"Latvia", "Libyan Arab Jamahiriya", "Morocco", "Monaco", "Moldova, Republic
|
||||
of", "Madagascar", "Marshall Islands", "Macedonia",
|
||||
"Mali", "Myanmar", "Mongolia", "Macau", "Northern Mariana Islands",
|
||||
"Martinique", "Mauritania", "Montserrat", "Malta", "Mauritius", "Maldives",
|
||||
"Malawi", "Mexico", "Malaysia", "Mozambique", "Namibia", "New Caledonia",
|
||||
"Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Netherlands", "Norway",
|
||||
"Nepal", "Nauru", "Niue", "New Zealand", "Oman", "Panama", "Peru", "French
|
||||
Polynesia", "Papua New Guinea", "Philippines", "Pakistan", "Poland", "Saint
|
||||
Pierre and Miquelon", "Pitcairn Islands", "Puerto Rico", "Palestinian Territory",
|
||||
"Portugal", "Palau", "Paraguay", "Qatar", "Reunion", "Romania",
|
||||
"Russian Federation", "Rwanda", "Saudi Arabia", "Solomon Islands",
|
||||
"Seychelles", "Sudan", "Sweden", "Singapore", "Saint Helena", "Slovenia",
|
||||
"Svalbard and Jan Mayen", "Slovakia", "Sierra Leone", "San Marino", "Senegal",
|
||||
"Somalia", "Suriname", "Sao Tome and Principe", "El Salvador", "Syrian Arab
|
||||
Republic", "Swaziland", "Turks and Caicos Islands", "Chad", "French Southern
|
||||
Territories", "Togo", "Thailand", "Tajikistan", "Tokelau", "Turkmenistan",
|
||||
"Tunisia", "Tonga", "Timor-Leste", "Turkey", "Trinidad and Tobago", "Tuvalu",
|
||||
"Taiwan", "Tanzania, United Republic of", "Ukraine",
|
||||
"Uganda", "United States Minor Outlying Islands", "United States", "Uruguay",
|
||||
"Uzbekistan", "Holy See (Vatican City State)", "Saint Vincent and the
|
||||
Grenadines", "Venezuela", "Virgin Islands, British", "Virgin Islands, U.S.",
|
||||
"Vietnam", "Vanuatu", "Wallis and Futuna", "Samoa", "Yemen", "Mayotte",
|
||||
"Serbia", "South Africa", "Zambia", "Montenegro", "Zimbabwe",
|
||||
"Anonymous Proxy","Satellite Provider","Other",
|
||||
"Aland Islands","Guernsey","Isle of Man","Jersey"
|
||||
);
|
||||
}
|
||||
function geoip_load_shared_mem ($file) {
|
||||
|
||||
$fp = fopen($file, "rb");
|
||||
if (!$fp) {
|
||||
print "error opening $file: $php_errormsg\n";
|
||||
exit;
|
||||
}
|
||||
$s_array = fstat($fp);
|
||||
$size = $s_array['size'];
|
||||
if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
|
||||
shmop_delete ($shmid);
|
||||
shmop_close ($shmid);
|
||||
}
|
||||
$shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
|
||||
shmop_write ($shmid, fread($fp, $size), 0);
|
||||
shmop_close ($shmid);
|
||||
}
|
||||
|
||||
function _setup_segments($gi){
|
||||
$gi->databaseType = GEOIP_COUNTRY_EDITION;
|
||||
$gi->record_length = STANDARD_RECORD_LENGTH;
|
||||
if ($gi->flags & GEOIP_SHARED_MEMORY) {
|
||||
$offset = @shmop_size ($gi->shmid) - 3;
|
||||
for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
|
||||
$delim = @shmop_read ($gi->shmid, $offset, 3);
|
||||
$offset += 3;
|
||||
if ($delim == (chr(255).chr(255).chr(255))) {
|
||||
$gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
|
||||
$offset++;
|
||||
|
||||
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
|
||||
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
|
||||
} else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
|
||||
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
|
||||
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
|
||||
($gi->databaseType == GEOIP_CITY_EDITION_REV1)
|
||||
|| ($gi->databaseType == GEOIP_ORG_EDITION)
|
||||
|| ($gi->databaseType == GEOIP_ISP_EDITION)
|
||||
|| ($gi->databaseType == GEOIP_ASNUM_EDITION)){
|
||||
$gi->databaseSegments = 0;
|
||||
$buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
|
||||
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
|
||||
$gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
|
||||
}
|
||||
if (($gi->databaseType == GEOIP_ORG_EDITION)||
|
||||
($gi->databaseType == GEOIP_ISP_EDITION)) {
|
||||
$gi->record_length = ORG_RECORD_LENGTH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
$offset -= 4;
|
||||
}
|
||||
}
|
||||
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
|
||||
($gi->databaseType == GEOIP_PROXY_EDITION)||
|
||||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){
|
||||
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
|
||||
}
|
||||
} else {
|
||||
$filepos = ftell($gi->filehandle);
|
||||
fseek($gi->filehandle, -3, SEEK_END);
|
||||
for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
|
||||
$delim = fread($gi->filehandle,3);
|
||||
if ($delim == (chr(255).chr(255).chr(255))){
|
||||
$gi->databaseType = ord(fread($gi->filehandle,1));
|
||||
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
|
||||
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
|
||||
}
|
||||
else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
|
||||
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
|
||||
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) ||
|
||||
($gi->databaseType == GEOIP_CITY_EDITION_REV1) ||
|
||||
($gi->databaseType == GEOIP_ORG_EDITION) ||
|
||||
($gi->databaseType == GEOIP_ISP_EDITION) ||
|
||||
($gi->databaseType == GEOIP_ASNUM_EDITION)){
|
||||
$gi->databaseSegments = 0;
|
||||
$buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
|
||||
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
|
||||
$gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
|
||||
}
|
||||
if ($gi->databaseType == GEOIP_ORG_EDITION ||
|
||||
$gi->databaseType == GEOIP_ISP_EDITION) {
|
||||
$gi->record_length = ORG_RECORD_LENGTH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
fseek($gi->filehandle, -4, SEEK_CUR);
|
||||
}
|
||||
}
|
||||
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
|
||||
($gi->databaseType == GEOIP_PROXY_EDITION)||
|
||||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){
|
||||
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
|
||||
}
|
||||
fseek($gi->filehandle,$filepos,SEEK_SET);
|
||||
}
|
||||
return $gi;
|
||||
}
|
||||
|
||||
function geoip_open($filename, $flags) {
|
||||
$gi = new GeoIP;
|
||||
$gi->flags = $flags;
|
||||
if ($gi->flags & GEOIP_SHARED_MEMORY) {
|
||||
$gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
|
||||
} else {
|
||||
$gi->filehandle = fopen($filename,"rb");
|
||||
if ($gi->flags & GEOIP_MEMORY_CACHE) {
|
||||
$s_array = fstat($gi->filehandle);
|
||||
$gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
|
||||
}
|
||||
}
|
||||
|
||||
$gi = _setup_segments($gi);
|
||||
return $gi;
|
||||
}
|
||||
|
||||
function geoip_close($gi) {
|
||||
if ($gi->flags & GEOIP_SHARED_MEMORY) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return fclose($gi->filehandle);
|
||||
}
|
||||
|
||||
function geoip_country_id_by_name($gi, $name) {
|
||||
$addr = gethostbyname($name);
|
||||
if (!$addr || $addr == $name) {
|
||||
return false;
|
||||
}
|
||||
return geoip_country_id_by_addr($gi, $addr);
|
||||
}
|
||||
|
||||
function geoip_country_code_by_name($gi, $name) {
|
||||
$country_id = geoip_country_id_by_name($gi,$name);
|
||||
if ($country_id !== false) {
|
||||
return $gi->GEOIP_COUNTRY_CODES[$country_id];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function geoip_country_name_by_name($gi, $name) {
|
||||
$country_id = geoip_country_id_by_name($gi,$name);
|
||||
if ($country_id !== false) {
|
||||
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function geoip_country_id_by_addr($gi, $addr) {
|
||||
$ipnum = ip2long($addr);
|
||||
return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
|
||||
}
|
||||
|
||||
function geoip_country_code_by_addr($gi, $addr) {
|
||||
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
|
||||
$record = geoip_record_by_addr($gi,$addr);
|
||||
return $record->country_code;
|
||||
} else {
|
||||
$country_id = geoip_country_id_by_addr($gi,$addr);
|
||||
if ($country_id !== false) {
|
||||
return $gi->GEOIP_COUNTRY_CODES[$country_id];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function geoip_country_name_by_addr($gi, $addr) {
|
||||
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
|
||||
$record = geoip_record_by_addr($gi,$addr);
|
||||
return $record->country_name;
|
||||
} else {
|
||||
$country_id = geoip_country_id_by_addr($gi,$addr);
|
||||
if ($country_id !== false) {
|
||||
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function _geoip_seek_country($gi, $ipnum) {
|
||||
$offset = 0;
|
||||
for ($depth = 31; $depth >= 0; --$depth) {
|
||||
if ($gi->flags & GEOIP_MEMORY_CACHE) {
|
||||
$buf = substr($gi->memory_buffer,
|
||||
2 * $gi->record_length * $offset,
|
||||
2 * $gi->record_length);
|
||||
} elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
|
||||
$buf = @shmop_read ($gi->shmid,
|
||||
2 * $gi->record_length * $offset,
|
||||
2 * $gi->record_length );
|
||||
} else {
|
||||
fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
|
||||
or die("fseek failed");
|
||||
$buf = fread($gi->filehandle, 2 * $gi->record_length);
|
||||
}
|
||||
$x = array(0,0);
|
||||
for ($i = 0; $i < 2; ++$i) {
|
||||
for ($j = 0; $j < $gi->record_length; ++$j) {
|
||||
$x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
|
||||
}
|
||||
}
|
||||
if ($ipnum & (1 << $depth)) {
|
||||
if ($x[1] >= $gi->databaseSegments) {
|
||||
return $x[1];
|
||||
}
|
||||
$offset = $x[1];
|
||||
} else {
|
||||
if ($x[0] >= $gi->databaseSegments) {
|
||||
return $x[0];
|
||||
}
|
||||
$offset = $x[0];
|
||||
}
|
||||
}
|
||||
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
function _get_org($gi,$ipnum){
|
||||
$seek_org = _geoip_seek_country($gi,$ipnum);
|
||||
if ($seek_org == $gi->databaseSegments) {
|
||||
return NULL;
|
||||
}
|
||||
$record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
|
||||
if ($gi->flags & GEOIP_SHARED_MEMORY) {
|
||||
$org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
|
||||
} else {
|
||||
fseek($gi->filehandle, $record_pointer, SEEK_SET);
|
||||
$org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
|
||||
}
|
||||
$org_buf = substr($org_buf, 0, strpos($org_buf, 0));
|
||||
return $org_buf;
|
||||
}
|
||||
|
||||
function geoip_org_by_addr ($gi,$addr) {
|
||||
if ($addr == NULL) {
|
||||
return 0;
|
||||
}
|
||||
$ipnum = ip2long($addr);
|
||||
return _get_org($gi, $ipnum);
|
||||
}
|
||||
|
||||
function _get_region($gi,$ipnum){
|
||||
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
|
||||
$seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
|
||||
if ($seek_region >= 1000){
|
||||
$country_code = "US";
|
||||
$region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
|
||||
} else {
|
||||
$country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
|
||||
$region = "";
|
||||
}
|
||||
return array ($country_code,$region);
|
||||
} else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
|
||||
$seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
|
||||
//print $seek_region;
|
||||
if ($seek_region < US_OFFSET){
|
||||
$country_code = "";
|
||||
$region = "";
|
||||
} else if ($seek_region < CANADA_OFFSET) {
|
||||
$country_code = "US";
|
||||
$region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
|
||||
} else if ($seek_region < WORLD_OFFSET) {
|
||||
$country_code = "CA";
|
||||
$region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
|
||||
} else {
|
||||
$country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
|
||||
$region = "";
|
||||
}
|
||||
return array ($country_code,$region);
|
||||
}
|
||||
}
|
||||
|
||||
function geoip_region_by_addr ($gi,$addr) {
|
||||
if ($addr == NULL) {
|
||||
return 0;
|
||||
}
|
||||
$ipnum = ip2long($addr);
|
||||
return _get_region($gi, $ipnum);
|
||||
}
|
||||
|
||||
function getdnsattributes ($l,$ip){
|
||||
$r = new Net_DNS_Resolver();
|
||||
$r->nameservers = array("ws1.maxmind.com");
|
||||
$p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
|
||||
$str = is_object($p->answer[0])?$p->answer[0]->string():'';
|
||||
ereg("\"(.*)\"",$str,$regs);
|
||||
$str = $regs[1];
|
||||
return $str;
|
||||
}
|
||||
|
||||
?>
|
205
lib/geoip/geoipcity.inc
Normal file
205
lib/geoip/geoipcity.inc
Normal file
@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
/* geoipcity.inc
|
||||
*
|
||||
* Copyright (C) 2004 Maxmind LLC
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Changelog:
|
||||
*
|
||||
* 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
|
||||
* Formatted file according to PEAR library standards.
|
||||
* Changed inclusion of geoip.inc file to require_once, so that
|
||||
* this library can be used in the same script as geoip.inc.
|
||||
*/
|
||||
|
||||
define("FULL_RECORD_LENGTH",50);
|
||||
|
||||
require_once 'geoip.inc';
|
||||
require_once 'geoipregionvars.php';
|
||||
|
||||
class geoiprecord {
|
||||
var $country_code;
|
||||
var $country_code3;
|
||||
var $country_name;
|
||||
var $region;
|
||||
var $city;
|
||||
var $postal_code;
|
||||
var $latitude;
|
||||
var $longitude;
|
||||
var $area_code;
|
||||
var $dma_code;
|
||||
}
|
||||
|
||||
class geoipdnsrecord {
|
||||
var $country_code;
|
||||
var $country_code3;
|
||||
var $country_name;
|
||||
var $region;
|
||||
var $regionname;
|
||||
var $city;
|
||||
var $postal_code;
|
||||
var $latitude;
|
||||
var $longitude;
|
||||
var $areacode;
|
||||
var $dmacode;
|
||||
var $isp;
|
||||
var $org;
|
||||
}
|
||||
|
||||
function getrecordwithdnsservice($str){
|
||||
$record = new geoipdnsrecord;
|
||||
$keyvalue = split(";",$str);
|
||||
foreach ($keyvalue as $keyvalue2){
|
||||
list($key,$value) = split("=",$keyvalue2);
|
||||
if ($key == "co"){
|
||||
$record->country_code = $value;
|
||||
}
|
||||
if ($key == "ci"){
|
||||
$record->city = $value;
|
||||
}
|
||||
if ($key == "re"){
|
||||
$record->region = $value;
|
||||
}
|
||||
if ($key == "ac"){
|
||||
$record->areacode = $value;
|
||||
}
|
||||
if ($key == "dm"){
|
||||
$record->dmacode = $value;
|
||||
}
|
||||
if ($key == "is"){
|
||||
$record->isp = $value;
|
||||
}
|
||||
if ($key == "or"){
|
||||
$record->org = $value;
|
||||
}
|
||||
if ($key == "zi"){
|
||||
$record->postal_code = $value;
|
||||
}
|
||||
if ($key == "la"){
|
||||
$record->latitude = $value;
|
||||
}
|
||||
if ($key == "lo"){
|
||||
$record->longitude = $value;
|
||||
}
|
||||
}
|
||||
$number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
|
||||
$record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
|
||||
$record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
|
||||
if ($record->region != "") {
|
||||
if (($record->country_code == "US") || ($record->country_code == "CA")){
|
||||
$record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
|
||||
} else {
|
||||
$record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
|
||||
}
|
||||
}
|
||||
return $record;
|
||||
}
|
||||
|
||||
function _get_record($gi,$ipnum){
|
||||
$seek_country = _geoip_seek_country($gi,$ipnum);
|
||||
if ($seek_country == $gi->databaseSegments) {
|
||||
return NULL;
|
||||
}
|
||||
$record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
|
||||
|
||||
if ($gi->flags & GEOIP_MEMORY_CACHE) {
|
||||
$record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
|
||||
} elseif ($gi->flags & GEOIP_SHARED_MEMORY){
|
||||
$record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
|
||||
} else {
|
||||
fseek($gi->filehandle, $record_pointer, SEEK_SET);
|
||||
$record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
|
||||
}
|
||||
$record = new geoiprecord;
|
||||
$record_buf_pos = 0;
|
||||
$char = ord(substr($record_buf,$record_buf_pos,1));
|
||||
$record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
|
||||
$record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
|
||||
$record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
|
||||
$record_buf_pos++;
|
||||
$str_length = 0;
|
||||
// Get region
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
while ($char != 0){
|
||||
$str_length++;
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
}
|
||||
if ($str_length > 0){
|
||||
$record->region = substr($record_buf,$record_buf_pos,$str_length);
|
||||
}
|
||||
$record_buf_pos += $str_length + 1;
|
||||
$str_length = 0;
|
||||
// Get city
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
while ($char != 0){
|
||||
$str_length++;
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
}
|
||||
if ($str_length > 0){
|
||||
$record->city = substr($record_buf,$record_buf_pos,$str_length);
|
||||
}
|
||||
$record_buf_pos += $str_length + 1;
|
||||
$str_length = 0;
|
||||
// Get postal code
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
while ($char != 0){
|
||||
$str_length++;
|
||||
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
|
||||
}
|
||||
if ($str_length > 0){
|
||||
$record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
|
||||
}
|
||||
$record_buf_pos += $str_length + 1;
|
||||
$str_length = 0;
|
||||
// Get latitude and longitude
|
||||
$latitude = 0;
|
||||
$longitude = 0;
|
||||
for ($j = 0;$j < 3; ++$j){
|
||||
$char = ord(substr($record_buf,$record_buf_pos++,1));
|
||||
$latitude += ($char << ($j * 8));
|
||||
}
|
||||
$record->latitude = ($latitude/10000) - 180;
|
||||
for ($j = 0;$j < 3; ++$j){
|
||||
$char = ord(substr($record_buf,$record_buf_pos++,1));
|
||||
$longitude += ($char << ($j * 8));
|
||||
}
|
||||
$record->longitude = ($longitude/10000) - 180;
|
||||
if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
|
||||
$dmaarea_combo = 0;
|
||||
if ($record->country_code == "US"){
|
||||
for ($j = 0;$j < 3;++$j){
|
||||
$char = ord(substr($record_buf,$record_buf_pos++,1));
|
||||
$dmaarea_combo += ($char << ($j * 8));
|
||||
}
|
||||
$record->dma_code = floor($dmaarea_combo/1000);
|
||||
$record->area_code = $dmaarea_combo%1000;
|
||||
}
|
||||
}
|
||||
return $record;
|
||||
}
|
||||
|
||||
function GeoIP_record_by_addr ($gi,$addr){
|
||||
if ($addr == NULL){
|
||||
return 0;
|
||||
}
|
||||
$ipnum = ip2long($addr);
|
||||
return _get_record($gi, $ipnum);
|
||||
}
|
||||
|
||||
?>
|
4119
lib/geoip/geoipregionvars.php
Normal file
4119
lib/geoip/geoipregionvars.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -675,6 +675,14 @@ body#user-index #longtimenosee {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.iplookup #header h1.headermain {
|
||||
font-size:1em;
|
||||
}
|
||||
|
||||
.iplookup #note {
|
||||
font-size:0.8em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/***
|
||||
*** Modules: Assignment
|
||||
|
@ -3150,6 +3150,14 @@ body#user-index .rolesform {
|
||||
height:100%;
|
||||
}
|
||||
|
||||
.iplookup #map {
|
||||
margin:auto;
|
||||
}
|
||||
|
||||
.iplookup #note {
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/***
|
||||
*** Modules: Assignment
|
||||
***/
|
||||
|
Loading…
x
Reference in New Issue
Block a user