You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Bash脚本问题:实时连接信息协议与IP匹配错误

问题分析与脚本修正

原脚本的核心问题是两次独立调用netstat导致协议与IP无法一一对应,且将所有协议存入单个变量后循环输出,造成每行重复显示所有协议。以下是修正后的实现方案:

修正后的脚本

#!/bin/bash
while true; do
    clear
    echo -e "Protocol\tIP Address\tName"
    # 一次性获取对应关系:协议名(本地服务)+ 远程IP
    netstat -tu | grep 'ESTABLISHED' | awk '{
        split($4, local_addr, ":");
        split($5, remote_addr, ":");
        print local_addr[2], remote_addr[1]
    }' | while read prot ip; do
        # 获取主机名,跳过nbtscan首行的扫描提示
        nbt=$(nbtscan "$ip" | awk 'NR>1 {print $2}')
        # 处理未获取到主机名的情况
        [ -z "$nbt" ] && nbt="Unknown"
        echo -e "$prot\t\t$ip\t\t$nbt"
    done
    sleep 2
done

关键修正点

  1. 合并netstat调用:
    用一次netstat -tu(不带n参数,保留服务名),通过awk同时提取本地服务名(如ssh/ftp)和远程IP,确保每组协议与IP严格对应,避免两次命令输出的顺序/行数差异。
  2. 逐行循环处理:
    通过while read prot ip直接读取每一组匹配的协议与IP,实现一一对应输出。
  3. 优化主机名获取:
    用NR>1跳过nbtscan首行的扫描信息,避免无效内容;增加默认值Unknown处理无法获取主机名的场景。
  4. 格式对齐:调整制表符数量,让输出更规整。

原脚本问题总结

  • 两次独立执行netstat(一次带n、一次不带),可能导致输出行的顺序或数量不一致,破坏协议与IP的对应关系。
  • 将所有协议存入单个变量prot,循环IP时每次输出整个变量,造成每行重复显示所有协议。

内容的提问来源于stack exchange,提问作者user20647503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:11:35