我正在编写一些代码来将内部应用程序集成到 DVR 中以检索视频文件。这都是逆向工程,因为没有任何官方文档,而且我无法理解以下事件序列(通过玩 DVR 的 Android 应用程序捕获)。
936 72.985204 192.168.0.1 192.168.0.200 HTTP 468 POST /cgi-bin/supervisor/NetworkBk.cgi HTTP/1.1 (application/x-www-form-urlencoded)
937 72.985368 192.168.0.200 192.168.0.1 TCP 54 mit-ml-dev > 41859 [ACK] Seq=1 Ack=415 Win=65535 Len=0
938 73.933676 192.168.0.200 192.168.0.1 HTTP 275 HTTP/1.0 200 OK (video/mpeg4)
939 73.933983 192.168.0.1 192.168.0.200 TCP 54 41859 > mit-ml-dev [ACK] Seq=415 Ack=222 Win=15544 Len=0
940 74.004433 192.168.0.200 192.168.0.1 TCP 74 [TCP segment of a reassembled PDU]
941 74.004887 192.168.0.1 192.168.0.200 TCP 54 41859 > mit-ml-dev [ACK] Seq=415 Ack=242 Win=15544 Len=0
942 74.024669 192.168.0.200 192.168.0.1 HTTP 1346 Continuation or non-HTTP traffic
HTTP POST 请求视频文件,然后产生 HTTP OK。我对接下来会发生什么感到困惑。收到 HTTP 200 时请求不完成吗?那么为什么它继续接收 TCP 数据,然后获得 HTTP 继续或非 HTTP 流量?随后的 TCP 数据包包含我要下载的视频文件。当我手动制作 HTTP POST 时,我得到了 HTTP OK 响应,然后我被难住了。
这是我用来模拟 HTTP POST 的代码。
import requests
dc = {"action":"download", "start_time":"2013 7 1 13 59 00", "end_time":"2013 7 14 3 0", "num":"255", "ch":"5"}
r = requests.post("http://192.168.0.200/cgi-bin/supervisor/NetworkBk.cgi", data=dc, auth=(username, password))
此代码获得 HTTP 200 OK 响应,我如何获得继续或非 HTTP 流量?我是新手,所以不确定我是否提供了足够的细节。如果有帮助,我可以提供 HTTP 标头。
附录 这是 HTTP OK 回复的 RAW 响应。据我所知,没有什么可以期待额外的内容。
HTTP/1.0 200 OK
Date: Mon, 01 Jul 2013 15:01:34 GMT
nServer: Linux/2.x UPnP/1.0 Avtech/1.0
Expires: 0
Pragma: no-cache
Cache-Control: no-cache
Connection: close
Content-Type: video/mpeg4
Content-Length: 5
0
OK