Crates.io | public-ip-address |
lib.rs | public-ip-address |
version | 0.3.2 |
source | src |
created_at | 2024-03-29 15:24:26.935865 |
updated_at | 2024-04-25 21:59:05.374064 |
description | A simple library for performing public IP and geolocation lookups from various services. |
homepage | |
repository | https://github.com/ghztomash/public-ip-address |
max_upload_size | |
id | 1190265 |
size | 837,742 |
public-ip-address
is a simple Rust library for performing public IP lookups from over a dozen of various services.
It provides a unified interface to fetch public IP address and geolocation information from multiple providers.
Arbitrary IP address lookup and access API keys are supported for certain providers.
The library provides an asynchronous and blocking interfaces to make it easy to integrate with other async
codebase.
The library also includes caching functionality to improve performance for repeated lookups and minimize reaching rate-limiting thresholds. The cache file can be encrypted when enabled through a feature flag for additional privacy.
Add the following to your Cargo.toml
file:
[dependencies]
public-ip-address = { version = "0.3" }
# with cache encryption enabled
public-ip-address = { version = "0.3", features = ["encryption"] }
# with `async` disabled
public-ip-address = { version = "0.3", features = ["blocking"] }
The simplest way to use this library is to call the perform_lookup()
function, which returns a Result
with a LookupResponse
.
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Perform my public IP address lookup
let result = public_ip_address::perform_lookup(None).await?;
println!("{}", result);
Ok(())
}
With blocking
interface enabled:
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// Perform my public IP address lookup
let result = public_ip_address::perform_lookup(None)?;
println!("{}", result);
Ok(())
}
More examples can be found in the examples
directory. And run them with the following command:
cargo run --example <example_name>
Running the examples with the blocking
feature enabled:
cargo run --example <example_name> --features blocking
Provider | URL | Rate Limit | API Key | Target Lookup |
---|---|---|---|---|
FreeIpApi | https://freeipapi.com | 60 / minute | ✔️ | ✔️ |
IfConfig | https://ifconfig.co | 1 / minute | ✔️ | |
IpInfo | https://ipinfo.io | 50000 / month | ✔️ | ✔️ |
MyIp | https://my-ip.io | ? / day | ️ | ️ |
IpApiCom | https://ip-api.com | 45 / minute | ✔️ | |
IpWhoIs | https://ipwhois.io | 10000 / month | ️ | ✔️ |
IpApiCo | https://ipapi.co | 30000 / month | ✔️ | |
IpApiIo | https://ip-api.io | ? / day | ✔️ | ✔️ |
IpBase | https://ipbase.com | 10 / hour | ✔️ | ✔️ |
IpLocateIo | https://iplocate.io | 50 / day | ✔️ | ✔️ |
IpLeak | https://ipleak.net | ? / day | ️ | ✔️ |
Mullvad | https://mullvad.net | ? / day | ️ | ️ |
AbstractApi | https://abstractapi.com | 1000 / day | ✔️ | ✔️ |
IpGeolocation | https://ipgeolocation.io | 1000 / day | ✔️ | ✔️ |
IpData | https://ipdata.co | 1500 / day | ✔️ | ✔️ |
Ip2Location | https://ip2location.io | 500 / day (with key 30000 / month) | ✔️ | ✔️ |
MyIpCom | https://myip.com | unlimited | ️ | ️ |
GetJsonIp | https://getjsonip.com | unlimited | ️ | ️ |
Ipify | https://www.ipify.org | unlimited | ️ | ️ |
Licensed under either of
at your option.
Contributions are welcome! Please submit a pull request.
If you encounter any problems or have any questions, please open an issue in the GitHub repository.