我正在尝试在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 docs和another site。