Skip to content

Commit

Permalink
Fix: AddressFamilyNotSupported error when server does not have IPv6
Browse files Browse the repository at this point in the history
  • Loading branch information
trudyhood committed Jul 15, 2024
1 parent bb9910f commit 8589867
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 14 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Upcoming
### Server
* Fix: AddressFamilyNotSupported error when server does not have IPv6

# v4.6.544
### Client
* Fix: App Filter does not work when no app is selected
Expand Down
4 changes: 2 additions & 2 deletions Pub/PubVersion.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"Version": "4.6.544",
"Version": "4.6.545",
"BumpTime": "2024-07-15T05:08:21.3508028Z",
"Prerelease": false,
"Prerelease": true,
"DeprecatedVersion": "4.0.00"
}
11 changes: 9 additions & 2 deletions VpnHood.Common/Net/IPAddressUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,15 @@ public static async Task<IPAddress[]> GetPublicIpAddresses()

public static Task<IPAddress?> GetPrivateIpAddress(AddressFamily addressFamily)
{
using var udpClient = new UdpClient(addressFamily);
return GetPrivateIpAddress(udpClient);
try
{
using var udpClient = new UdpClient(addressFamily); // it may throw exception
return GetPrivateIpAddress(udpClient);
}
catch
{
return Task.FromResult<IPAddress?>(null);
}
}

public static Task<IPAddress?> GetPrivateIpAddress(UdpClient udpClient)
Expand Down
2 changes: 1 addition & 1 deletion VpnHood.Server.App.Net/VpnHood.Server.App.Net.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<PackageIcon>VpnHood.png</PackageIcon>
<PackageProjectUrl>https://github.com/vpnhood/vpnhood</PackageProjectUrl>
<RepositoryUrl>https://github.com/vpnhood/vpnhood</RepositoryUrl>
<Version>4.6.544</Version>
<Version>4.6.545</Version>
<FileVersion>$([System.DateTime]::Now.ToString("yyyy.M.d.HHmm"))</FileVersion>
<AssemblyName>VpnHoodServer</AssemblyName>
</PropertyGroup>
Expand Down
24 changes: 15 additions & 9 deletions VpnHood.Server/VpnHoodServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,26 @@ private async Task Configure()
{
try
{
VhLogger.Instance.LogInformation("Configuring by the Access Manager...");
State = ServerState.Configuring;

// get server info
VhLogger.Instance.LogInformation("Configuring by the Access Manager...");
var providerSystemInfo = SystemInfoProvider.GetSystemInfo();
VhLogger.Instance.LogTrace("Finding free EndPoints...");
var freeUdpPortV4 = ServerUtil.GetFreeUdpPort(AddressFamily.InterNetwork, null);
var freeUdpPortV6 = ServerUtil.GetFreeUdpPort(AddressFamily.InterNetworkV6, freeUdpPortV4);

var serverInfo = new ServerInfo
{
VhLogger.Instance.LogTrace("Finding public addresses...");
var privateIpAddresses = await IPAddressUtil.GetPrivateIpAddresses().VhConfigureAwait();

VhLogger.Instance.LogTrace("Finding public addresses..., PublicIpDiscovery: {PublicIpDiscovery}", _publicIpDiscovery);
var publicIpAddresses = _publicIpDiscovery ? await IPAddressUtil.GetPublicIpAddresses().VhConfigureAwait() : [];

var providerSystemInfo = SystemInfoProvider.GetSystemInfo();
var serverInfo = new ServerInfo {
EnvironmentVersion = Environment.Version,
Version = ServerVersion,
PrivateIpAddresses = await IPAddressUtil.GetPrivateIpAddresses().VhConfigureAwait(),
PublicIpAddresses = _publicIpDiscovery ? await IPAddressUtil.GetPublicIpAddresses().VhConfigureAwait() : [],
PrivateIpAddresses = privateIpAddresses,
PublicIpAddresses = publicIpAddresses,
Status = GetStatus(),
MachineName = Environment.MachineName,
OsInfo = providerSystemInfo.OsInfo,
Expand All @@ -142,9 +148,9 @@ private async Task Configure()
FreeUdpPortV4 = freeUdpPortV4,
FreeUdpPortV6 = freeUdpPortV6
};

var publicIpV4 = serverInfo.PublicIpAddresses.SingleOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
var publicIpV6 = serverInfo.PublicIpAddresses.SingleOrDefault(x => x.AddressFamily == AddressFamily.InterNetworkV6);
var publicIpV4 = serverInfo.PublicIpAddresses.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
var publicIpV6 = serverInfo.PublicIpAddresses.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetworkV6);
var isIpV6Supported = publicIpV6 != null || await IPAddressUtil.IsIpv6Supported().VhConfigureAwait();
VhLogger.Instance.LogInformation("Public IPv4: {IPv4}, Public IPv6: {IpV6}, IsV6Supported: {IsV6Supported}",
VhLogger.Format(publicIpV4), VhLogger.Format(publicIpV6), isIpV6Supported);
Expand Down

0 comments on commit 8589867

Please sign in to comment.