前言

需要使用Scapy模块来编写流量嗅探工具,用到Scapy中的sniff()函数,该函数中比较重要的参数如下:

  • iface:指定在哪个网络接口上抓包
  • count:表示要捕获的数据包的数量。默认值是0,表示不限制数量
  • filter:流量的过滤规则。使用伯格利包过滤的语法
  • prn:定义回调函数,通常使用lambda表达式来写回调函数。当符合filter的流量被捕获时,就会执行回调函数

关于filter:
表达式常用的有以下三种限定词:

  1. Type:类型限定词。例如host、net、port等,如果不指定,默认是host
  2. Dir:方向限定词,指明数据包的传输方向。例如src、dst等
  3. Proto:协议限定词,限定要匹配的协议。例如tcp、udp、ip、arp等

表达式常用逻辑运算符:

  • &&:连接运算符
  • ||:选择运算符
  • !:否定运算符

案例:

  1. 只捕获与网络中某一IP主机进行交互的流量:host 1.1.1.1
  2. 只捕获与网络中某以MAC地址的主机交互的流量:ether src host 9C-7B-EF-29-47-EC
  3. 只不过来源于网路中某一个IP的主机流量:src host 1.1.1.1
  4. 捕获某端口的流量:port 80
  5. 捕获除了某端口之外的流量:!port 80
  6. 捕获某协议的流量:ICMP
  7. 设置来源地址和目标端口:src host 1.1.1.1 && dst port 80

案例

1:取消捕获时才显示结果

python终端中运行下面的命令,cmd中发出默认的4个ping包,python终端中按Ctrl+c取消捕获,终端中才会显示结果。

2:实时显示捕获结果

加上prn选项,来实时显示捕获到的数据包。
prn的内容用lambda(匿名函数)表达式来编写,具体内容为:prn=**lambda **x: x.summary()
python终端中按Ctrl+c取消捕获

优化显示结果:
改进之后的prn:prn=**lambda **x: x[IP].src + **"---->" **+ x[IP].dst

更详细的输出:
写一个回调函数,然后让prn调用即可。
截图中可以看到右上角有报错,因为[IP],这个不用管

from scapy.all import *# 定义一个回调函数
def callback(packet):print("Source:%s---->Target:%s" % (packet[IP].src, packet[IP].dst))print("TTL:%s" % packet[IP].ttl)print(packet.show())print(sniff(filter='dst 192.168.86.155', prn=callback))

3:保存数据包

  1. 使用wrpcap函数保存数据包,设置保存为pcap格式的
  2. sniff抓包的时候,可以通过count设置抓包的数量,一旦满足数量,程序就会自动停止
from scapy.all import *packet = sniff(filter='dst 192.168.86.155', count=4)
wrpcap('python.pcap', packet)

4:sniffer软件

第44行和51行那段注释的代码,主要是为了解释(options, args) = parser.parse_args()是什么,并进而得知传进去的参数是如何工作的。

from scapy.all import *
import time
import optparse# 回调打印函数
def pack_call_back(packet):print('*' * 30)# 打印源IP、源端口、目睹IP、目的端口print('[%s]Source:%s:%s---->Target:%s:%s' % (time2time(packet.time), packet[IP].src, packet.sport, packet[IP].dst, packet.dport))# 打印数据包print(packet.show())print('*' * 30)# 时间戳转换
def time2time(packet_time):localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(packet_time))return localtimeif __name__ == '__main__':parser = optparse.OptionParser('案例:python %prog -i 127.0.0.1 -c 5 -o test.pcap\n')# 添加IP参数-iparser.add_option('-i', '--IP', dest='hostIP',default='127.0.0.1', type='string',help='IP address [default = 127.0.0.1]')# 添加数据包总数参数 -cparser.add_option('-c', '--count', dest='packetCount',default=5, type='int',help='Packet count [default = 5]')# 添加保存文件名参数 -oparser.add_option('-o', '--output', dest='fileName',default='pythonGet.pcap', type='string',help='save filename [default = pythonGet.pcap]')(options, args) = parser.parse_args()# print(type(parser.parse_args()))  # <class 'tuple'># print(parser.parse_args())        # (<Values at 0x27149700280: {'hostIP': '127.0.0.1', 'packetCount': 5, 'fileName': 'pythonGet.pcap'}>, [])## print(type(options))  # <class 'optparse.Values'># print(options)        # {'hostIP': '127.0.0.1', 'packetCount': 5, 'fileName': 'pythonGet.pcap'}## print(type(args))   # <class 'list'># print(args)         # []defFilter = 'dst ' + options.hostIP  # 包过滤规则packets = sniff(filter=defFilter, prn=pack_call_back, count=options.packetCount)# 保存输出文件wrpcap(options.fileName, packets)

