Python3.4嗅

2024-04-26 20:42:29 发布

您现在位置:Python中文网/ 问答频道 /正文

运行此脚本时出错:

from scapy.all import *
sn = sniff(filter="http", count=30)
wireshark(sn)

这是错误:

^{pr2}$

运行此脚本时,一切正常:

from scapy.all import *
sn = sniff(filter="icmp and host 66.35.250.151", count=4)
wireshark(sn)

Tags: andfromimport脚本httpcount错误all
1条回答
网友
1楼 · 发布于 2024-04-26 20:42:29

Scapy使用BPF syntax进行过滤。此语法不支持将"http"指定为过滤器以过滤HTTP流量。在


但是,可以过滤所有发往或源自端口80的流量,端口80通常用于HTTP。上面的链接过滤器建议如下:

To capture all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets. (IPv6 is left as an exercise for the reader.)

tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

This stackoverflow answer提供了此筛选器背后的技术细节的清晰解释。简而言之,它计算包所承载的应用层有效负载的字节长度,并验证它不是0(因此,正):

  • IP包长度-IP头长度-TCP头长度!=0

由于文件/etc/services将端口号80分配给服务名http,因此可以按如下方式重写前面的过滤器:

tcp port http and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

为了完整起见,建议也过滤端口8080(http-alt/etc/services中)。在


当然,这并不能保证过滤后的流量确实是HTTP流量,或者未过滤的流量不包含HTTP流量。这种努力需要更复杂的过滤器。他们将检查应用层负载的内容,试图推断出正在使用的底层协议。在

根据你的最终目标,一个简单的google搜索会为各种目的提供几种可选的过滤器。This stackoverflow answer例如,为HTTP的基本方法建议过滤器:一个用于httpget方法,另一个用于httppost方法。在

相关问题 更多 >