62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
using System.Net;
|
|
using System.Net.NetworkInformation;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Pilz.Networking;
|
|
|
|
public static class NetworkFeatures
|
|
{
|
|
public static IPAddress GetIPFromHost(string hostName)
|
|
{
|
|
return Dns.GetHostAddresses(hostName).FirstOrDefault(n => n.AddressFamily == AddressFamily.InterNetwork);
|
|
}
|
|
|
|
public static object GetHostFromIP(string ip)
|
|
{
|
|
return Dns.GetHostEntry(ip)?.HostName;
|
|
}
|
|
|
|
public static UnicastIPAddressInformation GetLocalIPInformations()
|
|
{
|
|
UnicastIPAddressInformation addr = null;
|
|
|
|
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
|
|
{
|
|
if (addr is null && adapter.OperationalStatus == OperationalStatus.Up && adapter.NetworkInterfaceType != NetworkInterfaceType.Tunnel && adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
|
|
{
|
|
foreach (UnicastIPAddressInformation uni in adapter.GetIPProperties().UnicastAddresses)
|
|
{
|
|
if (addr is null && uni.Address.AddressFamily == AddressFamily.InterNetwork)
|
|
addr = uni;
|
|
}
|
|
}
|
|
}
|
|
|
|
return addr;
|
|
}
|
|
|
|
public static IPAddress GetLocalIPAddress()
|
|
{
|
|
return GetLocalIPInformations()?.Address;
|
|
}
|
|
|
|
public static IPAddress GetLocalIPv4Mask()
|
|
{
|
|
return GetLocalIPInformations()?.IPv4Mask;
|
|
}
|
|
|
|
public static IPAddress GetLocalBoradcastIP(UnicastIPAddressInformation ipInfo)
|
|
{
|
|
IPAddress ip = null;
|
|
byte[] myIPBytes = ipInfo.Address.GetAddressBytes();
|
|
byte[] subnetBytes = ipInfo.IPv4Mask.GetAddressBytes();
|
|
byte[] broadcastBytes = new byte[myIPBytes.Length];
|
|
|
|
for (int i = 0, loopTo = subnetBytes.Length - 1; i <= loopTo; i++)
|
|
broadcastBytes[i] = (byte)(myIPBytes[i] | ~subnetBytes[i]);
|
|
|
|
ip = new IPAddress(broadcastBytes);
|
|
|
|
return ip;
|
|
}
|
|
} |