scapy中sniff怎么设置只捕获DNS流量?

现在自己要做一个分析DNS的程序,需要借助到scapy的sniff函数实时捕获网卡上的DNS流量,实现原理是需要设置sniff函数中的filter参数端口为53,因为DNS的端口为53

pkts = sniff(iface = "Intel(R) Dual Band Wireless-AC 8265",filter = "port 53",count = 20 , prn = lambda x: x.summary()) 

想到这样过滤的思路如下:

之前自己经过上网查询后,知道了sniff中的filter参数属于BPF语法(跟wireshark过滤语法相同),在wireshark中设置“捕获过滤器”语法也能照搬。(所以后面也会用wireshark设置“捕获过滤器”语法举例子)
filter的用法
在这里插入图片描述
但是发现协议中并没有"DNS"这个协议,自己如果直接设置 dns过滤器,显示无法设置,如下:(为了演示直观,展示了Wireshark界面,而不是sniff函数,两者的过滤语法是相同的)
在这里插入图片描述
后来从这篇博文中获得灵感,
Wireshark使用教程(因为其中也会用到BPF语法)
在这里插入图片描述
我们知道DNS所占端口号是53,意思是只要设置过滤出端口号为53的流量记录,就相当于过滤出协议为DNS的流量,所以如下设置:
在这里插入图片描述
捕获流量均为DNS
在这里插入图片描述
同理,在sniff的filter中也这么写,
在这里插入图片描述
其中

wrpcap("1.pcap", pkts)

这句可以把抓到的流量,存储为1.pcap文件,

pkts = sniff(iface = "Intel(R) Dual Band Wireless-AC 8265",filter = "port 53",count = 20 , prn = lambda x: x.summary()) 

用Wireshark打开pcap文件,验证确实全部都为DNS流量
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值