在 Ubuntu 22.04 中监控服务器服务访问外网并显示目标外网 IP,可通过以下几种方法实现,覆盖实时监控、进程关联、流量抓包和日志记录等场景:
方法 1:使用 ss 实时查看当前外网连接(推荐)
ss 是 Linux 系统中高效的网络连接查看工具(替代传统的 netstat),可结合过滤规则筛选外网流量,并显示关联的进程信息。
步骤:
安装
ss(通常已预装)
Ubuntu 22.04 默认已安装ss,若未安装可通过net-tools包获取(但ss属于iproute2,通常无需额外安装)。实时监控外网连接
执行以下命令,显示所有 TCP/UDP 外网连接(排除本地私有 IP 和回环地址),并关联进程:ss -tunap | grep -vE '127\.|192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])|::1'
- 参数说明:
-t:仅显示 TCP 连接;-u:仅显示 UDP 连接;-n:不解析域名(直接显示 IP);-a:显示所有连接(包括监听);-p:显示关联的进程 PID/名称。grep -vE:反向过滤,排除本地私有 IP(如127.x.x.x、192.168.x.x、10.x.x.x、172.16-31.x.x)和 IPv6 回环::1。
输出示例:
ESTAB 0 0 10.0.0.2:54321 172.217.16.142:443 users:(("curl",pid=1234,fd=3))UNCONN 0 0 192.168.1.100:53 0.0.0.0:* users:(("systemd-resolve",pid=567,fd=12))
其中
172.217.16.142即为访问的外网 IP。
方法 2(推荐):使用 nethogs 按进程监控网络流量(实时)
nethogs 可按进程维度显示网络流量(上传/下载速率),直接关联进程名和目标 IP。
步骤:
安装
nethogssudo apt update && sudo apt install nethogs -y
运行监控
以 root 权限启动(需监控所有进程):sudo nethogs# 捕获 TCP 和 UDP (推荐使用)nethogs -C
- 输出示例:
PID USER PROGRAM DEV SENT RECEIVED1234 root curl eth0 0.000 1.234KB/s5678 www-data nginx eth0 2.345KB/s 0.000
- 按
q退出。若需查看具体目标 IP,可结合ss或lsof(见下文)。
常用命令
-v : 打印版本。-h : 打印本帮助。-b : 跟踪模式 - 意味着跟踪模式。-d:以秒为单位的更新刷新率延迟,默认为 1。-v:查看模式(0 = KB/s,1 = KB 总数,2 = B 总数,3 = MB 总数,4 = MB/s,5 = GB/s)。-c:更新次数。默认为 0(无限制)。-t:跟踪模式。-p:嗅探模式(不推荐)。-s:按发送列对输出排序。-l:显示命令行。-a:监控所有设备,甚至环回/停止的设备。-C:捕获 TCP 和 UDP。-f : 实验:指定 pcap 过滤器字符串(类似于 tcpdump)。设备:要监控的设备。默认为所有正常运行的接口,不包括环回接口。
- 运行模式下按键说明
q 退出s 按照发送流量排序r 按照授受流量排序 # 默认此模式m 切换端口流量单位显示模式在B,KB,MB之间切换
方法 3:使用 tcpdump 抓包分析外网目标 IP
tcpdump 可捕获网络流量并过滤外网目标 IP,适合深度分析流量内容。
步骤:
安装
tcpdump(若未安装)sudo apt install tcpdump -y
捕获外网流量并显示目标 IP
执行以下命令,捕获所有发往外网(非本地)的流量,并打印目标 IP 和端口:sudo tcpdump -i any 'dst net not 127.0.0.0/8 and dst net not 192.168.0.0/16 and dst net not 10.0.0.0/8 and dst net not 172.16.0.0/12'
- 参数说明:
-i any:监听所有网络接口;dst net not ...:排除本地私有 IP 段(可根据实际环境调整)。
输出示例:
14:23:45.123456 IP 10.0.0.2.54321 > 172.217.16.142.443: Flags [S], seq 123456789, win 65535, options [mss 1460], length 0
其中
172.217.16.142是目标外网 IP。
方法 4:结合 lsof 查看具体连接的进程
lsof 可列出所有打开的网络连接,并关联进程 PID 和名称,适合定位具体服务。
步骤:
安装
lsof(若未安装)sudo apt install lsof -y
查看外网连接及对应进程
执行以下命令,显示所有连接到外网(非本地)的进程:sudo lsof -i | grep -vE '127\.|192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])'
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEcurl 1234 root 3u IPv4 123456 0t0 TCP 10.0.0.2:54321->172.217.16.142:443 (ESTABLISHED)
其中
172.217.16.142是目标外网 IP,curl是发起连接的进程。
总结
- 实时快速查看:优先使用
ss -tunap或nethogs。 - 深度流量分析:使用
tcpdump抓包。 - 进程关联:结合
lsof或ss -p定位具体服务。
根据需求选择合适的方法,若需自动化监控,可将命令写入脚本(如 cron 定时任务)或集成到监控系统(如 Prometheus)。
