【问题标题】:what is the byte order of received packets接收数据包的字节顺序是什么
【发布时间】:2013-03-14 02:55:25
【问题描述】:

我想用原始套接字编写一个接收程序 它将使用 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/

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

【问题讨论】:

    标签: network-programming


    【解决方案1】:

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

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

    又该如何处理?

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

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

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

    【讨论】:

    • 但是链接中作者没有考虑到订单问题,为什么?
    • 你的意思是作者的程序存在一些问题,因为他没有仔细考虑字节序问题?
    • @user138126 我没有阅读整个代码。我只是提到了作者处理字节顺序,至少在某种程度上。代码很可能是完全正确的。
    • 我不明白这一点:没有人会神奇地修改“整数”来改变它们的字节顺序。
    • 如果我不知道发送方程序,不知道发送数据的字节顺序,我还能用ntohs和ntohl吗?也就是说,即使字节序是主机字节序,我仍然可以使用这两个函数吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多