ReflectionIPAddress 0.7.1
dotnet add package ReflectionIPAddress --version 0.7.1
NuGet\Install-Package ReflectionIPAddress -Version 0.7.1
<PackageReference Include="ReflectionIPAddress" Version="0.7.1" />
<PackageVersion Include="ReflectionIPAddress" Version="0.7.1" />
<PackageReference Include="ReflectionIPAddress" />
paket add ReflectionIPAddress --version 0.7.1
#r "nuget: ReflectionIPAddress, 0.7.1"
#:package ReflectionIPAddress@0.7.1
#addin nuget:?package=ReflectionIPAddress&version=0.7.1
#tool nuget:?package=ReflectionIPAddress&version=0.7.1
ReflectionIPAddress
This is a library that checks the external IP address of a running PC, acquires a wildcard domain, and searches IP band information.
This library implements the simultaneous queries of several free services (e.g. ipify.org, ip6.me, etc.) that provide a service that allows you to look up the other party's external IP address in a similar way without separate authentication, thereby ensuring service stability guaranteed.
Also, this library explicitly uses direct TCP socket connections and SSL connections to use IPv4 or IPv6 communication.
Features
- Multiple service providers — Queries multiple free services simultaneously and returns the fastest successful response
- STUN protocol support — Get your public IP via Google STUN servers (UDP-based, faster than HTTP)
- IPv4 and IPv6 — Explicit control over which address family to use
- Timeout support — Per-service timeout to prevent slow services from blocking results
- Consensus API — Query all services and compare results for security-sensitive applications
- Rich IP information — Get country, city, ASN, time zone, and coordinates via IFConfig service
- Wildcard domain — Convert IP addresses to sslip.io wildcard domains
- Dependency Injection — Built-in support for
Microsoft.Extensions.DependencyInjection(net6.0+) - SourceLink enabled — Step into library source code during debugging
Supported Services
| Service | Protocol | Type |
|---|---|---|
CloudflareTraceService |
HTTPS | HTTP |
IpifyService |
HTTPS | HTTP |
SeeIPService |
HTTPS | HTTP |
IP6MeService |
HTTPS | HTTP |
CurlMyIPService |
HTTPS | HTTP |
ICanHazIPService |
HTTPS | HTTP |
IFConfigService |
HTTPS | HTTP (supports rich info) |
GoogleStunService |
UDP | STUN |
GoogleStun1Service ~ GoogleStun4Service |
UDP | STUN |
DistributedGoogleStunService |
UDP | STUN |
Update
v0.7.1
- Multi-targeting:
netstandard2.0,net6.0,net8.0 - Added
ReflectAllAsync/GetConsensusAddressfor consensus-based IP resolution - Added per-service timeout support (
TimeSpanoverloads) - Added
IRichAddressReflectionServiceandIPAddressInfofor detailed geo/network info - Added DI integration (
services.AddReflectionIPAddress()) for net6.0+ - SourceLink enabled for debugging
- Fixed resource leaks in socket/stream handling
- Fixed Regex caching in CloudflareTraceService
- Updated
System.Text.Jsonto 9.0.1 (security fix)
v0.6.1
- Added a new service, CloudflareTraceService, to support Cloudflare Trace protocol to get the public IP address.
v0.6.0
- Starting with v0.6, the library supports STUN protocol to get the public IP address.
- Added a new service, GoogleStunService, to support STUN protocol to get the public IP address.
Requirements
- Requires a platform with .NET Standard 2.0 or later
- Supported .NET Version: .NET Core 2.0+, .NET 5+, .NET Framework 4.6.1+, Mono 5.4+, UWP 10.0.16299+, Unity 2018.1+
How to use
Basic Usage
using ReflectionIPAddress;
var services = new PublicAddressReflectionServices()
.AddService<CloudflareTraceService>()
.AddService<IpifyService>()
.AddService<SeeIPService>()
.AddService<IP6MeService>()
.AddService<CurlMyIPService>()
.AddService<ICanHazIPService>()
.AddService<IFConfigService>()
.AddService<GoogleStunService>();
// Returns the IP address by checking for the fastest successful response among the specified services.
var ipv4Address = await services.ReflectIPv4Async();
var sslipDomain = ipv4Address.ToSSLIPDomain();
Console.WriteLine($"IPv4 Address: {ipv4Address}, SSLIP Domain: {sslipDomain}");
With Timeout
// Each service gets 5 seconds to respond
var ipv4Address = await services.ReflectIPv4Async(TimeSpan.FromSeconds(5));
Consensus-Based Resolution
// Query all services and get the most common result
var allResults = await services.ReflectAllIPv4Async(
perServiceTimeout: TimeSpan.FromSeconds(10));
var consensusIp = allResults.GetConsensusAddress();
Console.WriteLine($"Consensus IP: {consensusIp} (from {allResults.Count} services)");
Rich IP Information
// Get detailed information including country, city, ASN, etc.
var ifconfig = new IFConfigService();
var info = await ifconfig.ReflectDetailedAsync();
Console.WriteLine($"IP: {info.Address}");
Console.WriteLine($"Country: {info.Country} ({info.CountryISO})");
Console.WriteLine($"City: {info.City}");
Console.WriteLine($"ASN: {info.ASN} ({info.ASNOrganization})");
Console.WriteLine($"TimeZone: {info.TimeZone}");
Dependency Injection (net6.0+)
// In Program.cs or Startup.cs
services.AddReflectionIPAddress(); // Registers all built-in services
// Or configure specific services
services.AddReflectionIPAddress(builder =>
{
builder.AddService<CloudflareTraceService>();
builder.AddService<GoogleStunService>();
});
// Then inject and use
public class MyService
{
private readonly PublicAddressReflectionServices _reflectionServices;
public MyService(PublicAddressReflectionServices reflectionServices)
=> _reflectionServices = reflectionServices;
public Task<IPAddress> GetMyIpAsync()
=> _reflectionServices.ReflectIPv4Async();
}
License
This library follows Apache-2.0 license. See LICENSE file for more information.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Text.Json (>= 9.0.1)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.1)
- System.Text.Json (>= 9.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.