/Network/IPAddressExtensions.cs |
@@ -0,0 +1,58 @@ |
/////////////////////////////////////////////////////////////////////////// |
// Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 // |
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, // |
// rights of fair usage, the disclaimer and warranty conditions. // |
/////////////////////////////////////////////////////////////////////////// |
|
using System; |
using System.Net; |
|
namespace wasSharpNET.Network |
{ |
/// <summary> |
/// IPAddress extensions. |
/// </summary> |
/// <remarks>https://blogs.msdn.microsoft.com/knom/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks/</remarks> |
public static class IPAddressExtensions |
{ |
public static IPAddress GetBroadcastAddress(this IPAddress address, IPAddress subnetMask) |
{ |
var ipAdressBytes = address.GetAddressBytes(); |
var subnetMaskBytes = subnetMask.GetAddressBytes(); |
|
if (ipAdressBytes.Length != subnetMaskBytes.Length) |
throw new ArgumentException("Lengths of IP address and subnet mask do not match."); |
|
var broadcastAddress = new byte[ipAdressBytes.Length]; |
for (var i = 0; i < broadcastAddress.Length; i++) |
{ |
broadcastAddress[i] = (byte) (ipAdressBytes[i] | (subnetMaskBytes[i] ^ 255)); |
} |
return new IPAddress(broadcastAddress); |
} |
|
public static IPAddress GetNetworkAddress(this IPAddress address, IPAddress subnetMask) |
{ |
var ipAdressBytes = address.GetAddressBytes(); |
var subnetMaskBytes = subnetMask.GetAddressBytes(); |
|
if (ipAdressBytes.Length != subnetMaskBytes.Length) |
throw new ArgumentException("Lengths of IP address and subnet mask do not match."); |
|
var broadcastAddress = new byte[ipAdressBytes.Length]; |
for (var i = 0; i < broadcastAddress.Length; i++) |
{ |
broadcastAddress[i] = (byte) (ipAdressBytes[i] & subnetMaskBytes[i]); |
} |
return new IPAddress(broadcastAddress); |
} |
|
public static bool IsInSameSubnet(this IPAddress address2, IPAddress address, IPAddress subnetMask) |
{ |
var network1 = address.GetNetworkAddress(subnetMask); |
var network2 = address2.GetNetworkAddress(subnetMask); |
|
return network1.Equals(network2); |
} |
} |
} |