python实现嗅探

函数sniff()中可以使用多个参数,下面先来了解其中几个比较重要参数的含义。

(1)count:表示要捕获数据包的数量。默认值为0,表示不限制数量。

(2)store:表示是否要保存捕获到的数据包,默认值为1

(3)prn:这个参数是一个函数,这个函数将会应用在每一个捕获到的数据包上。

如果这个函数有返回值,将会显示出来。默认是空; 返回一个数据包信息

(4)iface:表示要使用的网卡或者网卡列表。

sniff()还支持了过滤器的使用

这个过滤器使用了一种功能非常强大的过滤语法——“伯克利包过滤”语法。
这个规则简称为 BPF,利用它可以确定该获取和检查哪些流量,忽略哪些流量。
BPF可以帮助我们通过比较各个层协议中数据字段值的方法对流量进行过滤。
BPF的主要特点是使用一个名为“原语”的方法来完成对网络数据包的描述,
例如,可以使用“host”来描述主机,“port”来描述端口,同时也支持“与”“或”“非”等逻辑运算。可以限定的内容包括地址、协议等。

一些常见的过滤器。

(1)只捕获与网络中某一个IP的主机进行交互的流量:“host 192.168.1.1”。
(2)只捕获与网络中某一个MAC地址的主机交互的流量:“ether host 00-1a-a0-52-e2-a0”。
(3)只捕获来自网络中某一个IP的主机的流量:“src host 192.168.1.1”。
(4)只捕获去往网络中某一个IP的主机的流量:“dst host 192.168.1.1”,host也可以省略。
(5)只捕获23端口的流量:“port 23”。
(6)捕获除了23端口以外的流量:“!23” 。
(7)只捕获目的端口为80的流量:“dst port 80”。
(8)只捕获ICMP流量:“icmp”。
(9)只捕获type为3,code为0的ICMP流量:“icmp[0] = 3 &&icmp[1] = 0”。

步骤:

在kali上执行脚本,嗅探192.168.72.131,也就是本机,同时在另一个终端保持长ping,用来执行脚本时抓取ping包

        脚本放到最后

接着会返回到当前目录一个catch.pacp文件,我们使用wireshark打开

可以看到抓到了去往www.baidu.com(33.156.66.14)的icmp请求和应答报文

python脚本:

from scapy.all import *
import sys

if len(sys.argv) != 2:
    print("Usage: catchPackets<IP>:\neg: catchPackets 192.168.1.1")
    sys.exit()

# 定义IP地址
ip = sys.argv[1]


# 定义callback 回调函数
def callBack(packet):
    print(packet.show())


packets = sniff(filter="host " + ip, prn=callBack, count=5)
# filter表示调用过滤器,规则为BPF,
# prn指定回调函数,每当一个符合filter的报文被探测到时,就会执行回调函数,
# count指定最多嗅探多少个报文(是指符合filter条件的报文,而非全部报文)
# 将抓取的信息 封装成一个 .pcap文件
wrpcap("catch.pcap", packets)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值