检查校验和(Header checksum)

WireShark从1.2以后的版本开始,默认不打开IP、TCP、UDP协议的校验和检查了

导致有时看不出来数据包的校验和是否正确,界面显示“validation disabled”(即禁止校验)

有时候TCP和UDP校验和会由网卡计算,因此wireshark抓到的本机发送的TCP/UDP数据包的校验和都是错误的,这样检验校验和根本没有意义。所以Wireshark不自动做TCP和UDP校验和的校验

如果要校验校验和:可以在edit->preference->protocols中选择相应的TCP、UDP、IP协议,在相应的地方打钩(Validate the ….)。操作截图如下:

image.png

如果校验错误会有红色提示
image.png

校验和显示为:Header checksum: 0x0000

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自己加校验和,怎么办呢?

:::info WCYTIP:也就是软件层面不想计算这个,想交给网卡来处理,所以一些软件直接抓的包校验和都是0,也是因为这个所以Wirshark一般不默认启用校验和检测,如果启用的话基本都是要报错的 :::

解决方案1
关闭网卡的硬件校验和,如下:
image.png
解决方案2
修改注册表

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

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

  1. 单击 开始、单击 运行,键入 regedit,然后单击 确定
  2. 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 在右窗格中确保 DisableTaskOffload 注册表项存在。如果此项不存在,请按照下列步骤以将项添加操作:
  4. 编辑 菜单上指向 新建,然后单击 DWORD 值。
  5. 键入 DisableTaskOffload,然后按 ENTER 键。
  6. 单击 DisableTaskOffload
  7. 编辑 菜单上单击 修改
  8. 数值数据 框中键入 1,然后按 ENTER 键。
  9. 退出注册表编辑器。

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