UDP跟踪器字节顺序翻转取决于响应状态

时间:2014-03-28 18:15:18

标签: python sockets udp bittorrent endianness

我正在尝试在python中编写一个bittorrent客户端(用于我自己的教育)。我的代码正在努力向UDP跟踪器发送请求,但我得到的回复奇怪,对我来说没有意义。我使用tcpdump来查看原始数据包,似乎跟踪器正在改变其响应的字节顺序。有时它们似乎是大端序(这是我的预期),但错误响应似乎部分是小端序。我知道这听起来很疯狂,所以我怀疑我一定会错过一些东西,但我不能为我的生活找出什么。

这是一个很好的回应:

11:57:50.676956 IP 31.172.63.252.80 > 192.168.1.4.52404: UDP, length 20
    0x0000:  4500 0030 0000 4000 3011 2969 1fac 3ffc  E..0..@.0.)i..?.
    0x0010:  c0a8 0104 0050 ccb4 001c bf4e 0000 0002  .....P.....N....
    0x0020:  2134 0ba3 0000 1ebf 0000 000a 0000 066c  !4.............l

您可以在第三行的末尾看到,action字段等于000 0002,这是按照协议预期的大端序的预期“刮擦/成功”值。 / p>

这是事情变得奇怪的地方:

11:58:22.913378 IP 31.172.63.253.80 > 192.168.1.4.46346: UDP, length 33
    0x0000:  4500 003d 0000 4000 3011 295b 1fac 3ffd  E..=..@.0.)[..?.
    0x0010:  c0a8 0104 0050 b50a 0029 1536 0300 0000  .....P...).6....
    0x0020:  b4c0 d1a2 436f 6e6e 6563 7469 6f6e 2049  ....Connection.I
    0x0030:  4420 6d69 7373 6d61 7463 682e 00         D.missmatch..

这似乎是一条错误消息,根据协议规范,action字段的值应为3,大端序列应为0000 0003。但是这个响应反而给了我0300 0000,它是3的小端序。

这令我难以置信,我希望比我聪明的人可以帮我弄清楚发生了什么。

编辑:这些是我一直用于参考的两个网站:文档引用的official docsanother site

0 个答案:

没有答案