【问题标题】:C# - How to get netmask by two known ip address?C# - 如何通过两个已知的 IP 地址获取网络掩码?
【发布时间】:2016-12-20 07:44:48
【问题描述】:

我有两个 IP 地址 - firstlast 在范围内。如何获取网络掩码?

示例: 123.45.67.5 - 123.45.67.15 - 已知值

答案: 255.255.255.128 - 我想得到这个值(网络掩码)。

【问题讨论】:

  • 好。当你这样做时让我们知道。
  • 网络掩码是 255.255.255.240,而不是 128,如果你在代码中这样做的话。
  • @jdweng,是的,240。这是我的错误。

标签: c# networking ip netmask


【解决方案1】:

在第一次尝试时得到正确的代码

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);
        }
    }


}

【讨论】:

  • 问题已解决。 @Badiparmagi,查看此评论的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多