我需要监视某个网站在被访问时响应需要多长时间.我只想嗅探端口80上的流量,但仅在与目标站点交换流量时才可以.我已经搜索过SO,看来pcapy或scapy是完成这项工作的正确工具,但它们似乎比我需要的要深.我正在研究以下脚本:
Network traffic monitor with pcapy in python
我想我需要改变
def __handle_packet(self, header, data):
# method is called for each packet by dispatch call (pcapy)
self._dispatch_bytes_sum += header.getlen() #header.getlen() #len(data)
logger.debug("header: (len:{0}, caplen:{1}, ts:{2}), d:{3}".format(header.getlen(), header.getcaplen(), header.getts(), len(data)))
#self.dumper.dump(header, data)
以某种方式只能解包/处理发往目标站点的数据包.请注意,这是针对LAN上的Windows XP计算机的,浏览器启动流量至关重要.
任何指针赞赏吗?
解决方法:
scapy的问题在于它不能处理TCP streams的重组.您要查找的HTTP可能已嵌入TCP流中.引用文档:
Scapy is based on a stimulus/response model. This model does not work well for a TCP stack. On the other hand, quite often, the TCP stream is used as a tube to exchange messages that are stimulus/response-based.
就像您说的那样,Scapy更适合用于下层事物.例如,您可能会跟踪DHCP请求上的IP数据包.像许多网络工具一样,TCP的复杂性和基于流的性质意味着,一旦跨越该层,将很难重组所有内容并处理所有重传,而不是边缘情况,并连贯地提取数据.
您能否使用curl或urllib之类的东西,看看响应返回需要多长时间?