ipdata
v3 Breaking Changes -- All public types have been renamed to follow .NET naming conventions for two-letter acronyms. See the Migration Guide for details.
ipdata.co is a fast, reliable and clean service that allows you to look up the location of an IP Address and other data.
Table of Content
- Install
- Lookup
- Basic
- Bulk
- Carrier
- Company
- Asn
- Timezone
- Currency
- Threat
- EU Endpoint
- Dependency Injection
- Migrating from v2 to v3
- Contributing
- Versioning
- License
Install
NuGet package install using package manager:
NuGet package install using .NET CLI:
Lookup
All usage examples you can find on samples folder.
Basic
// Get IP data from my IP
var myIp = await client.Lookup();
Console.WriteLine($"Country name for {myIp.Ip} is {myIp.CountryName}");
// Get IP data from IP
var ipInfo = await client.Lookup("8.8.8.8");
Console.WriteLine($"Country name for {ipInfo.Ip} is {ipInfo.CountryName}");
// Get single field from IP
var countryName = await client.Lookup("8.8.8.8", x => x.CountryName);
Console.WriteLine($"Country name for 8.8.8.8 is {countryName}");
// Get multiple fields from IP
var geolocation = await client.Lookup("8.8.8.8", x => x.Latitude, x => x.Longitude);
Console.WriteLine($"Geolocation for 8.8.8.8 is lat: {geolocation.Latitude} long: {geolocation.Longitude}");
Bulk
From ipdata.co docs:
Note that bulk lookups are only available to paid users and are currently limited to a 100 at a time. Reach out to support if you need to lookup larger batches.
var ipInfoList = await client.Lookup(new string[] { "1.1.1.1", "2.2.2.2", "3.3.3.3" });
foreach (var ipInfo in ipInfoList)
{
Console.WriteLine($"Country name for {ipInfo.Ip} is {ipInfo.CountryName}");
}
Carrier
var carrierInfo = await client.Carrier("69.78.70.144");
Console.WriteLine($"Carrier name: {carrierInfo.Name}");
Company
var companyInfo = await client.Company("69.78.70.144");
Console.WriteLine($"Company name: {companyInfo.Name}");
ASN
var asnInfo = await client.Asn("69.78.70.144");
Console.WriteLine($"ASN name: {asnInfo.Name}");
Timezone
var timezoneInfo = await client.TimeZone("69.78.70.144");
Console.WriteLine($"TimeZone name: {timezoneInfo.Name}");
Currency
var currencyInfo = await client.Currency("69.78.70.144");
Console.WriteLine($"Currency name: {currencyInfo.Name}");
Threat
var threatInfo = await client.Threat("69.78.70.144");
Console.WriteLine($"Threat is Tor: {threatInfo.IsTor}");
EU Endpoint
To ensure your data stays in the EU, use the EU endpoint by passing a custom base URL:
var ipInfo = await client.Lookup("8.8.8.8");
Dependency Injection
If you're using ASP.NET Core, you can register IPDataClient with IHttpClientFactory to benefit from managed connection pooling and handler lifetimes:
services.AddHttpClient("ipdata");
services.AddSingleton<IIPDataClient>(sp =>
{
var factory = sp.GetRequiredService<IHttpClientFactory>();
var httpClient = factory.CreateClient("ipdata");
return new IPDataClient("API_KEY", httpClient);
});
Then inject IIPDataClient wherever you need it:
{
private readonly IIPDataClient _ipDataClient;
public MyService(IIPDataClient ipDataClient)
{
_ipDataClient = ipDataClient;
}
public async Task<string> GetCountry(string ip)
{
var result = await _ipDataClient.Lookup(ip);
return result.CountryName;
}
}
Migrating from v2 to v3
v3 renames all public types to follow .NET naming conventions for two-letter acronyms. It also adds EU endpoint support and a Company lookup.
Renamed types
| v2 | v3 |
|---|---|
IpDataClient |
IPDataClient |
IIpDataClient |
IIPDataClient |
IpInfo |
IPLookupResult |
Namespace change
- using IpData.Models;
+ using IPData;
+ using IPData.Models;
NuGet package
The package ID has changed from IpData to IPData:
dotnet add package IPData
New features in v3
- EU endpoint -- Pass a custom base URL to route requests through EU servers:
var client = new IPDataClient("API_KEY", new Uri("https://eu-api.ipdata.co"));
- Company lookup -- Fetch company info for an IP:
var companyInfo = await client.Company("8.8.8.8");
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
License
This project is licensed under the MIT License - see the LICENSE.md file for details