#!/bin/bash
set -euo pipefail

# ---------- 静态框架：只打印一次，之后永不重绘 ----------
printf '====================================================\n'
printf '%20sIPv4        IPv6\n' ''
printf -- '----------------------------------------------------\n'
printf 'TCP 入向总连接:     %-6s      %-6s\n' '-' '-'
printf 'UDP 入向总连接:     %-6s      %-6s\n' '-' '-'
printf '====================================================\n'

printf '\033[?25l'                                  # 隐藏光标，防闪
trap 'printf "\033[?25h"; exit 0' INT TERM EXIT     # 退出时恢复光标

ROW_TCP=4; ROW_UDP=5; COL4=21; COL6=33             # 四个数字单元格位置

# 只把变化的数字写到对应位置，未变则一个字节都不输出
prev_tcp4=''; prev_tcp6=''; prev_udp4=''; prev_udp6=''
update_cell() {   # $1=行 $2=列 $3=新值 $4=保存旧值的变量名
    [[ ${!4} == "$3" ]] && return
    printf '\033[%d;%dH%-6s' "$1" "$2" "$3"
    printf -v "$4" '%s' "$3"
}

while true; do
    tcp4_in=$(ss -4antH | awk '$4 !~ /^127\.0\.0\.1/' | wc -l)
    tcp6_in=$(ss -6antH | awk '$4 !~ /^::1/'        | wc -l)
    udp4_in=$(ss -4anuH | awk '$4 !~ /^127\.0\.0\.1/ && $4 !~ /0\.0\.0\.0:0/' | wc -l)
    udp6_in=$(ss -6anuH | awk '$4 !~ /^::1/         && $4 !~ /:::0/'          | wc -l)

    update_cell $ROW_TCP $COL4 "$tcp4_in" prev_tcp4
    update_cell $ROW_TCP $COL6 "$tcp6_in" prev_tcp6
    update_cell $ROW_UDP $COL4 "$udp4_in" prev_udp4
    update_cell $ROW_UDP $COL6 "$udp6_in" prev_udp6

    sleep 1
done