当前位置:首页>Linux>Linux 常用网络工具大全:如何查看指定 IP 端口的数据收发

Linux 常用网络工具大全:如何查看指定 IP 端口的数据收发

  • 2026-10-11 07:14:45
Linux 常用网络工具大全:如何查看指定 IP 端口的数据收发

在 Linux 系统中,我们经常需要查看某台机器上指定 IP 和端口的数据收发情况。但是 Linux 没有一个"万能命令"可以完成所有任务。我们需要根据具体需求来选择合适的工具。这篇文章会介绍六类常用网络工具,帮助大家快速上手。

大部分网络抓包和流量监控命令都需要 root 权限。需要在命令前加 sudo。如果机器有多块网卡,必须指定网卡名称。常见的网卡名称有 eth0、ens33、lo。可以用 ip a 命令查看本机的网卡名称。


一、tcpdump:抓包分析的首选工具

适用场景

想看到端口实际收发的数据内容、报文交互过程和协议细节,tcpdump 是最好的选择。它是 Linux 系统上最常用的命令行抓包工具。

安装方法

不同 Linux 发行版的安装命令不同:

Ubuntu / Debian:

sudo apt updatesudo apt install -y tcpdump

CentOS / Rocky / AlmaLinux:

sudo yum install -y tcpdump

Arch Linux:

sudo pacman -S tcpdump

安装完成后,可以用 tcpdump --version 来验证是否安装成功。

如果不想每次都加 sudo,可以给 tcpdump 设置权限:

sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

基础过滤语法

tcpdump 支持灵活的过滤规则组合:

  • host x.x.x.x:限定目标 IP
  • port 端口号:限定端口
  • tcp / udp:只抓取 TCP 或 UDP 协议
  • src / dst:区分入站(接收)和出站(发送)
  • -nn:不解析主机名和端口名,提升速度(建议每次都加)
  • -i 网卡名:指定监听网卡

常用命令示例

抓取指定 IP + 端口的所有流量:

sudo tcpdump -nn -i ens33 host 192.168.1.100 and port 8080

只抓取 TCP 流量:

sudo tcpdump -nn -i ens33 tcp host 192.168.1.100 and port 8080

只抓取 UDP 流量(比如 DNS 查询):

sudo tcpdump -nn -i ens33 udp host 192.168.1.100 and port 53

区分接收和发送:

入站(本机接收对方数据):

sudo tcpdump -nn -i ens33 src host 192.168.1.100 and port 8080

出站(本机向对方发送数据):

sudo tcpdump -nn -i ens33 dst host 192.168.1.100 and port 8080

查看报文原始内容(十六进制 + 文本):

sudo tcpdump -nn -X -i ens33 host 192.168.1.100 and port 8080

如果想直接看到可读的文本内容,可以加 -A 参数:

sudo tcpdump -A -i any host 192.168.1.100 and port 8080

保存抓包文件,后续用 Wireshark 分析:

sudo tcpdump -nn -i ens33 host 192.168.1.100 and port 8080 -w port_traffic.pcap

读取本地抓包文件:

tcpdump -r port_traffic.pcap

限时抓包并统计总报文数:

sudo timeout 10 tcpdump -nn -i ens33 host 192.168.1.100 and port 8080 | wc -l

组合更复杂的过滤条件:

# 抓取源 IP 是 10.0.0.2 且目标端口是 22 的数据包sudo tcpdump src host 10.0.0.2 and dst port 22# 抓取除 SSH 端口外,与 IP 10.0.0.2 交互的所有流量sudo tcpdump host 10.0.0.2 and not port 22

注意事项

tcpdump 需要 root 权限才能运行。在生产环境中长时间抓包可能会影响系统性能。建议用 -c 参数限制抓包数量(比如 -c 1000),或者指定较短的时间。


二、iftop:查看实时收发速率

适用场景

不需要看报文内容,只想知道某个 IP 和端口的实时上传、下载速度(KB/s 或 Mb/s),用 iftop 最合适。

安装方法

CentOS / RHEL / Rocky:

sudo yum install iftop -y

Ubuntu / Debian:

sudo apt install iftop -y

常用命令

监控指定网卡,只展示特定 IP 和端口的实时流量:

sudo iftop -i ens33 -f "host 192.168.1.100 and port 8080"

