public static List<string> WeiNet2IPlist(string netStr)
{
List<string> ls = new List<string>();
//我规定传入的netStr网段格式为1.1.1.0/24类似表达式
string netIP = netStr.Split('/')[0];
int netWD = int.Parse(netStr.Split('/')[1]);
//分析netWD网段位数,得出网段地址:(考虑到有的人填写的网络地址不规范,他填入的是任意一个ip加网络位数)
//将netIP转换为2进制表示
string[] netIPSplit = netIP.Split('.');
int ipP0 = int.Parse(netIPSplit[0]);
int ipP1 = int.Parse(netIPSplit[1]);
int ipP2 = int.Parse(netIPSplit[2]);
int ipP3 = int.Parse(netIPSplit[3]);
string ipP0Binary = Convert.ToString(ipP0, 2).PadLeft(8, '0'); //十进制转二进制
string ipP1Binary = Convert.ToString(ipP1, 2).PadLeft(8, '0');
string ipP2Binary = Convert.ToString(ipP2, 2).PadLeft(8, '0');
string ipP3Binary = Convert.ToString(ipP3, 2).PadLeft(8, '0');
//得到网络位2进制
string ipP4Binary = ipP0Binary + ipP1Binary + ipP2Binary + ipP3Binary;
string ipNetBinary = ipP4Binary.Substring(0, netWD);
string ipNetDianFen;
if (netWD < 8)
{
Console.WriteLine("0个点");
ipNetDianFen = ipNetBinary.Substring(0, netWD);
}
else if (netWD < 16)
{
Console.WriteLine("1个点");
ipNetDianFen = ipNetBinary.Substring(0, 8) + "." + ipNetBinary.Substring(8, netWD - 8);
}
else if (netWD < 24)
{
Console.WriteLine("2个点");
ipNetDianFen = ipNetBinary.Substring(0, 8) + "." + ipNetBinary.Substring(8, 8) + "." + ipNetBinary.Substring(15, netWD - 16);
}
else
{
Console.WriteLine("3个点");
ipNetDianFen = ipNetBinary.Substring(0, 8) + "." + ipNetBinary.Substring(8, 8) + "." + ipNetBinary.Substring(16, 8) + "." + ipNetBinary.Substring(23, netWD - 24);
}
Console.WriteLine("网络位:" + ipNetDianFen);
//得到主机位2进制列表
int ipNumber = 32 - netWD;
string ipHostBinary = "";
for (int i = 0; i < ipNumber; i++)
{
ipHostBinary += "1";
}
int ipHostD = Convert.ToInt32(ipHostBinary, 2); //二进制转十进制
List<string> ipHostDianFen = new List<string>();
//这里也需要加入逆向点分的逻辑
if (ipNumber <= 8)
{
Console.WriteLine("0个点");
for (int i = 0; i <= ipHostD; i++)
{
ipHostDianFen.Add(Convert.ToString(i, 2).PadLeft(32 - netWD, '0'));
}
}
else if (ipNumber <= 16)
{
Console.WriteLine("1个点");
for (int i = 0; i <= ipHostD; i++)
{
string Host = Convert.ToString(i, 2).PadLeft(32 - netWD, '0');
string Host3 = Host.Substring(0, 32 - netWD - 8);
string Host4 = Host.Substring(32 - netWD - 8);
ipHostDianFen.Add(Host3 + "." + Host4);
}
}
else if (ipNumber <= 24)
{
Console.WriteLine("2个点");
for (int i = 0; i <= ipHostD; i++)
{
string Host = Convert.ToString(i, 2).PadLeft(32 - netWD, '0');
string Host2 = Host.Substring(0, 32 - netWD - 8 - 8);
string Host3 = Host.Substring(32 - netWD - 8 - 8, 8);
string Host4 = Host.Substring(32 - netWD - 8);
ipHostDianFen.Add(Host2 + "." + Host3 + "." + Host4);
}
}
else
{
Console.WriteLine("3个点");
for (int i = 0; i <= ipHostD; i++)
{
string Host = Convert.ToString(i, 2).PadLeft(32 - netWD, '0');
string Host1 = Host.Substring(0, 32 - netWD - 8 - 8 - 8);
string Host2 = Host.Substring(32 - netWD - 8 - 8 - 8, 8);
string Host3 = Host.Substring(32 - netWD - 8 - 8, 8);
string Host4 = Host.Substring(32 - netWD - 8);
ipHostDianFen.Add(Host1 + "." + Host2 + "." + Host3 + "." + Host4);
}
}
//列出将要扫描的所有2进制表示的IP列表(即此网段下的所有ip列表)
//将ip列表转换为10进制返回
foreach (string HostIP in ipHostDianFen)
{
string ip = ipNetDianFen + HostIP;
string ip0 = Convert.ToInt32(ip.Split('.')[0], 2).ToString();
string ip1 = Convert.ToInt32(ip.Split('.')[1], 2).ToString();
string ip2 = Convert.ToInt32(ip.Split('.')[2], 2).ToString();
string ip3 = Convert.ToInt32(ip.Split('.')[3], 2).ToString();
ls.Add(ip0+"."+ip1+"."+ip2+"."+ip3);
}
return ls;
}
大伟 给出一个IP地址和网络位数 返回这个网段的所有ip地址
最新推荐文章于 2022-08-06 12:59:22 发布