c库中是否有类似Wireshark格式的打印数据包的功能(位置然后逐字节打印)

c库中是否有类似Wireshark格式的打印数据包的功能(位置然后逐字节打印),c,networking,printing,wireshark,C,Networking,Printing,Wireshark,C库中是否有类似Wireshark格式的打印数据包的功能(位置然后逐字节打印) 我查阅了他们的代码,他们使用的树对于我的任务来说太复杂了。我也可以从头开始编写我自己的版本,但我不想重新发明轮子,所以我想知道是否有一些编写的代码可以利用。我可以使用lib的任何建议吗 *我拥有的数据在一个无符号整数的缓冲区中 0000 01 02 ff 45 a3 00 90 00 00 00 00 00 00 0010 00 00 00 00 00 00 00 00 00 00 00 00 00 0020 0

C库中是否有类似Wireshark格式的打印数据包的功能(位置然后逐字节打印)

我查阅了他们的代码,他们使用的树对于我的任务来说太复杂了。我也可以从头开始编写我自己的版本,但我不想重新发明轮子,所以我想知道是否有一些编写的代码可以利用。我可以使用lib的任何建议吗

*我拥有的数据在一个无符号整数的缓冲区中

0000 01 02 ff 45 a3 00 90 00  00 00 00 00 00
0010 00 00 00 00 00 00 00 00  00 00 00 00 00
0020 00 00 00 00 00 00 00 00  00 00 00 00 00 ... etc

谢谢

我怀疑libC中是否存在这样的特定功能,但系统相当简单:

for (unsigned k = 0; k < len; k++)
{
    if (k % 0x10 == 0)
        printf("\n%04x", k);
    if (k % 0x4 == 0)
        printf(" ");
    printf(" %02x", buffer[k] & 0xff);
}
for(无符号k=0;k
将第一个模替换为行长度,将第二个模替换为单词长度,就可以了(当然,试着将一个模替换为另一个模的倍数)

编辑:

正如我刚才注意到的,您提到的数据位于无符号整数的缓冲区中,对于这一部分,您必须将其转换为无符号字符缓冲区


当然,你可以用一个无符号的缓冲区,按位移位,每个循环打印四次,但这确实会造成代码的麻烦,不需要它

也许看看hextump?不知道他们是如何做到的,但它可能比wireshark简单得多,因为wireshark解析整个数据包并从中收集大量信息。如果您真的不想从头开始编写,还可以查看GNU源代码中的
od
xd
hexdump
工具的源代码,但它太简单了,我不确定它是否值得……您可能想看看
libpcap