gpt4 book ai didi

在 C 中解析网络数据包的正确方法

转载 作者:太空狗 更新时间:2023-10-29 17:26:12 24 4
gpt4 key购买 nike

(如果我不能正确提出问题,请原谅。英语不是我的主要语言。)

我正在尝试解析 SyncE ESMC 数据包。是以太网慢速协议(protocol)包。

方法一:为了解析这个数据包,我使用了类似于已经完成的逐字节方法 here .

方法二:解析数据包的其他方法是定义一个“结构”来表示整个数据包并访问各个字段以检索特定偏移处的值。然而,在这种方法中,结构填充和对齐可能会出现(我不确定)但在 Linux 上,各种数据包 header 以结构形式定义,例如ip.h 中的 iphdr。 IP 数据包(缓冲区)可以类型转换为“iphdr”以检索 ip header 字段,因此它一定可以正常工作。

哪种方法更适合用 C 语言解析网络数据包?

在通过方法 2 解析数据包时,结构填充和对齐是否有任何区别?如果是,Linux header 是如何克服这个问题的?

最佳答案

方法 1 最适合可移植性。例如,它允许您安全地避免未对齐的访问。特别是,如果您的机器是小端的,这种方法可以让您非常轻松地处理字节交换。

方法 2 有时很方便,而且通常可以更快地编写代码。如果结构填充妨碍您,您的编译器可能会提供标志或属性(如 __attribute__((__packed__))#pragma pack)来解决它。然而,如果你有一台小端机器,你仍然需要在各处进行字节交换字段。

关于在 C 中解析网络数据包的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14634027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com