gpt4 book ai didi

Python 2.7 套接字 htons

转载 作者:行者123 更新时间:2023-11-28 17:52:06 29 4
gpt4 key购买 nike

我目前正在研究 python 中的套接字编程,我在使用 socket.htons() 时遇到了一些奇怪的行为......它似乎在每次调用时都会翻转字节。

我正在实现一个简单的 ping 脚本,据我所知,网络字节顺序是大端,而我的系统字节顺序是小端。

如果我在我的 16 位校验和上使用 htons,wireshark 会报告它不正确,但是如果我只是将校验和打包到一个结构中而不使用 htons,wireshark 会确认它是正确的。

这是 wireshark 在使用 htons 时捕获的内容

Checksum: 0xece4 [incorrect, should be 0xe4ec]

这是一个简单的例子......

>>> z = 0xFF00
>>> print z
65280
>>> z = socket.htons(z)
>>> print z
255
>>> z = socket.htons(z)
>>> print z
65280

如有任何想法,我们将不胜感激,希望只是我做错了什么。

编辑:

>>> print sys.byteorder
little

最佳答案

一切看起来都像它应该的那样工作。即使在您的示例中,也会交换 2 个字节,然后再交换回来。如果系统字节顺序与网络相同,那么它是空操作,但您的问题表明网络字节顺序是,而主机是 ,所以交换是它应该做的。

In [1]: a = 0xECE4
In [2]: b = 0xE4EC

In [3]: a
Out[3]: 60644

In [4]: b
Out[4]: 58604

In [5]: socket.htons(a)
Out[5]: 58604

In [6]: socket.htons(b)
Out[6]: 60644

In [7]: socket.htons(a) == b
Out[7]: True

In [8]: socket.htons(b) == a
Out[8]: True

In [9]: hex(socket.htons(a))
Out[9]: '0xe4ec'

In [10]: hex(socket.htons(b))
Out[10]: '0xece4'

In [11]: bin(socket.htons(a))
Out[11]: '0b1110010011101100'

In [12]: bin(socket.htons(b))
Out[12]: '0b1110110011100100'

来自 python socket reference :

socket.htons(x)
Convert 16-bit positive integers from host to network byte order. On machines where the host byte order is the same as network byte order, this is a no-op; otherwise, it performs a 2-byte swap operation.

关于Python 2.7 套接字 htons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088278/

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