0

PcapDotNet在我的应用程序中使用 DLL,并且在更改数据包IP Address时,似乎除了IP Address.

这就是我改变的方式IP Address

private Packet ChangePacketIp(Packet packet, IpV4Address oldIpAddress, IpV4Address newIpAddress)
{
    try
    {
        EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
        IpV4Layer ipV4Layer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
        IpV4Datagram ipV4Datagram = packet.Ethernet.IpV4;
        ILayer layer = ipV4Datagram.ExtractLayer();
        DateTime packetTimestamp = packet.Timestamp;
        ILayer payload = packet.Ethernet.IpV4.Payload.ExtractLayer();

        if (packet.Ethernet.IpV4.Source == oldIpAddress)
        {
            ipV4Layer.Source = newIpAddress;
            ipV4Layer.HeaderChecksum = null;
        }
        else if (packet.Ethernet.IpV4.Destination == oldIpAddress)
        {
            ipV4Layer.CurrentDestination = newIpAddress;
            ipV4Layer.HeaderChecksum = null;
        }

        return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, payload);
    }
    catch (Exception)
    {
        return null;
    }
}

例如,原始数据包是:

http://i.stack.imgur.com/vEWuS.jpg

而IP地址改变后的新数据包:

http://s8.postimg.org/4o78hzmyt/New_Packet.jpg

正如您在将IP Addressfrom 212.25.99.74into更改后看到的那样80.81.82.83,另外 2 个字节发生了变化: from e6 16into7a d6

这是更改IPv4数据包的方法还是它的错误?这 2 个字节是什么?

4

1 回答 1

1

您是否知道 IP 数据包具有必须重新计算以匹配新 IP 地址的校验和?http://en.wikipedia.org/wiki/IPv4_header_checksum

于 2014-02-28T10:32:55.160 回答