IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python实现——流量分析 -> 正文阅读

[Python知识库]python实现——流量分析

前言

需要使用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 localtime


if __name__ == '__main__':
    parser = optparse.OptionParser('案例:python %prog -i 127.0.0.1 -c 5 -o test.pcap\n')

    # 添加IP参数-i
    parser.add_option('-i', '--IP', dest='hostIP',
                      default='127.0.0.1', type='string',
                      help='IP address [default = 127.0.0.1]')

    # 添加数据包总数参数 -c
    parser.add_option('-c', '--count', dest='packetCount',
                      default=5, type='int',
                      help='Packet count [default = 5]')

    # 添加保存文件名参数 -o
    parser.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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:30:44  更:2021-08-24 15:31:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 13:08:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计