我在我的应用程序中使用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?
答案 0 :(得分: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));
}
一旦你拥有它,这是一个简单的数学问题:
请注意,10.0.0.1
到212.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 ...)