C# 从2个给定IP地址计算IP范围数

C# 从2个给定IP地址计算IP范围数,c#,pcap.net,C#,Pcap.net,我在应用程序中使用pcapdotnet DLL,我添加的选项之一是在发送pcap文件之前更改数据包ip地址(发送到我的函数2 ip:旧ip地址和我要更改的新ip地址) 现在我想添加另一个选项,可以改变ip地址的范围 例如: 旧ip地址为70.1.2.3,范围为10.0.0.1至212.0.0.0 因此,ip地址70.1.2.3将更改为10.0.0.1,而不是10.0.0.2直到70.1.2.3,我正在寻找最好的方法 到目前为止,我只看到这篇没有帮助我的帖子:那篇“没有帮助”的帖子已经满足了你的所

我在应用程序中使用pcapdotnet DLL,我添加的选项之一是在发送pcap文件之前更改数据包ip地址(发送到我的函数2 ip:旧ip地址和我要更改的新ip地址)

现在我想添加另一个选项,可以改变ip地址的范围

例如:

旧ip地址为70.1.2.3,范围为10.0.0.1至212.0.0.0

因此,ip地址70.1.2.3将更改为10.0.0.1,而不是10.0.0.2直到70.1.2.3,我正在寻找最好的方法

到目前为止,我只看到这篇没有帮助我的帖子:

那篇“没有帮助”的帖子已经满足了你的所有需要:

它向您展示了如何将三点形式的IPv4转换为Int32(这是因为IPv4地址的大小正好是32位)

从那里你可以简单地开始计数

您要执行的操作如下所示:

将IP范围转换为2个32位整数

执行从一个到另一个的for循环

将循环变量转换回三点形式

(可选)检查不应使用的IP并跳过它们(在无类IP范围的情况下,您可能希望排除网络或广播地址在类完整范围内的IP…)

  • IPv4地址由4个字节组成,将这4个字节组合在一起可以得到一个普通的32位数字。您可以使用中描述的方法轻松获得这个数字(我刚刚注意到@DarkSquirrel42在我闲聊时已经发布了相同的答案)。在这个答案中,我唯一要改变的是返回一个无符号整数(
    uint
    ):

  • 一旦你有了它,这是一个简单的数学问题:

    请注意,
    10.0.0.1
    212.0.0.0
    的范围非常大。如果将
    10.0.0.1
    映射到
    70.1.2.3
    ,则在到达
    212.0.0.0
    之前,您的地址空间将用完


  • ? 你在寻找什么样的“最佳”?演出可读性?简洁?还有什么?我想我发现最好的是:但是在创建类对象并运行GetIPRange之后,我不知道为什么我的代码没有进入这个类你说的“我的代码没有进入这个类”是什么意思?你能在你的问题中写些代码吗?RangeFinder range=new RangeFinder();和range.GetIPRange(oldIP,newIP);没有带我进教室,没发生什么事,我还是不明白。你认为会发生什么?我不明白“引入类”是什么意思?我正在使用调试器进行检查,并在类对象创建范围之后进行检查;没有做什么,它应该进入GetIPRange函数,但它没有我尝试过它,你是对的,顺便问一下,在得到IP的数量后,什么是确保我的IP保持正确的最好方法?(192.168.0.255之后是192.168.1.0,而不是192.168.0.256)@user1269592:DarkSquirrel说需要将IP转换为整数,然后循环整数(增加这些数字,而不是IP),然后将整数变量转换回三点形式。
    public static uint IPToInt(string IP)
    {
         return (uint)IPAddress.NetworkToHostOrder(
             BitConverter.ToInt32(IPAddress.Parse(IP).GetAddressBytes(), 0));
    }