随笔,或许会出问题
/// <summary>
/// 根据子网掩码获取该子网最大主机数
/// </summary>
/// <param name="subnetMask">子网掩码</param>
/// <returns></returns>
public static int GetSubnetHostCount(string subnetMask)
{
int number = 0;
byte[] mask = IPAddress.Parse(subnetMask).GetAddressBytes();
for (int i = 0; i < mask.Length; i++)
{
number += (byte)(~mask[i]);
}
return number;
}
/// <summary>
/// 获取广播地址
/// </summary>
public static string GetBroadcast(string ipAddress, string subnetMask)
{
byte[] ip = IPAddress.Parse(ipAddress).GetAddressBytes();
byte[] sub = IPAddress.Parse(subnetMask).GetAddressBytes();
for (int i = 0; i < ip.Length; i++)
{
ip[i] = (byte)((~sub[i]) | ip[i]);
}
return new IPAddress(ip).ToString();
}
/// <summary>
/// 获取网络地址(子网的第一个ip地址)
/// </summary>
public static string GetSubnetNetAddress(string ipAddress, string subnetMask)
{
byte[] ip = IPAddress.Parse(ipAddress).GetAddressBytes();
byte[] sub = IPAddress.Parse(subnetMask).GetAddressBytes();
for (int i = 0; i < ip.Length; i++)
{
ip[i] = (byte)((sub[i]) & ip[i]);
}
return new IPAddress(ip).ToString();
}
/// <summary>
/// 获取同一子网下另一个ip地址,从子网第一个ip开始算起第n个ip
/// </summary>
public static string GetNewIPAddressByIPAddress(string ipAddress, string subnetMask, int n = 10)
{
int count = GetSubnetHostCount(subnetMask);
if (n > count)
{
throw new Exception("");
}
byte[] ip = IPAddress.Parse(ipAddress).GetAddressBytes();
byte[] sub = IPAddress.Parse(subnetMask).GetAddressBytes();
byte[] newIp = new byte[4];
for (int i = 0; i < ip.Length; i++)
{
newIp[i] = (byte)((sub[i]) & ip[i]);
}
for (int i = 0; i < newIp.Length; i++)
{
if (newIp[i] + (byte)n > 255)
{
newIp[i] = (byte)(n - 255 + newIp[i]);
n = n / 255;
}
else
{
newIp[i] += (byte)n;
break;
}
}
if (Enumerable.SequenceEqual(ip, newIp))
{
throw new Exception("");
}
return new IPAddress(newIp).ToString();
}
public static bool IsSameSubnet(string ip1, string ip2, string subnetMask)
{
return GetSubnetNetAddress(ip1, subnetMask) == GetSubnetNetAddress(ip2, subnetMask) ? true : false;
}
public static bool IsIAddress(string ipAddress)
{
try
{
var ip = IPAddress.Parse(ipAddress);
return true;
}
catch
{
return false;
}
}