2

为了执行 HTTP GET,我需要发送一个数据包(GET / HTTP/1.0\n\n)并等待 3 个数据包:

我的 GET 的 ACK

GET 答案:HTTP/1.0 200 OK

和传输的 FIN ACK

我找到了两种方法:

=> 将 sr() 与多选项一起使用

=> 在发送我的 GET 请求后使用嗅探

  • 对于 sr() 函数,问题是停止嗅探,唯一的选择是设置超时,但我的脚本将测试许多不同的站点,因此时间的答案有很多不同,可能很难选择静态超时值,其中我敢肯定,任何时候都没有网站超过它。

  • 对于嗅探,没有同样的问题,因为我可以设置“计数”参数只接收 3 个数据包。但是很难使过滤器足够好以确保记录的 3 个数据包是我想要的 3 个(并且没有 ARP、DNS 或其他任何东西)。但主要问题有时是第一个应答数据包出现在“嗅探”启动之前(在 send(GET_PACKET) 和 answers=sniff(...) 之间)。在这种情况下,我丢失了一些信息,我的所有后处理都被破坏了。

完美的方法是使用带有“count=3”选项的 sr() 函数来仅获取 3 个数据包,但 sr() 不存在该选项。

有人有想法吗?

非常感谢

对不起我的语言,我是法国人

4

2 回答 2

1

使用 Sniff 并将过滤器设置为 TCP 端口 80,对于延迟问题,您可以使用线程,首先在线程中启动嗅探器,然后发送数据包:

def sniffer():
    packets=sniff(filter="tcp port 80" , count=5)
    wrcap("test.cap" , packets) #save packets in .cap file
t = threading.Thread(target=sniffer)
t.start()

但是您可以使用解释HERE的更好方法。手动发送您的数据包。

于 2018-11-12T14:17:00.227 回答
0

这更像是一个提示而不是一个答案,但问题可能是您想要检查传输层数据包以查找应用程序层请求。您可以通过发送、等待和回答然后发送来将您的下行拆分HTTP GET到传输层。这是一个描述您可能想要的链接。SYNACKGET

于 2012-12-09T12:00:23.377 回答