怎么用脚本监听端口流量

wen 实用脚本 3

**
《精准掌控网络脉搏:三步教你用脚本高效监听端口流量(实战篇)》

怎么用脚本监听端口流量


目录导读

  1. 为什么需要脚本监听端口流量?——场景与痛点
  2. 核心工具盘点:tcpdump、tshark 与 Python 的取舍
  3. 实战教学:从零写一个端口流量监听脚本(附代码)
  4. 进阶技巧:流量日志轮转与异常告警触发
  5. 高频问答:解决你监听过程中的 4 个“坑”
  6. 让流量审计成为你的“网络显微镜”

为什么需要脚本监听端口流量?——场景与痛点
当业务出现“端口不通”或“带宽被占满”,大多数运维第一反应是登录服务器看 ss -tunlp,但静态看连接数无法回答三个关键问题:每秒多少字节流过?哪个源 IP 最贪婪?协议分布是否异常? 手动执行 tcpdump 抓包久了对磁盘是灾难,且无法生成结构化报表,脚本化监听的价值在于:自动化采集、实时计算吞吐量、并输出可告警指标,这就是网络排障和容量规划的基础。

核心工具盘点:tcpdump、tshark 与 Python 的取舍

  • tcpdump:轻量级 C 语言工具,内核底层抓包,性能最强,但解析应用层需配合 -G 轮转与 -w 写文件。
  • tshark:wireshark 命令行版,支持 -e 字段抽取为 JSON/CSV,适合复杂过滤,但内存占用偏高。
  • Python(scapy/psutil):你可以在 psutil.net_io_counters() 拿到进程级流量;scapy 适合深度协议解析,但纯 Python 抓包速度上限约 50Mbps。
    推荐组合:生产环境用 tcpdump 做采集器,Python 做后处理与告警,兼顾性能与灵活性。

实战教学:从零写一个端口流量监听脚本(附代码)
以下提供一个 Bash + Python 混合方案,监听 TCP 8080 端口的入站/出站速率(每秒打印一次):

#!/bin/bash
# listen_port.sh - 使用tcpdump统计端口流量
INTERFACE="eth0"
PORT="8080"
DURATION=5
tcpdump -i $INTERFACE -nn -q "tcp port $PORT" -c 1000 -w /tmp/port_$PORT.pcap 2>/dev/null &
TCPDUMP_PID=$!
# Python解析并计算速率
python3 <<EOF
import time, os
prev = {'rx': 0, 'tx': 0}
start = time.time()
while time.time() - start < $DURATION:
    total = os.popen("cat /proc/net/dev | grep '$INTERFACE' | awk '{print \\\$2, \\\$10}'").read().split()
    if total:
        rx, tx = int(total[0]), int(total[1])
        if prev['rx']:
            print(f"RX: {((rx - prev['rx'])/1.0/1024):.2f} KB/s | TX: {((tx - prev['tx'])/1.0/1024):.2f} KB/s")
        prev = {'rx': rx, 'tx': tx}
    time.sleep(1)
EOF

运行效果:每 5 秒展示一次瞬时速率,且原始包已落盘可事后分析,若觉得逻辑简单,可加上 port 维度拆分(tcpdump 指定 port 8080 and src host)。

进阶技巧:流量日志轮转与异常告警触发

  • 日志轮转:tcpdump 加 -G 60 -W 24 表示每分钟生成一个新文件,保留 24 个。
  • 触发条件:在 Python 中定义阈值(如 RX>50MB/s)则调用 requests.post(webhook) 发企业微信告警。
  • 带宽峰值直方图:用 tshark -r pcap -q -z io,stat,1 生成一维统计,配合 matplotlib 出图。

高频问答:解决你监听过程中的 4 个“坑”
Q1:脚本放服务器跑,提示权限不足?
A:tcpdump 需要 rootCAP_NET_RAW 能力,正确做法:sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump,避免整脚本以 root 执行。

Q2:为何我监听 8080 端口,看到的流量数据忽高忽低?
A:TCP 有突发性,建议统计周期 ≥5 秒,且用 -s 96 只抓包头(去除 payload),避免性能干扰真实速率。

Q3:在多网卡服务器上,流量算重复了?
A:务必指定 -i eth0,若做负载均衡,你需计算 lo 上的内部流量(通常忽略)。

Q4:如何持久化运行不中断?
A:使用 nohupsystemd service,并增加日志定时的 logrotate 配置,防止日志胀满磁盘。

让流量审计成为你的“网络显微镜”
脚本监听端口流量不是“脚本小子”的玩具,而是 SRE 的必备外科手术刀,从痛苦版 netstat 到脚本自动化,本质是把不可见的比特流转为可决策的指标,建议继续研究 nethogs(按进程分流)以及 iftop(按连接显示),结合本文脚本,足以应对 90% 的工作场景,行动即真相,赶紧去 crontab 里调度起来吧。


完毕)**

温馨提示:在公网部署监听脚本,务必过滤敏感数据包,并遵守当地网络安全法规,例如使用 tcpdump -nn -c 100 'tcp dst port 80 and not src net 10.0.0.0/8' 避免采集内网干扰。

抱歉,评论功能暂时关闭!