python实现——流量分析相关推荐

  1. python nDPI 流量分析框架 Nfstream 简介

    Nfstream本质上来说是一款Python包,它可以提供快速.灵活且有效的数据结构,支持针对在线或离线状态的网络数据进行分析,这种方式既简单又直观.在Nfstream的帮助下,广大研究人员可以直接在 ...

  2. IP包流量分析(一)(python+pypcap+dkpt)

    计算机网络实验:IP包流量分析 (抓取IP包并解析,运行结果GUI输出) 系统:Mac Mojave10.14.6 环境:python3.7, pycharm CE (计算机网络课程实验,老师要求抓包 ...

  3. ctf流量分析练习二

    上次的流量分析做的我一个脑袋两个大!但是不能放弃啊,再找一些题来练练手 0x01 经典题型 CTF题型主要分为流量包修复.WEB流量包分析.USB流量包分析和其他流量包分析. 01 流量包修复 比赛过 ...

  4. 网络流量分析与Android逆向小结

    本章对之前的网络流量分析与Android逆向做个小结. 网络流量分析 原理解析 分析原理前之前先了解中间人攻击的概念:在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服 ...

  5. 小米登录协议分析_小米智能家居设备流量分析及脚本控制

    原标题:小米智能家居设备流量分析及脚本控制 *本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 前言 万物互联的时代即将来临,而现阶段,我们能感触到的,当属智能 ...

  6. 网络协议分析与仿真课程设计报告:网络流量分析与协议模拟

    公众号:CS阿吉 网络协议分析与仿真课程设计报告  题  目:网络流量分析与协议模拟 专业名称:         网络工程 班    级: 学生姓名:           阿吉 学号(8位): 指导教 ...

  7. 流量分析:如何分析数据的波动?

    流量分析. 内容分为四部分: 背景: 渠道分析: 转化与价值分析: 流量波动逻辑性分析. 背景 建立产品指标体系和报表之后,分析师和业务方最重要的事情就是每天看各种数据,而这个看数据的过程就是流量分析 ...

  8. 基于Python模仿流量攻击的方法对字节编码攻击

    基于Python模仿流量攻击的方法对字节编码攻击 一.总目标 NIDS 配置:FE(bytes encoding)+ ML(textCNN) 二.PGA(FE knowledge==100%) 2.1 ...

  9. bro流量分析(改名zeek)ips

    流量分析的瑞士军刀:Zeek - FreeBuf网络安全行业门户 bro流量分析(改名zeek) - babyth - 博客园 浅析bro网络流量分析 - SecPulse.COM | 安全脉搏 br ...

最新文章

  1. Science长文综述:通过空间斑图形成避免复杂系统崩溃
  2. 面向对象编程的思想(2)
  3. 学习笔记---好文章链接帖
  4. 【OOP】零钱通项目
  5. Session会话技术
  6. [css] 说说你对低版本IE的盒子模型的理解
  7. java把对象转成图片格式转换器安卓版,java 万能图片格式转换
  8. [Java] 蓝桥杯 BASIC-6 基础练习 杨辉三角形
  9. 安卓手机上跑_直接在电脑上浏览操作安卓手机 #效率App #scrcpy
  10. (day 52 - 二叉搜索树) 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
  11. 前端开发面试题收集 JS
  12. 一键下载大学慕课等课程视频
  13. 1 常见的HTTP股票数据接口整理 腾讯 新浪 网易 2019-08-02
  14. php 清楚浏览器缓存,如何清除浏览器缓存
  15. 阜师院2016年c语言真题答案,C语言A卷答案.doc
  16. Oracle通过spool命令导出.dat数据,及通过Shell脚本定时任务执行卸数
  17. 文本标注开源系统Doccano、Label Studio、BRAT比较
  18. modelsim is exiting with code:211 10秒后自动关闭退出
  19. myisam和innodb区别
  20. 斐讯(Phicomm)空气检测仪(悟空 M1)通过 EasyLink

热门文章

  1. Flash,RAM,ROM区别
  2. 利用计算机系统应该包括计算机,通常人们所说的个完整的计算机系统应包括(D).doc...
  3. [少女时代][分享]171031 SONE NOTE LIVE vol.12公开 允儿挑战艺术字体书写
  4. html css图片炫酷效果,5种CSS3 Transitions炫酷图片标题特效
  5. 天数换算月份_excel表中,如何把日期数转换成月份数呢?
  6. matlab统计 频数、频率和累积频率
  7. notify() 和 notifyAll()方法的使用和区别
  8. jquery的attr和removeAttr实现checkbox全选和取消全选问题
  9. 关于pngquant failed to build, make sure that libpng-dev is installed报错
  10. 佛科院单片机原理1——80C51单片机结构