当前位置: 首页 > article >正文

利用Python中Scapy库分析网络性能

通常网络监控的关键指标:

  • 带宽利用率:很亮网络资源的使用情况,避免带宽瓶颈。
  • 延时:数据包从源到目的地的传输时间,影响用户体验。
  • 丢包率:数据包在传输过程中丢失的比例,影响通信质量。
  • 抖动:延迟的变动程度,影响实时应用的稳定性。

常见网络监控技术

  1. 被动监控:监听网络流量,分析数据包,使用流量分析和异常检测,对网络本身运行不产生影响。
  2. 主动监控:发送探测信号,主动测试网络设备和路径的可达性和相应时间,适用于性能监控和故障排查。
  3. 混合监控:结合被动和主动监控,全面检查网络状态。

网络探测工具开发:

有很多工具可用于网络监控,本文探讨的是用Python的库,进行网络探测的方法,检测网络设备的可达性和响应时间,评估网络性能。

一、Scapy

  • 安装

pip install scapy

  • 调用

from scapy.all import *

  • 抓包

使用Scapy中sniff函数可以抓包,例:以下抓取20个数据包并显示其摘要信息。

# 捕获20个数据包
packets = sniff(count=20)

# 显示捕获的数据包摘要
packets.summary()
  • 分析包

抓包后,要对数据包进行分析,分析各个字段的详细信息。

for packet in packets:
    packet.show()
  • 过滤包

过滤数据包,使用BPF(Berkeley Packet Filter)语法过滤所抓取数据包,例:以下捕获TCP数据包。

# 只捕获TCP数据包
tcp_packets = sniff(filter='tcp', count=20)
tcp_packets.summary()

  • 保存和读取包 
# 保存包到文件
wrpcap('packets.pcap', packets)

# 从文件读取包
packets_from_file = rdpcap('packets.pcap')
packets_from_file.summary()
  • 构建和发送数据包

 使用Scapy自定义数据包并将其发送到网络。例:以下构建并发送一个ICMP(ping)数据包。

# 构建ICMP数据包
icmp_packet = IP(dst='8.8.8.8') / ICMP()

# 发送数据包并等待响应
response = sr1(icmp_packet)

# 显示响应数据包
response.show()
  •  数据包实时嗅探和处理

例:定义回调函数捕获并处理HTTP请求数据包。 

# 定义回调函数
def packet_callback(packet):
    if packet.haslayer(HTTP):
        print(packet[HTTP].summary())

# 实时捕获HTTP数据包
sniff(filter='tcp port 80', prn=packet_callback, store=0)

完整示例:

from scapy.all import *

# 捕获数据包
packets = sniff(count=10)
print("Captured packets:")
packets.summary()

# 显示每个数据包的详细信息
for packet in packets:
    packet.show()

# 仅捕获TCP数据包
tcp_packets = sniff(filter='tcp', count=10)
print("Captured TCP packets:")
tcp_packets.summary()

# 保存数据包到文件
wrpcap('packets.pcap', packets)

# 从文件读取数据包
packets_from_file = rdpcap('packets.pcap')
print("Packets read from file:")
packets_from_file.summary()

# 构建并发送ICMP数据包
icmp_packet = IP(dst='8.8.8.8') / ICMP()
response = sr1(icmp_packet)
print("ICMP packet response:")
response.show()

# 实时嗅探并处理HTTP请求数据包
def packet_callback(packet):
    if packet.haslayer(HTTP):
        print(packet[HTTP].summary())

print("Real-time HTTP packet capture:")
sniff(filter='tcp port 80', prn=packet_callback, store=0)


http://www.kler.cn/a/521837.html

相关文章:

  • Kmesh v1.0 正式发布
  • Baklib引领企业内容中台建设的新思路与应用案例
  • XSS 漏洞全面解析:原理、危害与防范
  • [MySQL]事务的理论、属性与常见操作
  • postgres基准测试工具pgbench如何使用自定义的表结构和自定义sql
  • 【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2
  • 1月27(信息差)
  • 当高兴、尊重和优雅三位一体是什么情况吗?
  • ShenNiusModularity项目源码学习(7:数据库结构)
  • 前端监控之rrweb录制用户行为
  • 【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)
  • 18. 四数之和【力扣】——两层循环后的双指针法
  • 开启eslint后,html中全角符号绕过eslint检测
  • .NET Core 中依赖注入的使用
  • 上位机知识篇---CMake
  • download-git-repo 一款命令行下载仓库依赖
  • DeepSeek崛起:中国AI新星如何撼动全球资本市场格局
  • PHP中的获取器和修改器:探索数据访问的新维度
  • H3CNE-23-vlan间路由
  • 《企业应用架构模式》笔记
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-transformer.py
  • Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
  • 算法-接雨水
  • 第05章 10 地形梯度场模拟显示
  • RGB ByteBuffer 转换成 Bitmap
  • 深度剖析C++17中的std::optional:处理可能缺失值的利器