使用iftop统计外网流量并排除私网流量的shell脚本示例

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

shell脚本使用iftop统计外网内外流量,不统计私网内外流量

回答:

iftop 是一个实时显示网络连接带宽使用情况的工具。它可以帮助你监控网络流量,但它本身并不直接支持过滤特定的IP地址范围(如私网地址)。不过,你可以结合其他工具和脚本来实现这个功能。

以下是一个示例脚本,展示如何使用 iftopgrep 等工具来统计外网流量,并排除私网流量:

#!/bin/bash

# 定义私网IP地址范围
PRIVATE_IP_RANGES=(
    "10.0.0.0/8"
    "172.16.0.0/12"
    "192.168.0.0/16"
)

# 运行 iftop 并将输出重定向到一个临时文件
sudo iftop -n -t -s 10 > /tmp/iftop_output.txt

# 过滤掉私网IP地址
for range in "${PRIVATE_IP_RANGES[@]}"; do
    grep -v -E "$range" /tmp/iftop_output.txt > /tmp/iftop_filtered.txt
    mv /tmp/iftop_filtered.txt /tmp/iftop_output.txt
done

# 显示过滤后的结果
cat /tmp/iftop_output.txt

# 清理临时文件
rm /tmp/iftop_output.txt

这个脚本的工作原理如下:

  1. 定义私网IP地址范围。
  2. 运行 iftop 并将其输出重定向到一个临时文件。这里使用了 -n 选项来避免DNS解析,-t 选项来使输出适合脚本处理,-s 10 选项来指定运行时间为10秒。
  3. 使用 grep 过滤掉私网IP地址范围的行。
  4. 显示过滤后的结果。
  5. 清理临时文件。

请注意,这个脚本只是一个简单的示例,可能需要根据你的具体需求进行调整。特别是,grep 的正则表达式可能需要根据实际情况进行调整,以确保正确过滤私网IP地址。