feat: detect an agent's public IPv4 and IPv6 addresses automatically, manual values still win [CI]
ci/woodpecker/push/main-amd64-build Pipeline was successful
ci/woodpecker/push/main-amd64-build Pipeline was successful
This commit is contained in:
1 parent
9966ea5d63
commit
f03988d68b
26 files changed
+517
-33
No files matched your search
@@ -0,0 +1,36 @@
|
||||
using MoShiro.Measurement;
|
||||
|
||||
namespace MoShiro.Measurement.Tests;
|
||||
|
||||
public sealed class LocalAddressesTests
|
||||
{
|
||||
[Fact]
|
||||
public void Linux_TemporaryTentativeDeprecatedAndFailedAddressesAreNotUsable()
|
||||
{
|
||||
const string text =
|
||||
"2409c0d0000000000000000000000001 02 40 00 80 eth0\n" + // 稳定地址:可用
|
||||
"2409c0d0000000000000000000000002 02 40 00 01 eth0\n" + // 临时(隐私)地址
|
||||
"2409c0d0000000000000000000000003 02 40 00 40 eth0\n" + // tentative
|
||||
"2409c0d0000000000000000000000004 02 40 00 20 eth0\n" + // deprecated
|
||||
"2409c0d0000000000000000000000005 02 40 00 08 eth0\n"; // dad 失败
|
||||
HashSet<string> unusable = LocalAddresses.UnusableIpv6(text);
|
||||
Assert.DoesNotContain("2409:c0d0::1", unusable);
|
||||
Assert.Contains("2409:c0d0::2", unusable);
|
||||
Assert.Contains("2409:c0d0::3", unusable);
|
||||
Assert.Contains("2409:c0d0::4", unusable);
|
||||
Assert.Contains("2409:c0d0::5", unusable);
|
||||
Assert.Empty(LocalAddresses.UnusableIpv6(null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sample_NeverReturnsLoopbackPrivateOrLinkLocalAddresses()
|
||||
{
|
||||
foreach (string text in LocalAddresses.Sample())
|
||||
{
|
||||
var address = System.Net.IPAddress.Parse(text);
|
||||
Assert.True(address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork
|
||||
? MoShiro.Protocol.PublicAddress.IsPublicIpv4(address)
|
||||
: MoShiro.Protocol.PublicAddress.IsGlobalIpv6(address));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.Net;
|
||||
using MoShiro.Protocol;
|
||||
|
||||
namespace MoShiro.Protocol.Tests;
|
||||
|
||||
public sealed class PublicAddressTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("8.8.8.8", true)]
|
||||
[InlineData("23.176.40.145", true)]
|
||||
[InlineData("10.1.2.3", false)]
|
||||
[InlineData("172.16.0.1", false)]
|
||||
[InlineData("172.32.0.1", true)]
|
||||
[InlineData("192.168.2.162", false)]
|
||||
[InlineData("100.64.0.1", false)]
|
||||
[InlineData("169.254.1.1", false)]
|
||||
[InlineData("127.0.0.1", false)]
|
||||
[InlineData("203.0.113.10", false)]
|
||||
[InlineData("224.0.0.1", false)]
|
||||
public void Ipv4_OnlyPublicAddressesCountAsReachable(string text, bool expected) =>
|
||||
Assert.Equal(expected, PublicAddress.IsPublicIpv4(IPAddress.Parse(text)));
|
||||
|
||||
[Theory]
|
||||
[InlineData("2409:8a55:6c45:62d1::69d", true)]
|
||||
[InlineData("2606:4700:4700::1111", true)]
|
||||
[InlineData("fd00::1", false)]
|
||||
[InlineData("fe80::1", false)]
|
||||
[InlineData("::1", false)]
|
||||
[InlineData("2001:db8::1", false)]
|
||||
[InlineData("2002:c000:204::1", false)]
|
||||
[InlineData("2001:0:4136:e378::1", false)]
|
||||
[InlineData("::ffff:8.8.8.8", false)]
|
||||
public void Ipv6_OnlyGlobalUnicastCountsAsReachable(string text, bool expected) =>
|
||||
Assert.Equal(expected, PublicAddress.IsGlobalIpv6(IPAddress.Parse(text)));
|
||||
}
|
||||
Reference in new issue
Block a user