为了执行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有个主意吗?
非常感谢
对不起我的语言,我是法国人
答案 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
,等待并回答然后发送SYN
,ACK
,将GET
向下拆分为传输层。这是一个描述您可能需要的link。