Scapy等待多个数据包

时间:2012-11-30 15:10:21

标签: python http get scapy qos

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

我的GET的确认

GET答案:HTTP / 1.0 200 OK

和传输的FIN ACK

我发现了两种方式:

=>使用带多选项的sr()

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

  • 对于sr()函数,问题是停止嗅探,唯一的选择是设置超时,但我的脚本会测试很多不同的站点,这么多时间的答案很多,可能很难选择一个静态超时值,我确定任何站点都不会超过它。

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

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

Anynone有个主意吗?

非常感谢

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

2 个答案:

答案 0 :(得分: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。手动发送数据包。

答案 1 :(得分:0)

这更像是一个提示而非答案,但问题可能是您要检查传输层数据包以查找应用程序层请求。您可以发送HTTP GET,等待并回答然后发送SYNACK,将GET向下拆分为传输层。这是一个描述您可能需要的link