在 Linux 系统中,可以通过以下方法查看 UDP 和 TCP 的流量(received
和 sent
数据字节大小):
1. 使用 /proc/net/snmp
文件
/proc/net/snmp
文件包含了详细的网络统计信息,包括 TCP 和 UDP 的接收和发送字节数。
查看 TCP 和 UDP 的字节数
bash
cat /proc/net/snmp
输出示例:
Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates
Ip: 1 64 123456 0 0 0 0 0 123456 987654 0 0 0 0 0 0 0 0 0
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts InCsumErrors
Tcp: 1 200 120000 -1 500 300 0 0 100 123456 987654 0 0 0 0
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors
Udp: 23456 0 0 12345 0 0 0
提取 TCP 和 UDP 的字节数
-
TCP 接收字节数(InSegs):
bashawk '/Tcp:/ {getline; print $10}' /proc/net/snmp
-
TCP 发送字节数(OutSegs):
bashawk '/Tcp:/ {getline; print $11}' /proc/net/snmp
-
UDP 接收字节数(InDatagrams):
bashawk '/Udp:/ {getline; print $4}' /proc/net/snmp
-
UDP 发送字节数(OutDatagrams):
bashawk '/Udp:/ {getline; print $5}' /proc/net/snmp
2. 使用 nstat
命令
nstat
是一个轻量级的工具,用于显示网络统计信息。
查看 TCP 和 UDP 的字节数
bash
nstat -z
输出示例:
TcpInSegs 123456
TcpOutSegs 987654
UdpInDatagrams 23456
UdpOutDatagrams 12345
提取 TCP 和 UDP 的字节数
-
TCP 接收字节数:
bashnstat -z | grep TcpInSegs | awk '{print $2}'
-
TCP 发送字节数:
bashnstat -z | grep TcpOutSegs | awk '{print $2}'
-
UDP 接收字节数:
bashnstat -z | grep UdpInDatagrams | awk '{print $2}'
-
UDP 发送字节数:
bashnstat -z | grep UdpOutDatagrams | awk '{print $2}'
3. 使用 ss
命令
ss
可以显示 TCP 和 UDP 的统计信息,但默认不显示字节数。可以结合 /proc/net/snmp
或 nstat
使用。
4. 使用 iptables
统计流量
如果需要更精确的统计,可以使用 iptables
来记录 TCP 和 UDP 的流量。
添加规则统计流量
bash
sudo iptables -A INPUT -p tcp
sudo iptables -A OUTPUT -p tcp
sudo iptables -A INPUT -p udp
sudo iptables -A OUTPUT -p udp
查看统计结果
bash
sudo iptables -L -v -n
输出示例:
Chain INPUT (policy ACCEPT 123456 packets, 98765432 bytes)
pkts bytes target prot opt in out source destination
1000 50000 tcp -- * * 0.0.0.0/0 0.0.0.0/0
500 25000 udp -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 987654 packets, 123456789 bytes)
pkts bytes target prot opt in out source destination
2000 100000 tcp -- * * 0.0.0.0/0 0.0.0.0/0
1000 50000 udp -- * * 0.0.0.0/0 0.0.0.0/0
- TCP 接收字节数 :查看
INPUT
链中tcp
的bytes
。 - TCP 发送字节数 :查看
OUTPUT
链中tcp
的bytes
。 - UDP 接收字节数 :查看
INPUT
链中udp
的bytes
。 - UDP 发送字节数 :查看
OUTPUT
链中udp
的bytes
。
5. 使用 tcpdump
统计流量
如果需要精确统计 TCP 和 UDP 的字节数,可以使用 tcpdump
捕获流量并分析。
捕获 TCP 流量
bash
sudo tcpdump -i eth0 tcp -w tcp_traffic.pcap
捕获 UDP 流量
bash
sudo tcpdump -i eth0 udp -w udp_traffic.pcap
使用 tshark
分析流量
bash
tshark -r tcp_traffic.pcap -qz io,stat,0
tshark -r udp_traffic.pcap -qz io,stat,0
总结
- 使用
/proc/net/snmp
或nstat
可以快速查看 TCP 和 UDP 的字节数。 - 使用
iptables
可以实时统计 TCP 和 UDP 的流量。 - 使用
tcpdump
和tshark
可以精确分析 TCP 和 UDP 的字节数。 - 根据需求选择合适的工具即可!