wireshark捕捉ip数据遇到的问题Header checksum: 0x0000

本文详细介绍了使用Wireshark抓取UDP数据包时出现Headerchecksum错误的问题,分析了可能的原因,并提供了解决方案。通过修改网卡驱动的高级配置,关闭IPv4硬件校验和功能,可以解决Wireshark捕获的UDP数据包的IP头校验错误问题。


wireshark捕捉ip数据遇到的问题Header checksum: 0x0000 [incorrect, should be...(maybe caused by “ip)

调程序时需要分析实验板与计算机之间的数据传输,用到网络抓包软件。使用wireshark抓取UDP报时总是出现Header checksum: 0x0000 [incorrect, should be...(maybe caused by “ip),想了半天找不出到底哪里出了问题。实验板给计算机发的包没有这个问题,计算机返回的包出现这种错误,估计问题可能处在计算机上。

Google+百度了半天总算找到了有用的帖子,问题宣告解决,下面直接把别人的贴过来:

Wireshark捕获的outgoing TCP包的IP header checksum error问题

标题其实描述得不是很到位,所以重述一遍问题:

使用Wireshark/Ethereal等抓包工具在本机抓包,会发现发出的TCP包被标记为IP头校验错误。
在Wireshark for win上的表现,往往是header checksum == 0x0000。
该问题在xp、win7均可能存在 。

这个问题困扰我好久,怀疑过是wireshark的bug,但是想想也不可能,也怀疑过是windows的问题,不过从实际的上层应用的表现来看,似乎这个问题又没有引发任何影响。之前也使用ip header checksum error 关键词在Google搜索过,相关帖子还是有的,不过都没有建设性的答案。今天人品爆发,竟然搜到了答案,赶快记录下来:

http://www.netexpert.cn/viewthread.php?tid=4850
该文章是05年的,汗一个,那时我还在泡妞和逃课。

这里总结一下原因和解决方案:

网卡驱动的高级配置中,一般有两项叫做Rx Checksum Offload和Tx Checksum Offload
以win7为例,可以看下图所示:


其中的“IPv4硬件校验和”即对应了这两个选项,它的可选项有“Rx & Tx 开启、Rx开启、Tx开启和关闭”四个。
默认的配置往往是 Rx & Tx 开启。它表示网卡会帮应用进行计算ip头的checksum字段,这样一来,操作系统的ip协议栈无须进行额外的checksum运算,它只需封装好ip数据报后甩给网卡即可。甩给网卡的原始ip报文的checksum字段值,原则上是无意义的,即随机的,但是根据windows上的表现来看,这个值一直是固定0x0000。

猜测一下Wireshark的抓包原理,大概是利用Pcap提供的某种机制,把发给网卡的数据给截获了一份,这样一来,如果操作系统协议栈中出来的ip包的checksum尚未被正确设置,Wireshark完全不知道该数据还会被网卡进行修正,于是它就报错了。

至此,如何使得Wireshark不再抱怨ip头校验错误,答案已经显而易见了,直接选择关闭“IPv4硬件校验和”选项即可(选择“Rx开启”应该也是可行的,这样就相当于关闭了Tx的硬件校验和功能。但是我没有试验过)。

//======================================

按照上面的方法改了之后果然就没有问题了,顶一个。

Header checksum: 0x0000 [incorrect, should be...(maybe caused by “ip checksum off load?”)]

原文:http://blog.sina.com.cn/s/blog_65db99840100kmzp.html

wireshark抓自己发出去的包的时候碰到这个问题,以为是程序的问题,可是接收方却说收到的包一点问题都没有。奇怪了,到网上一搜,长见识了。

http://forums.whirlpool.net.au/forum-replies-archive.cfm/1265837.html

a lot of modern network cards use TCP/IP checksum offloading, in which case Windows doesn't bother generating a checksum for each outbound packet and the network card adds them just before transmission.

This reduces the amount of work that the computer's CPU has to do, but the problem is that Wireshark can only intercept packets at the OS level, and hence thinks the checksums are invalid (when in fact the problem is that they haven't been added yet).

大意就是操作系统偷懒,把计算校验和的工作扔给了网卡,网卡在包发出去才加上校验和,wireshark在OS层抓包的时候,包的校验和还没被添加,是0x0000,于是认为header checksum incorrect。

想让OS自己加校验和,怎么办呢?

http://support.microsoft.com/kb/904946

要变通解决此问题,关闭将卸载网络适配器上的校验和。若要这样做,请按照下列步骤操作:

1.     单击 开始、单击 运行,键入 regedit,然后单击 确定

2.     找到并单击以下注册表子项: 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3.     在右窗格中确保DisableTaskOffload 注册表项存在。如果此项不存在,请按照下列步骤以将项添加操作: 

a.       在 编辑 菜单上指向 新建,然后单击 DWORD 值

b.       键入 DisableTaskOffload,然后按ENTER 键。

4.     单击 DisableTaskOffload

5.     在 编辑 菜单上单击 修改

6.     在 数值数据 框中键入 1,然后按ENTER 键。

7.     退出注册表编辑器。

可是,我在win7下改了也没用,莫非要重启机器?不懂ing

 

果然,重启后正常了

<think>好的,我现在需要帮助用户了解Wireshark抓包时捕获的IP头部结构。首先,我得回忆一下IP头部的标准结构,然后结合Wireshark的实际展示方式来解释。用户可能不太熟悉网络协议,所以需要用简单易懂的语言,同时确保信息的准确性。 首先,IP头部的各个字段是必须的。根据IPv4的标准,头部通常包括版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部校验和、源地址、目的地址,可能还有选项。每个字段的长度和用途都需要明确说明。例如,版本是4位,表示IPv4,首部长度也是4位,但通常以32位字为单位,所以需要乘以4得到字节数。 接下来,用户可能想知道在Wireshark中这些字段是如何展示的。比如,Wireshark可能会将某些字段合并显示,或者用更直观的名称,比如“Differentiated Services Field”代替“服务类型”。这时候需要结合具体的抓包截图或示例来说明,但用户可能没有截图,所以用文字描述清楚每个字段的位置和常见值会更合适。 然后,考虑到用户可能对某些术语不熟悉,比如“生存时间(TTL)”和“协议字段”的作用,需要进一步解释。例如,TTL用于防止数据包无限循环,每经过一个路由器减1,当为0时丢弃。协议字段指出上层协议,比如6是TCP,17是UDP,这些常见值可以举例说明,帮助用户理解。 另外,首部校验和的计算方式也是一个关键点,需要说明它是如何计算的,以及Wireshark如何验证它是否正确。如果校验和不匹配,Wireshark可能会标记为错误,这对于用户排查网络问题很有帮助。 用户可能还会有疑问,比如IP头部是否有可选字段,这时候需要说明选项字段的存在,但通常很少使用,大部分情况下头部长度是20字节。此外,分片相关的字段(标识、标志、片偏移)可能在抓包中出现的频率,以及它们的作用场景,比如当数据包超过MTU时会分片,这时候这些字段就派上用场了。 最后,为了确保用户能够实际应用这些知识,可以建议他们在Wireshark中过滤IPv4流量,查看具体的数据包,并对照各个字段进行分析。同时,生成的相关问题要覆盖用户可能进一步想了解的内容,比如IPv6的结构、如何过滤IP流量、分片机制的影响等,这样能帮助他们深入学习和解决问题。 需要检查是否有引用站内内容,根据提供的引用,可能引用[^1]提到DNS traceroute的包构造,引用[^2][^3]是关于SDP的消息示例,似乎和IP头部结构无关,所以可能不需要在回答中引用这些内容。因此,回答中将不包含引用标识,确保符合用户的要求。</think>### Wireshark捕获的IP头部结构解析 IPv4头部结构在Wireshark中显示为以下字段(总长度20字节,若含选项则为最长60字节),各字段详细说明如下: 1. **版本(Version)** - 4位,固定为`4`,表示IPv4协议 - Wireshark显示示例:`Version: 4` 2. **首部长度(IHL)** - 4位,单位为32位字(需×4转为字节) - 例如:`Header Length: 5 (20 bytes)` 3. **服务类型(Type of Service, ToS)** - 8位,包含优先级、延迟、吞吐量等QoS参数 - Wireshark可能显示为`Differentiated Services Field`或`Explicit Congestion Notification` 4. **总长度(Total Length)** - 16位,表示整个IP数据包(头部+数据)的字节数 - 示例:`Total Length: 1500` 5. **标识(Identification)** - 16位唯一值,用于分片重组 - 分片数据包中相同标识表示同属一个原始包 6. **标志(Flags)** - 3位,控制分片行为: - 第1位:保留(必须为0) - 第2位(DF):禁止分片 - 第3位(MF):更多分片(非最后一个分片时为1) - Wireshark显示示例:`Flags: 0x02 (Don't Fragment)` 7. **片偏移(Fragment Offset)** - 13位,表示当前分片在原始包中的位置(单位:8字节) - 用于重组分片顺序 8. **生存时间(Time to Live, TTL)** - 8位,每经一个路由器减1,归零则丢弃 - 示例:`TTL: 64` 9. **协议(Protocol)** - 8位,指出上层协议类型: - `6`:TCP,`17`:UDP,`1`:ICMP - Wireshark自动解析协议名称,如`Protocol: TCP` 10. **首部校验和(Header Checksum)** - 16位,用于验证头部完整性 - Wireshark会标注校验结果:`Checksum: 0x1234 [correct]` 11. **源地址与目的地址(Source/Destination Address)** - 各32位,格式为IPv4点分十进制(如`192.168.1.1`) 12. **选项(Options,可选)** - 可变长度,用于扩展功能(如时间戳、路由记录) --- ### Wireshark中的实际显示示例 在抓包界面中,IP头部会以树状结构展开,例如: ``` Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8 Version: 4 Header Length: 20 bytes TTL: 64 Protocol: UDP (17) Checksum: 0xabcd [valid] Source Address: 192.168.1.2 Destination Address: 8.8.8.8 ``` --- ### 操作建议 1. **过滤IPv4流量**:在Wireshark输入`ip`过滤所有IPv4数据包 2. **查看分片细节**:搜索`ip.flags.mf == 1`定位分片数据包 3. **校验和分析**:右键IP头部选择`Validate Checksum`验证校验和 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值