-2

我在我的应用程序中使用 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,我正在寻找最好的方法。

到目前为止,我只看到这篇没有帮助我的帖子:有没有简单的方法可以从 2 个给定的 IP 地址计算 IP 数量?

4

2 回答 2

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

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

    将一个 IP 号码范围映射到不同的 IP 号码范围

    请注意,10.0.0.1to212.0.0.0是一个非常大的范围。如果您映射10.0.0.170.1.2.3,您将在到达之前用完地址空间212.0.0.0

于 2012-11-08T12:46:59.883 回答
0

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

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

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

你想要做的看起来像:

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

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

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

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

于 2012-11-08T12:17:39.807 回答