大伟 给出一个IP地址和网络位数 返回这个网段的所有ip地址

19 篇文章 0 订阅
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;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值