在 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 的字节数。 - 根据需求选择合适的工具即可!