在 vim 中修改十六进制后,Wireshark 不会打开 pcap

Wireshark wont open pcap after modifying hex in vim

我有一个可以在 Wireshark 中打开的 pcap 文件。我用 :%!xxd 以十六进制模式在 Vim 中打开 pcap 文件并修改了一个明文字母,例如AB。但是,在使用 :%!xxd -r 将文件更改回文本模式并尝试在 wireshark 中打开文件后,我得到了(取决于我在 PCAP 中编辑的内容),错误:

  1. 捕获文件似乎在数据包中间被剪短了。
  2. 文件 "capture.pcap" 不是 Wireshark 可以理解的格式的捕获文件。

如果我以十六进制模式回到同一个文件并撤消更改,即 B 回到 A,我肯定会得到上面提到的错误 2。

知道为什么仅在十六进制模式下将数据包修改一个字母会导致 wireshark 以这种方式运行吗?还有为什么修改回原来的状态肯定会破坏pcap文件?

这似乎是 vimxxd -r 命令在末尾附加换行符的问题。只是从十六进制转换然后再返回也会触发这个。

运行 如下:

xxd < 51996055.pcap > 51996055.pcap.before
vim -c ':%!xxd' -c '%!xxd -r' -c ':wq' 51996055.pcap
xxd < 51996055.pcap > 51996055.pcap.after
diff 51996055.pcap.before 51996055.pcap.after

给出以下输出:

59c59
< 000003a0: 3031 3233 3435 3637                      01234567
---
> 000003a0: 3031 3233 3435 3637 0a                   01234567.

在 Wireshark 中打开此文件出现了您遇到的第一个错误。

运行 :%!xxd 本身并没有将 vim 置于十六进制模式,它只是将当前缓冲区替换为通过命令传递的输出 xxd.反之亦然。

some ways to improve vim's hex editting abilities, or you could try another hex specific editor, like hexedit.