显示端口号,不解析主机名:

sudo iftop -i eth0 -P -n

界面字段说明

  • 左侧:通信双方的 IP
  • =>:本机发送数据(出站)
  • <=:本机接收数据(入站)
  • 中间列:实时速率、2 秒 / 10 秒 / 40 秒平均速率
  • 底部:累计总收发流量

交互快捷键

  • s / d:切换按源 IP 或目的 IP 排序
  • t:切换流量显示模式
  • p:暂停或恢复界面刷新
  • q:退出程序

三、ss 和 netstat:查看连接状态和缓冲区队列

适用场景

想检查端口是否建立了连接、连接状态是什么、收发队列是否有积压(堵包)。推荐优先使用 ss,因为它直接读取内核数据,比 netstat 更快。

ss 命令(推荐)

查看监听状态(端口是否正常监听):

sudo ss -tulnp | grep 8080

参数说明:-t 表示 TCP,-u 表示 UDP,-l 表示监听端口,-n 表示不解析名称,-p 表示显示关联进程。

查看指定 IP + 端口的活跃连接:

sudo ss -tn state all dst 192.168.1.100 dport 8080

查看收发字节数(非常重要):

ss -tni | grep -A1 '192.168.1.100:8080'

可以看到类似下面的输出:

cubic wscale:7,7 rto:204 rtt:0.345/0.069 ato:40 mss:1460rcv_space:29200 rcv_ssthresh:29200bytes_sent:123456 bytes_received:654321

这是判断"有没有数据在收发"的最快方式。

查看收发队列(排查卡顿和丢包):

ss 输出中有两个关键字段:

  • Recv-Q:接收队列积压字节数(不为 0 说明收包堵塞)
  • Send-Q:发送队列积压字节数(不为 0 说明发包堵塞)

正常情况下这两个值都应该为 0。

netstat 命令(兼容旧系统)

如果使用的系统比较旧,ss 命令不可用,可以用 netstat:

sudo netstat -ant | grep 192.168.1.100 | grep 8080

查看所有 TCP/UDP 监听端口:

netstat -tuln

查看网络接口的收发数据包统计:

netstat -i

四、nethogs:按进程查看流量

适用场景

想找到占用某个 IP 和端口的进程,查看进程级别的收发流量,用 nethogs 最合适。它和 iftop 不同,iftop 显示的是 IP 和端口,而 nethogs 直接显示进程名和 PID。

安装方法

CentOS:

sudo yum install nethogs -y

Ubuntu:

sudo apt install nethogs -y

常用命令

监控指定网卡,按进程展示流量:

sudo nethogs ens33

设置刷新频率(每 2 秒刷新一次):

sudo nethogs -d 2

交互操作

  • 按 m 键:修改统计单位(KB/s、MB/s 等)
  • 按 q 键:退出程序

补充:通过端口找进程

如果只想知道哪个进程占用了某个端口,可以用 lsof:

sudo lsof -i :8080

查看指定 IP:

sudo lsof -i@192.168.1.100:8080

五、iptraf-ng:交互式可视化流量统计

适用场景

需要图形化界面、精细化统计包数和字节数、多端口和多 IP 汇总,用 iptraf-ng 最合适。

安装方法

sudo yum install iptraf-ng -ysudo apt install iptraf-ng -y

使用步骤

  1. 执行 sudo iptraf-ng 进入交互式界面
  2. 选择 IP traffic monitor,然后选择网卡(比如 ens33)
  3. 按 F2 开启过滤,填入指定的 IP 和端口
  4. 界面会实时展示收包数、发包数、总字节、速率等统计数据

六、iptables:长期流量累计统计

适用场景

需求不是实时监控,而是对某个特定 IP 或端口的流量进行长期累计统计。可以利用 Linux 内核防火墙 iptables 的计数器功能。它的原理是添加一条不拦截的规则,仅用来匹配并统计流量。

注意:iptables 命令修改的是系统内核的网络规则。如果规则配置不当,可能会导致网络中断。请在测试环境或对操作有充分把握时再使用。

添加统计规则

统计进入服务器的特定端口流量:

sudo iptables -I INPUT -d <目标IP> -p tcp --dport <端口号>

统计从服务器出去的特定端口流量:

