In this tutorial, we will show how to input an IP address and get back IP geolocation & proxy data using IP2Location library. Developers can use the geolocation information to deliver business requirements such are pages redirection and fraud prevention.
Pre-requisites
- Microsoft Visual Studio to compile the codes.
- Microsoft .NET Framework 4.61 or later.
- IP2Location LITE DB11 BIN database.
- IP2Proxy LITE PX8 BIN database.
We will assume you already have a version of Microsoft Visual Studio that is capable of handling .NET Framework 4.61 or later.
Getting started
First of all, you need to download the free IP geolocation BIN databases for both the IP2Location and the IP2Proxy data. Both databases are free for use with attribution required.
Download the free IP2Location LITE DB11 data:
https://lite.ip2location.com/ip2location-lite
Download the free IP2Proxy LITE PX8 data:
https://lite.ip2location.com/ip2proxy-lite
After downloading both zipped files above, you need to extract out their respective BIN files and copy them to a folder somewhere, e.g. C:\myfolder\ for our example.
In your Visual Studio project, go to the NuGet Package Manager and install the 2 NuGet packages below:
https://www.nuget.org/packages/IP2Location.IPGeolocation/
https://www.nuget.org/packages/IP2Proxy/
How to query both components
We will just show how to create and call the components.
First, create the QueryIP2Location function below will accept an IP address and output the geolocation results.
private string QueryIP2Location(string strIPAddress)
{
IP2Location.IPResult oIPResult = new IP2Location.IPResult();
IP2Location.Component oIP2Location = new IP2Location.Component();
String result = String.Empty;
try
{
if (strIPAddress != "")
{
oIP2Location.IPDatabasePath = @"C:\myfolder\IP2LOCATION-LITE-DB11.BIN";
oIPResult = oIP2Location.IPQuery(strIPAddress);
switch (oIPResult.Status.ToString())
{
case "OK":
result += "IP2Location GeoLocation Results:\n===========================================\n";
result += "IP Address: " + oIPResult.IPAddress + "\n";
result += "Country Code: " + oIPResult.CountryShort + "\n";
result += "Country Name: " + oIPResult.CountryLong + "\n";
result += "Region: " + oIPResult.Region + "\n";
result += "City: " + oIPResult.City + "\n";
result += "Latitude: " + oIPResult.Latitude + "\n";
result += "Longitude: " + oIPResult.Longitude + "\n";
result += "Postal Code: " + oIPResult.ZipCode + "\n";
result += "ISP Name: " + oIPResult.InternetServiceProvider + "\n";
result += "Domain Name: " + oIPResult.DomainName + "\n";
result += "Time Zone: " + oIPResult.TimeZone + "\n";
result += "Net Speed: " + oIPResult.NetSpeed + "\n";
result += "IDD Code: " + oIPResult.IDDCode + "\n";
result += "Area Code: " + oIPResult.AreaCode + "\n";
result += "Weather Station Code: " + oIPResult.WeatherStationCode + "\n";
result += "Weather Station Name: " + oIPResult.WeatherStationName + "\n";
result += "MCC: " + oIPResult.MCC + "\n";
result += "MNC: " + oIPResult.MNC + "\n";
result += "Mobile Brand: " + oIPResult.MobileBrand + "\n";
result += "Elevation: " + oIPResult.Elevation + "\n";
result += "Usage Type: " + oIPResult.UsageType + "\n";
break;
case "EMPTY_IP_ADDRESS":
result += "IP Address cannot be blank.";
break;
case "INVALID_IP_ADDRESS":
result += "Invalid IP Address.";
break;
case "MISSING_FILE":
result += "Invalid Database Path.";
break;
}
}
else
{
result += "IP Address cannot be blank.";
}
}
catch (Exception ex)
{
result += ex.Message;
}
finally
{
oIPResult = null;
oIP2Location = null;
}
return result;
}
Next, we will create the following QueryIP2Proxy
function which also takes an IP address and output the proxy information.
private void QueryIP2Proxy(string strIPAddress)
{
IP2Proxy.Component proxy = new IP2Proxy.Component();
IP2Proxy.ProxyResult all;
String result = String.Empty;
if(proxy.Open(@"C:\myfolder\IP2PROXY-LITE-PX8.BIN", IP2Proxy.Component.IOModes.IP2PROXY_FILE_IO) == 0)
{
all = proxy.GetAll(strIPAddress);
result += "\n\nIP2Proxy Proxy Results:\n===========================================\n";
result += "Is_Proxy: " + all.Is_Proxy.ToString() + "\n";
result += "Proxy_Type: " + all.Proxy_Type + "\n";
result += "Country_Short: " + all.Country_Short + "\n";
result += "Country_Long: " + all.Country_Long + "\n";
result += "Region: " + all.Region + "\n";
result += "City: " + all.City + "\n";
result += "ISP: " + all.ISP + "\n";
result += "Domain: " + all.Domain + "\n";
result += "Usage_Type: " + all.Usage_Type + "\n";
result += "ASN: " + all.ASN + "\n";
result += "AS: " + all.AS + "\n";
result += "Last_Seen: " + all.Last_Seen + "\n";
proxy.Close();
}
else
{
result += "Error reading BIN file.";
}
return result;
}
Finally, we just call both functions to get the information we need.
QueryIP2Location("8.8.8.8");
QueryIP2Proxy("8.8.8.8");
It is just that easy to implement IP geolocation and proxy detection functionalities in your code.
Visit blog.ip2location.com to know more about it.
- Difference between Array and ArrayList
- Difference between Hashtable and Dictionary
- How to write file using StreamWriter in C#?
- How to sort the generic SortedList in the descending order?
- Difference between delegates and events in C#
- How to read file using StreamReader in C#?
- How to calculate the code execution time in C#?
- Design Principle vs Design Pattern
- How to convert string to int in C#?
- Boxing and Unboxing in C#
- out keyword in C#
- ref Keyword in C#
- How to sort an array in C#?
- How to sort object array by specific property in C#?
- How to get a comma separated string from an array in C#?
- How to remove duplicate values from an array in C#?
- How to combine two arrays without duplicate values in C#?
- Difference between String and string in C#.
- How to count elements in C# array?
- Compare strings in C#