首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Pcap.Net修复校验和错误的数据包

使用Pcap.Net修复校验和错误的数据包
EN

Stack Overflow用户
提问于 2015-01-31 21:32:29
回答 1查看 322关注 0票数 0

我有几个Checksum错误的PCAP文件,为了修复这些文件,我使用了以下方法:

代码语言:javascript
运行
复制
private Packet FixBadChecksum(Packet packet)
        {
            try
            {
                EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
                IpV4Layer ipV4Layer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
                DateTime packetTimestamp = packet.Timestamp;
                TransportLayer transportlayer = (TransportLayer)packet.Ethernet.IpV4.Transport.ExtractLayer();
                ILayer datagramLayer = (PayloadLayer)packet.Ethernet.IpV4.Payload.ExtractLayer();
                ipV4Layer.HeaderChecksum = null;

                if (transportlayer == null)
                    return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, datagramLayer);
                else
                {
                    transportlayer.Checksum = null;
                    ILayer payload = packet.Ethernet.IpV4.Transport.Payload.ExtractLayer();
                    return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, transportlayer, payload);
                }
            }
        catch (Exception)
        {
            return packet;
        }
    }

现在举个例子,如果我的包在这个包(有错误的校验和)完成我的函数后是ICMP的,那么它仍然有坏的Checksum,所以我的问题是:我需要检查每个包协议,或者有一个通用的方法来做到这一点?(目前,我的函数在TCPUDP上工作得很好,但是其他协议呢?)

EN

回答 1

Stack Overflow用户

发布于 2015-02-06 20:50:06

引用a similar discussion in Pcap.Net site

您看到的错误校验和是IPv4报头或ICMP内的IPv4报头的校验和。这些校验和很可能是错误的,因为ICMP上的数据只是发送到ICMP返回的数据包的部分副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28252156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档