sudo iptables -I OUTPUT -s <源IP> -p tcp --sport <端口号>

查看统计数据

sudo iptables -L -v -n -x

参数说明:-v 显示详细信息(包含计数器),-n 以数字形式显示 IP 和端口,-x 显示精确的字节数值。

在输出结果中,pkts 列是匹配到的数据包总数,bytes 列是总字节数。

清除和删除规则

重置计数器:

sudo iptables -Z

删除统计规则:先用 sudo iptables -L INPUT --line-numbers 查看行号,再用 sudo iptables -D INPUT 1 删除(假设规则在第 1 行)。


七、ngrep:像 grep 一样看网络数据

适用场景

想看应用层协议的内容(比如 HTTP、Modbus、自定义协议),ngrep 非常适合。它的使用方式类似于 grep,但它是过滤网络数据的。

常用命令

sudo ngrep -q -d any port 8080

指定 IP:

sudo ngrep -q host 192.168.1.100 and port 8080

八、嵌入式 Linux 精简方案

如果设备是嵌入式 Linux 系统(比如 BusyBox、OpenWrt),系统上可能没有 tcpdump。可以用 /proc 文件系统来查看连接信息。

用 /proc/net/tcp 查看

cat /proc/net/tcp | grep ':1F90'

注意:端口号需要转换成十六进制。比如 8080 的十六进制是 1F90。

输出中第 5 列的字段说明:

tx_queue rx_queue tr tm->when retrnsmt

用 /proc 查看进程级收发统计

cat /proc/<pid>/net/netstat

或者:

cat /proc/<pid>/fdinfo/<fd>

九、一个完整的排查流程

当需要排查某个 IP 和端口的数据收发问题时,可以按照下面的步骤来做:

第一步:确认连接是否存在

ss -tnp | grep 8080

第二步:查看收发字节数

ss -tni | grep -A1 8080

第三步:实时抓包

sudo tcpdump -i any host 192.168.1.100 and port 8080 -A

工具选型速查表

需求场景
推荐工具
查看原始报文、交互数据、排查协议问题
tcpdump / ngrep
查看实时上传 / 下载速率(KB/s)
iftop
检查连接状态、队列积压、是否断连
ss / netstat
定位是哪个进程在产生流量
nethogs / lsof
交互式可视化、累计包 / 字节统计
iptraf-ng
长期整网卡流量趋势统计
vnstat / sar
对特定 IP / 端口做长期累计统计
iptables
嵌入式 Linux 精简方案
/proc/net/tcp

常见注意事项

  1. 权限问题:所有网卡抓包、流量监控命令都必须加 sudo。普通用户运行会报错。
  2. 网卡名称:云服务器和虚拟机的网卡名通常是 ens33,物理机多为 eth0,本地回环用 lo。可以用 ip a 命令查看本机网卡。
  3. 协议区分:业务端口优先过滤 TCP,DNS 和音视频等场景过滤 UDP。
  4. 回环地址:本地 127.0.0.1 通信时,以上命令完全兼容。

总结

Linux 下查看指定 IP 和端口的数据收发,没有单一的万能命令。需要根据实际需求来选择工具:

  • 看数据内容,用 tcpdump 或 ngrep
  • 看收发统计,用 ss -tni
  • 看哪个进程在收发,用 ss -tnp 或 lsof
  • 看实时速率,用 iftop
  • 嵌入式环境,用 /proc/net/tcp

选对工具,排查网络问题就会事半功倍。


参考链接:

  • tcpdump 官方文档. tcpdump.org. : https://www.tcpdump.org/
  • "ss(8) - Linux man page." man7.org. : https://man7.org/linux/man-pages/man8/ss.8.html
  • "netstat(8) - Linux man page." man7.org. : https://man7.org/linux/man-pages/man8/netstat.8.html
  • "iftop - display bandwidth usage on an interface." ex-parrot.com.: https://ex-parrot.com/~pdw/iftop/
  • "nethogs - net top tool grouping bandwidth per process." github.com. : https://github.com/raboof/nethogs
  • "iptables(8) - Linux man page." man7.org. : https://man7.org/linux/man-pages/man8/iptables.8.html
如果觉得不错,欢迎 点赞、收藏、转发 ,如果想第一时间收到推送,也可以给个星标⭐~~

最新文章

随机文章