C# - 如何通过两个已知的ip地址获取网络掩码?

时间:2016-12-20 07:44:49

标签: c# networking ip netmask

我在范围内有两个ipaddress - 第一个最后一个。如何获得网络掩码?

示例: 123.45.67.5 - 123.45.67.15 - 已知值

答案: 255.255.255.128 - 我想获得此值(网络掩码)。

1 个答案:

答案 0 :(得分:0)

第一次尝试时代码正确

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication33
{

    class Program
    {

        static void Main(string[] args)
        {
            string ip1 = "123.45.67.5";
            string ip2 = "123.45.67.15";


            string mask = GetMask(ip1, ip2);

        }

        static string GetMask(string ip1, string ip2)
        {
            int[] ip1Array = ip1.Split(new char[] { '.' }).Select(x => int.Parse(x)).ToArray();
            int[] ip2Array = ip2.Split(new char[] { '.' }).Select(x => int.Parse(x)).ToArray();
            int[] mask = new int[] { 0, 0, 0, 0 };
            Boolean done = false;
            for (int i = 0; i < 4; i++)
            {
                for (int j = 7; j >= 0; j--)
                {
                    if ((ip1Array[i] & (1 << j)) == (ip2Array[i] & (1 << j)))
                    {
                        mask[i] |= (1 << j);
                    }
                    else
                    {
                        done = true;
                        break;
                    }
                }
                if (done) break;
            }



            return string.Join(".", mask);
        }
    }


}