1

我想使用原始套接字编写一个接收程序,它将使用 recvfrom() 接收数据包,所以我想检查数据包的 IP 标头和 tcp 标头

当程序发送数据包时,它会注意网络字节顺序和主机字节顺序问题但是对于我的接收程序,当我使用recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);

数据包中数据的字节顺序是什么?它是网络字节顺序还是主机字节顺序?以及如何处理?

对于这个例子 http://www.binarytides.com/packet-sniffer-code-in-c-using-linux-sockets-bsd/

作者在处理接收到的数据包时没有考虑字节序问题,为什么呢?谢谢!

4

1 回答 1

1

数据包中数据的字节顺序是什么?

约定是网络顺序是大端顺序。但是,您收到的数据就是您发送的数据:没有人会神奇地修改“整数”来改变它们的字节顺序。

以及如何处理?

  • 在解释整数数据时使用ntohlntohs
  • 请注意,位域字节序不是标准的

作者在处理接收到的数据包时没有考虑字节序问题,

您发布的链接显示ntohsntohl调用。作者至少在某种程度上确实处理了字节序。

于 2013-03-13T18:53:28.967 回答