Skip to content
This repository has been archived by the owner on Nov 7, 2023. It is now read-only.

Commit

Permalink
Implemented GeoIP support, made several improvements. Not finished.
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperSpyTX committed Apr 24, 2012
1 parent 4262a0e commit f6283c7
Show file tree
Hide file tree
Showing 30 changed files with 16,189 additions and 162 deletions.
5 changes: 4 additions & 1 deletion README
Expand Up @@ -2,4 +2,7 @@ Welcome to AntiBot GitHub!

This is where AntiBot is hosted.

The latest version of AntiBot is found in the downloads section.
The latest version of AntiBot is found in the downloads section.

This product includes GeoLite data created by MaxMind, available from
http://maxmind.com/
10 changes: 8 additions & 2 deletions plugin.yml
@@ -1,6 +1,6 @@
name: AntiBot
main: somebody.is.madbro.AntiBotCore
version: 2.5
version: 2.6
description: The ultimate spam protection for Minecraft.
commands:
antibot:
Expand All @@ -13,7 +13,13 @@ permissions:
description: Notifies the player if there is a current invasion.
AntiBot.join:
default: false
description: IMPORTANT! Allows players to bypass the spam system and join during invasions. Works well with AntiBot.notify.
description: Allow users to bypass anti bot spam.
AntiBot.chatspam:
default: false
description: Allows users to bypass anti chat spam.
AntiBot.countryban:
default: false
description: Users with this permission can join the server if their home country is banned from the server.
AntiBot.admin:
default: false
description: Full permissions! Don't give this to your admins. Use the alternatives below.
Expand Down
61 changes: 61 additions & 0 deletions src/com/maxmind/geoip/Country.java
@@ -0,0 +1,61 @@
/**
* Country.java
*
* Copyright (C) 2003 MaxMind LLC. All Rights Reserved.
*
* 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 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
* 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
*/

package com.maxmind.geoip;

/**
* Represents a country.
*
* @author Matt Tucker
*/
public class Country {

private String code;
private String name;

/**
* Creates a new Country.
*
* @param code the country code.
* @param name the country name.
*/
public Country(String code, String name) {
this.code = code;
this.name = name;
}

/**
* Returns the ISO two-letter country code of this country.
*
* @return the country code.
*/
public String getCode() {
return code;
}

/**
* Returns the name of this country.
*
* @return the country name.
*/
public String getName() {
return name;
}
}
127 changes: 127 additions & 0 deletions src/com/maxmind/geoip/DatabaseInfo.java
@@ -0,0 +1,127 @@
/**
* DatabaseInfo.java
*
* Copyright (C) 2003 MaxMind LLC. All Rights Reserved.
*
* 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 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
* 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
*/

package com.maxmind.geoip;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

/**
* Encapsulates metadata about the GeoIP database. The database has a date, is a premium or
* standard version, and is one of the following types:
*
* <ul>
* <li>Country edition -- this is the most common version of the database. It includes
* the name of the country and it's ISO country code given an IP address.
* <li>Region edition -- includes the country information as well as
* what U.S. state or Canadian province the IP address is from if the IP address
* is from the U.S. or Canada.
* <li>City edition -- includes country, region, city, postal code, latitude, and
* longitude information.
* <li>Org edition -- includes netblock owner.
* <li>ISP edition -- ISP information.
* </ul>
*
* @see com.maxmind.geoip.LookupService#getDatabaseInfo()
* @author Matt Tucker
*/
public class DatabaseInfo {

public final static int COUNTRY_EDITION = 1;
public final static int REGION_EDITION_REV0 = 7;
public final static int REGION_EDITION_REV1 = 3;
public final static int CITY_EDITION_REV0 = 6;
public final static int CITY_EDITION_REV1 = 2;
public final static int ORG_EDITION = 5;
public final static int ISP_EDITION = 4;
public final static int PROXY_EDITION = 8;
public final static int ASNUM_EDITION = 9;
public final static int NETSPEED_EDITION = 10;
public final static int DOMAIN_EDITION = 11;
public final static int COUNTRY_EDITION_V6 = 12;
public final static int ASNUM_EDITION_V6 = 21;
public final static int ISP_EDITION_V6 = 22;
public final static int ORG_EDITION_V6 = 23;
public final static int DOMAIN_EDITION_V6 = 24;
public final static int CITY_EDITION_REV1_V6 = 30;
public final static int CITY_EDITION_REV0_V6 = 31;
public final static int NETSPEED_EDITION_REV1 = 32;
public final static int NETSPEED_EDITION_REV1_V6 = 33;


private static SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");

private String info;

/**
* Creates a new DatabaseInfo object given the database info String.
* @param info
*/
public DatabaseInfo(String info) {
this.info = info;
}

public int getType() {
if (info == null || info.equals("")) {
return COUNTRY_EDITION;
}
else {
// Get the type code from the database info string and then
// subtract 105 from the value to preserve compatability with
// databases from April 2003 and earlier.
return Integer.parseInt(info.substring(4, 7)) - 105;
}
}

/**
* Returns true if the database is the premium version.
*
* @return true if the premium version of the database.
*/
public boolean isPremium() {
return info.indexOf("FREE") < 0;
}

/**
* Returns the date of the database.
*
* @return the date of the database.
*/
public Date getDate() {
for (int i=0; i<info.length()-9; i++) {
if (Character.isWhitespace(info.charAt(i))) {
String dateString = info.substring(i+1, i+9);
try {
synchronized (formatter) {
return formatter.parse(dateString);
}
}
catch (ParseException pe) { }
break;
}
}
return null;
}

public String toString() {
return info;
}
}
60 changes: 60 additions & 0 deletions src/com/maxmind/geoip/Location.java
@@ -0,0 +1,60 @@
/**
* Location.java
*
* Copyright (C) 2004 MaxMind LLC. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Lesser Public
* License as published by the Free Software Foundation; either
* version 2 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
* 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
*/

package com.maxmind.geoip;

public class Location {
public String countryCode;
public String countryName;
public String region;
public String city;
public String postalCode;
public float latitude;
public float longitude;
public int dma_code;
public int area_code;
public int metro_code;

private final static double EARTH_DIAMETER = 2 * 6378.2;
private final static double PI = 3.14159265;
private final static double RAD_CONVERT = PI / 180;

public double distance (Location loc) {
double delta_lat, delta_lon;
double temp;

float lat1 = latitude;
float lon1 = longitude;
float lat2 = loc.latitude;
float lon2 = loc.longitude;

// convert degrees to radians
lat1 *= RAD_CONVERT;
lat2 *= RAD_CONVERT;

// find the deltas
delta_lat = lat2 - lat1;
delta_lon = (lon2 - lon1) * RAD_CONVERT;

// Find the great circle distance
temp = Math.pow(Math.sin(delta_lat/2),2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(delta_lon/2),2);
return EARTH_DIAMETER * Math.atan2(Math.sqrt(temp),Math.sqrt(1-temp));
}
}

0 comments on commit f6283c7

Please sign in to comment.