【问题标题】:After change packet IP Address using PcapDotNet DLLs also additional value except the packet IP Address changed使用 PcapDotNet DLL 更改数据包 IP 地址后,除了数据包 IP 地址已更改之外,还有其他值
【发布时间】:2014-04-01 07:06:04
【问题描述】:

我在我的应用程序中使用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 Address212.25.99.74 更改为80.81.82.83 后,另外2 个字节发生了变化:从e6 16 更改为7a d6

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

【问题讨论】:

标签: c# packet pcap.net


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2019-01-31
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    相关资源
    最近更新 更多