从2个给定的IP地址计算IP范围编号

时间:2012-11-08 11:08:39

标签: c# pcap.net

我在我的应用程序中使用pcapdotnet DLL并且我添加的选项之一是在发送pcap文件之前更改数据包IP地址(发送到我的功能2 ip的:旧的IP地址和新的IP地址我想要变化)。

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

例如:

old ip addreee为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,我正在寻找最好的方法。

到目前为止,我只看到这篇帖子没有帮助我:Is there easy way of calculating number of IPs from 2 given IP addresses?

2 个答案:

答案 0 :(得分:1)

  1. IPv4地址由4个字节组成,组合这4个字节可以得到一个简单的32位数字。您可以使用thread you linked中描述的方法轻松获取此数字(我刚注意到@ DarkSquirrel42在我干涉时已经发布了相同的答案)。我在答案中唯一要改变的是返回无符号整数uint):

    public static uint IPToInt(string IP)
    {
         return (uint)IPAddress.NetworkToHostOrder(
             BitConverter.ToInt32(IPAddress.Parse(IP).GetAddressBytes(), 0));
    }
    
  2. 一旦你拥有它,这是一个简单的数学问题:

    Map a range of IP numbers to a different range of IP numbers

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

答案 1 :(得分:0)

“没有帮助”的帖子有你所需要的一切:

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

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

你想做的事情如下:

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

从一个到另一个做一个for循环

将循环变量转换回三点式

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