本文目录导读:

- 使用 tcpdump + 脚本分析(最通用)
- Python + Scapy 库(最灵活)
- 实时流量统计(基于 /proc 文件系统)
- 使用 nethogs 按进程统计(需要安装)
- 高级:Python + PyShark(基于Wireshark)
- 安装依赖
- 实战建议
要使用脚本获取网络数据包统计,有几种主流方法,我按从简单专业到底层自定义的顺序给你介绍:
使用 tcpdump + 脚本分析(最通用)
Bash 脚本示例:
#!/bin/bash
# 捕获100个包,统计协议分布
tcpdump -i eth0 -c 100 -nn -t 2>/dev/null | \
awk '{
# 统计IP协议
if ($2 ~ /IP/) proto[$7]++
# 统计端口(HTTP/HTTPS)
if ($3 ~ /\.80$|\.443$/) http_count++
} END {
print "协议统计:"
for (p in proto) print p, proto[p]
print "\nHTTP/HTTPS 包数:", http_count
}'
Python + Scapy 库(最灵活)
#!/usr/bin/env python3
from scapy.all import *
from collections import Counter
def packet_stats(pkt):
stats['total'] += 1
if IP in pkt:
stats['protocol'][pkt[IP].proto] += 1
stats['src_ip'][pkt[IP].src] += 1
stats['dst_ip'][pkt[IP].dst] += 1
# 统计端口
if TCP in pkt:
stats['tcp_ports'][pkt[TCP].sport] += 1
stats['tcp_ports'][pkt[TCP].dport] += 1
elif UDP in pkt:
stats['udp_ports'][pkt[UDP].sport] += 1
def stop_filter(pkt):
# 捕获100个包后停止
return stats['total'] >= 100
stats = {
'total': 0,
'protocol': Counter(),
'src_ip': Counter(),
'dst_ip': Counter(),
'tcp_ports': Counter(),
'udp_ports': Counter()
}
# 开始捕获(需要root权限)
sniff(iface="eth0", prn=packet_stats, stop_filter=stop_filter, store=False)
print(f"总包数: {stats['total']}")
print(f"协议分布: {dict(stats['protocol'])}")
print(f"Top 5 源IP: {stats['src_ip'].most_common(5)}")
print(f"Top 5 目标端口: {stats['tcp_ports'].most_common(5)}")
实时流量统计(基于 /proc 文件系统)
#!/bin/bash
# 从 /proc/net/dev 读取实时网卡统计
interface="eth0"
# 初始值
rx_bytes_old=$(awk -v iface=" $interface:" '$1 == iface {print $2}' /proc/net/dev)
tx_bytes_old=$(awk -v iface=" $interface:" '$1 == iface {print $10}' /proc/net/dev)
sleep 1
# 1秒后
rx_bytes_new=$(awk -v iface=" $interface:" '$1 == iface {print $2}' /proc/net/dev)
tx_bytes_new=$(awk -v iface=" $interface:" '$1 == iface {print $10}' /proc/net/dev)
rx_rate=$(( (rx_bytes_new - rx_bytes_old) * 8 / 1000 )) # kb/s
tx_rate=$(( (tx_bytes_new - tx_bytes_old) * 8 / 1000 ))
echo "接收速度: ${rx_rate} kbps"
echo "发送速度: ${tx_rate} kbps"
使用 nethogs 按进程统计(需要安装)
#!/bin/bash
# 实时按进程显示流量
nethogs -t 2>/dev/null | \
awk '{
if ($0 ~ /MB|KB/) {
print strftime("%H:%M:%S"), $0
# 简单统计
total_rx[$2] += $3
total_tx[$2] += $4
}
} END {
print "\n=== 汇总 ==="
for (proc in total_rx) {
printf "%-30s 接收: %.2f MB 发送: %.2f MB\n",
proc, total_rx[proc], total_tx[proc]
}
}'
高级:Python + PyShark(基于Wireshark)
import pyshark
cap = pyshark.LiveCapture(interface='eth0', bpf_filter='tcp port 80 or tcp port 443')
print("捕获HTTP/HTTPS流量统计(10秒)...")
http_count = 0
https_count = 0
for packet in cap.sniff_continuously(packet_count=100):
if 'HTTP' in packet:
print(f"HTTP请求: {packet.http.request_method} {packet.http.host}")
http_count += 1
elif 'TLS' in packet:
https_count += 1
print(f"\nHTTP包: {http_count}, HTTPS包: {https_count}")
安装依赖
# Debian/Ubuntu sudo apt-get install tcpdump nethogs python3-pip pip3 install scapy pyshark # RedHat/CentOS sudo yum install tcpdump nethogs python3-pip pip3 install scapy pyshark
实战建议
- 需要root权限:大多数抓包操作需要
sudo - 性能考虑:大量捕获时使用
store=False(Scapy)或-w 文件(tcpdump) - 精确统计:结合
iptables的统计功能长期监测 - 可视化:将数据输出到 InfluxDB + Grafana
最简单的入门是从 tcpdump 开始,逐步过渡到 Python 脚本处理复杂逻辑,需要我针对某个具体场景(如HTTP请求分析、DDoS检测)给示例吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播