linux初级_网络管理

TJCcc 发布于 2025-11-16 19 次阅读


一、Linux 网络命令使用场景速查表

使用场景主要命令替代命令示例说明
基本连通性测试pingfpingping 8.8.8.8测试主机是否可达
网络路径跟踪traceroutetracepath, mtrtraceroute google.com显示数据包经过的路由节点
端口连通性检查telnetnc, nmaptelnet 192.168.1.1 22快速测试TCP端口是否开放
端口扫描和服务发现nmapnc, masscannmap -sV 192.168.1.1详细扫描端口和服务版本
快速端口检查nc (netcat)telnet, nmapnc -zv host 80快速检查单个或少量端口
查看网络连接ssnetstatss -tulpn查看socket连接和监听端口
传统连接查看netstatssnetstat -tulpn老版本系统兼容
实时带宽监控iftopnethogs, bmoniftop -i eth0查看实时网络流量和连接
综合系统监控dstatvmstat + iostatdstat -n -c -d -m同时监控网络、CPU、磁盘、内存
查看路由表ip routeroute, netstat -rip route show查看路由表和网关信息
接口配置查看ip addrifconfigip addr show eth0查看网络接口IP和状态
DNS查询dignslookup, hostdig google.comDNS解析和故障排查
数据包抓包分析tcpdumptshark, wiresharktcpdump -i eth0 port 80网络包捕获和分析
HTTP服务测试curlwgetcurl -I http://example.comWeb服务和API测试

常见故障排查场景及命令选择

场景1:网站无法访问

# 1. 检查基本连通性
ping example.com

# 2. 检查DNS解析
dig example.com

# 3. 检查网络路径
traceroute example.com

# 4. 检查Web端口
telnet example.com 80
# 或
nc -zv example.com 80 443

场景2:服务器端口不通

# 1. 本地检查服务是否监听
ss -tulpn | grep :80

# 2. 扫描目标端口
nmap -p 80,443 目标服务器

# 3. 检查防火墙规则
iptables -L

# 4. 抓包分析
tcpdump -i any port 80

场景3:网络速度慢

# 1. 实时带宽监控
iftop -i eth0

# 2. 综合系统监控
dstat -n -c -d -m

# 3. 检查网络连接状态
ss -t state established

# 4. 跟踪网络质量
mtr google.com

场景4:服务连接问题

# 1. 查看所有活跃连接
ss -tulpn

# 2. 检查特定服务端口
nc -zv localhost 22 80 443

# 3. 监控新连接
tcpdump -i eth0 'tcp and port 22'

# 4. 测试服务响应
curl -v http://localhost:80

命令选择优先级指南

日常监控推荐

  • 连接监控: ss (比netstat更快)
  • 带宽监控: iftop (界面友好)
  • 综合监控: dstat (功能全面)

故障排查推荐

  • 快速检查: ping + nc + ss
  • 深入分析: nmap + tcpdump + traceroute

现代vs传统命令

用途现代命令传统命令建议
接口查看ip addrifconfig✅ 使用现代命令
路由查看ip routeroute✅ 使用现代命令
连接查看ssnetstat✅ 使用现代命令
邻居表ip neigharp✅ 使用现代命令

二、linux网络基础命令详解

安装这些工具

Ubuntu/Debian

sudo apt-get update
sudo apt-get install net-tools iproute2 iputils-ping traceroute telnet netcat nmap iftop dstat

CentOS/RHEL

sudo yum install net-tools iproute iputils traceroute telnet nc nmap iftop dstat

网关管理命令

1. 查看网关信息

# 查看当前网关
ip route show
route -n
netstat -rn

# 查看默认网关
ip route show default

输出:
default via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100
100.100.2.136 via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100
100.100.2.138 via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.18.0.0/18 dev eth0 proto kernel scope link src 172.18.62.96 metric 100
172.18.63.253 dev eth0 proto dhcp scope link src 172.18.62.96 metric 100
172.19.0.0/16 dev br-f4dd68315b38 proto kernel scope link src 172.19.0.1

解释:

好的,ip route 命令显示的是 Linux 系统的路由表,它决定了当你的计算机要发送数据包到某个目的地时,应该走哪条路径。我们可以把这个表理解为系统的“道路导航图”。

你提供的路由表信息非常典型,包含了一个云服务器或企业内网主机的常见路由。我们来逐条解释。

路由表核心概念

每条路由规则通常包含这几个要素:

  • 目标:数据包想去哪里?
  • 网关:下一个路口在哪里?
  • 设备:从哪个网卡出去?
  • 优先级:如果有多条路,哪条更优先?

逐条路由解释

1. 默认路由
default via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100
  • 含义:这是最重要的路由,处理所有发往互联网和其他未知网络的数据
  • 解读
    • default:表示“默认路由”,即所有没有在路由表中明确指定路径的目标IP,都走这条路。相当于导航系统中的“其他所有目的地”。
    • via 172.18.63.253:通过网关 172.18.63.253 转发。这个网关通常是你的路由器或三层交换机。
    • dev eth0:使用 eth0 这个网卡发送。
    • src 172.18.62.96:当从这个默认路由发出数据包时,自动使用源IP 172.18.62.96(这是你本机的IP)。
    • metric 100:路由优先级,值越小优先级越高。100是默认值。

简单说:所有不知道咋走的数据包,都通过 eth0 网卡发给网关 172.18.63.253 处理。

2. 特定主机路由
100.100.2.136 via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100 
100.100.2.138 via 172.18.63.253 dev eth0 proto dhcp src 172.18.62.96 metric 100
  • 含义:这是两条指向特定IP地址(而非网段)的路由。
  • 解读
    • 100.100.2.136100.100.2.138:是目标主机的精确IP地址。
    • 它们也通过相同的网关 172.18.63.253 和网卡 eth0 访问。
  • 背景:这种路由通常用于访问一些特定的内部服务。100.100.2.x 这个网段是阿里云的元数据服务器和内网服务网段。这两条路由确保了访问这些关键服务的流量即使有更优路径,也一定会走内网网关。
3. 直连路由
172.18.0.0/18 dev eth0 proto kernel scope link src 172.18.62.96 metric 100
  • 含义:这是本地网络直连路由
  • 解读
    • 172.18.0.0/18:表示目标网络,这个网络包含了你的IP 172.18.62.96
    • dev eth0:直接通过 eth0 网卡发送,不经过任何网关
    • scope link:表示这是直连通信。
  • 作用:所有要发送到 172.18.0.0/18 这个局域网内的数据包(例如,发给同事的电脑或同一VPC下的其他云服务器),都不需要经过网关,直接由 eth0 网卡通过二层网络(如交换机)送达。
4. 网关路由
172.18.63.253 dev eth0 proto dhcp scope link src 172.18.62.96 metric 100
  • 含义:这是一条指向网关本身的路由。
  • 解读:它告诉系统,要访问网关 172.18.63.253 这个具体的IP地址,也是直接通过 eth0 网卡发送。这是必须的,因为你要和网关通信,才能通过它访问外网。
5. Docker网络路由
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.19.0.0/16 dev br-f4dd68315b38 proto kernel scope link src 172.19.0.1
  • 含义:这两条路由是由 Docker 守护进程自动创建的,用于容器通信。
  • 解读
    • 172.17.0.0/16:Docker 的默认桥接网络 docker0
    • 172.19.0.0/16:一个自定义的Docker网络(桥接网络 br-f4dd68315b38)。
    • src 172.17.0.1 / src 172.19.0.1:这是宿主机在每个Docker网络中的IP地址,容器通过这个IP与宿主机通信。
    • linkdown:表示 docker0 桥接设备当前处于未激活状态(可能因为没有正在运行的容器使用该网络)。

路由决策流程总结(数据包如何选择道路)

当你的电脑要发送一个数据包到IP地址 X.X.X.X 时,系统会按以下顺序查询路由表,使用最长前缀匹配原则(即最精确的路由优先):

  1. 检查主机路由:路由表里有没有 X.X.X.X 的精确条目?(比如 100.100.2.136
  2. 检查网络路由:路由表里有没有包含 X.X.X.X 的网络段?(比如 172.18.0.0/18 或 Docker 的网络)
  3. 使用默认路由:如果以上都不匹配,则交给默认路由 default via 172.18.63.253

整体网络情况推断

结合 ip addrip route 的信息,可以推断出:

  • 这是一台阿里云ECS云服务器
  • 它位于 172.18.0.0/18 这个VPC网络中,内网IP是 172.18.62.96
  • 它的网关/路由器是 172.18.63.253
  • 它安装了Docker,并创建了至少两个Docker网络。
  • 它可以正常访问互联网(通过默认路由),也可以直接访问同一VPC下的其他云服务器(通过直连路由)。
  • 它通过特定路由确保能访问阿里云的内部服务(如元数据服务器)。

这个路由表共同构成了你这台服务器与外界通信的完整“道路系统”。

2. 添加/删除网关

# 临时添加默认网关
sudo ip route add default via <网关IP> dev <接口名>

# 永久添加网关(修改配置文件)
# Ubuntu/Debian: /etc/netplan/*.yaml
# CentOS/RHEL: /etc/sysconfig/network-scripts/ifcfg-<接口名>

# 删除默认网关
sudo ip route del default

网络诊断工具

1. ping - 测试网络连通性

# 基本用法
ping <IP地址或域名>
ping 192.168.1.1
ping google.com

# 指定次数
ping -c 4 google.com

# 指定间隔(秒)
ping -i 2 google.com

# 指定数据包大小
ping -s 1024 google.com

# 持续ping
ping -t google.com

2. traceroute - 跟踪数据包路径

# 基本用法
traceroute <目标地址>
traceroute google.com

# 不进行DNS解析(显示IP)
traceroute -n google.com

# 指定最大跳数
traceroute -m 30 google.com

# 使用ICMP(需要权限)
sudo traceroute -I google.com

# 替代工具
tracepath google.com
mtr google.com

3. telnet - 测试端口连通性

# 测试端口连接
telnet <IP地址> <端口>
telnet 192.168.1.1 80
telnet google.com 443

# 检查telnet服务是否安装
which telnet

# 安装telnet客户端
sudo apt-get install telnet    # Ubuntu/Debian
sudo yum install telnet        # CentOS/RHEL

4. nc (netcat) - 网络瑞士军刀

# 端口扫描
nc -zv <IP地址> <端口范围>
nc -zv 192.168.1.1 80
nc -zv 192.168.1.1 20-80

# 监听端口
nc -l -p <端口号>
nc -l -p 9999

# 文件传输
# 接收方: nc -l -p 9999 > received_file
# 发送方: nc <接收方IP> 9999 < send_file

# UDP测试
nc -u <IP地址> <端口>

# 保持连接
nc -k -l -p 9999

5. nmap - 网络扫描工具

# 基本扫描
nmap <目标IP>
nmap 192.168.1.0/24

# 端口扫描
nmap -p <端口> <目标IP>
nmap -p 80,443,22 192.168.1.1
nmap -p 1-1000 192.168.1.1

# 服务版本检测
nmap -sV <目标IP>

# 操作系统检测
nmap -O <目标IP>

# 快速扫描
nmap -F <目标IP>

# 隐蔽扫描
nmap -sS <目标IP>

# 输出结果到文件
nmap -oN result.txt <目标IP>

网络连接监控

1. netstat - 网络统计信息

# 查看所有连接
netstat -a

# 查看TCP连接
netstat -at

# 查看UDP连接
netstat -au

# 显示监听端口
netstat -l

# 显示TCP监听端口
netstat -lt

# 显示进程信息
netstat -tulpn

# 显示路由表
netstat -r

# 统计信息
netstat -s

2. ss - socket统计(netstat替代品)

# 查看所有连接
ss -a

# 查看TCP连接
ss -t

# 查看UDP连接
ss -u

# 显示监听端口
ss -l

# 显示进程信息
ss -tulpn

# 按状态过滤
ss -t state established
ss -t state listening

# 显示计时器信息
ss -to

3. iftop - 实时带宽监控

# 监控所有接口
sudo iftop

# 监控指定接口
sudo iftop -i eth0

# 显示端口号
sudo iftop -P

# 不进行DNS解析
sudo iftop -n

# 指定网络接口
sudo iftop -i wlan0

4. dstat - 系统资源统计

# 基本用法
dstat

# 指定输出项目
dstat -c -d -n -m

# 查看网络使用情况
dstat -n

# 查看TCP统计
dstat --tcp

# 组合查看
dstat -c -d -n -m --tcp --udp

# 输出到CSV文件
dstat --output /tmp/dstat.csv

其他有用命令

1. 网络接口信息

# 查看所有接口
ip addr show
ifconfig

# 查看指定接口
ip addr show eth0

# 启用/禁用接口
sudo ip link set eth0 up
sudo ip link set eth0 down

输出:
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:16:3e:0b:3b:e0 brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.18.62.96/18 metric 100 brd 172.18.63.255 scope global dynamic eth0
valid_lft 1890911974sec preferred_lft 1890911974sec
inet6 fe80::216:3eff:fe0b:3be0/64 scope link
valid_lft forever preferred_lft forever

我们来逐行详细解释这个 eth0 接口的输出信息。这是一个非常典型且状态健康的以太网接口信息。

这是一个名为 eth0 的以太网接口,它已经启动并正常连接,通过 DHCP 获取到了一个 IPv4 地址 172.18.62.96,并且其 IPv6 链路本地地址也已配置。


第一行:接口核心状态

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

  • 2::接口的系统索引号。2 表示这是系统中识别的第二个网络接口。
  • eth0::网络接口的名称。这是最传统的以太网(有线网卡)命名方式,常见于虚拟机、容器或老式服务器。
  • <BROADCAST,MULTICAST,UP,LOWER_UP>接口标志(状态)——这是关键信息
    • BROADCAST:支持广播通信。
    • MULTICAST:支持组播通信。
    • UP接口在软件层面已被激活(启用)
    • LOWER_UP物理链路已连接(网线已插好)UPLOWER_UP 同时出现,表明该接口逻辑和物理层面都工作正常。
  • mtu 1500:最大传输单元,1500字节是以太网的标准值。
  • qdisc fq_codel:排队规则。fq_codel 是一种先进的流量管理算法,用于控制数据包发送顺序,有助于改善网络延迟和拥堵。
  • state UP:再次确认接口的管理状态为启用
  • group default qlen 1000:属于默认组,传输队列长度为1000个数据包。

第二行:链路层(MAC地址)

link/ether 00:16:3e:0b:3b:e0 brd ff:ff:ff:ff:ff:ff

  • link/ether:表明这是一个以太网接口。
  • 00:16:3e:0b:3b:e0:接口的 MAC 地址(物理地址)00:16:3e 这个前缀通常与 Xen 虚拟机或云服务商(如AWS,阿里云) 的虚拟化网卡有关。
  • brd ff:ff:ff:ff:ff:ff:广播地址。

第三、四行:接口别名

altname enp0s5
altname ens5

  • 这表示该接口还有另外两个可用的名称 enp0s5ens5。这是现代 Linux 为了提供更一致的网络接口命名而引入的功能。系统可能会使用这些名字中的任何一个来指向同一个物理设备 eth0

第五、六行:IPv4 地址信息

inet 172.18.62.96/18 metric 100 brd 172.18.63.255 scope global dynamic eth0
valid_lft 1890911974sec preferred_lft 1890911974sec

  • inet:表示这是 IPv4 地址
  • 172.18.62.96/18IPv4 地址和子网掩码
    • 172.18.62.96 是本机获取到的 IP 地址。
    • /18 是 CIDR 表示法,子网掩码为 255.255.192.0。这个网络范围很大,从 172.18.0.1172.18.63.254
  • metric 100:路由度量值。当有多个网络接口时,系统会优先选择度量值较小的路径。100是一个比较常见的默认值。
  • brd 172.18.63.255:该子网的广播地址。
  • scope global:此 IP 地址是全局有效的,可以与其他网络进行通信(不是仅本地链路)。
  • dynamic关键信息,表示此 IP 地址是通过 DHCP 服务器自动获取的,而非手动静态配置。
  • valid_lft ... preferred_lft ...:IP 地址的生存时间。1890911974秒 约等于 59年,这强烈暗示这是一个云平台(如阿里云) 分配的“永久”DHCP 地址。在云环境中,弹性IP通常通过这种方式分配,虽然技术上仍是“动态”,但实际不会过期。

第七、八行:IPv6 地址信息

inet6 fe80::216:3eff:fe0b:3be0/64 scope link
valid_lft forever preferred_lft forever

  • inet6:表示这是 IPv6 地址
  • fe80::216:3eff:fe0b:3be0/64:这是一个 IPv6 链路本地地址
    • fe80::/10 是链路本地地址的前缀。
    • 这个地址是由 MAC 地址 00:16:3e:0b:3b:e0 根据 IPv6 规范自动生成的。
  • scope link:表示此地址仅用于在同一个物理链路或交换机内的设备之间通信,不能被路由器转发到其他网络。
  • valid_lft forever preferred_lft forever:此地址永久有效。

总结

这个 eth0 接口的状态非常健康:

  1. 连接状态<UP,LOWER_UP> 表明接口已启用且网线已连接,物理链路通畅。
  2. IP地址:它通过DHCP自动获取到了一个 IPv4 地址 172.18.62.96,子网很大,很可能位于一个云服务商或大型企业内网中。
  3. 地址类型:IP是动态获取(dynamic 的,但租期极长,相当于静态IP使用。
  4. 云服务器特征:MAC地址前缀 00:16:3e 和超长的DHCP租期都强烈表明这是一台云服务器(例如阿里云ECS) 的网卡信息。
  5. IPv6:同时配置了标准的 IPv6 链路本地地址,用于本地网络通信。

简单来说:这块网卡工作正常,已成功连接到网络,并获取到了内网IP 172.18.62.96,可以正常进行网络通信。

2. DNS查询

# DNS查询
nslookup <域名>
dig <域名>

# 反向DNS查询
nslookup <IP地址>
dig -x <IP地址>

3. 网络配置

# 查看主机名
hostname

# 查看DNS配置
cat /etc/resolv.conf

# 查看主机文件
cat /etc/hosts

4. 防火墙相关

# iptables查看规则
sudo iptables -L

# ufw防火墙(Ubuntu)
sudo ufw status
sudo ufw allow 22/tcp

实用命令组合

1. 快速网络检查

# 检查网络连通性 + 路由跟踪
ping -c 3 google.com && traceroute google.com

# 检查端口开放情况
nc -zv localhost 22 80 443

2. 监控网络连接

# 实时监控网络连接
watch -n 1 "netstat -tulpn | grep ESTABLISHED"

# 监控带宽使用
sudo iftop -i eth0 -n

3. 网络故障排查流程

# 1. 检查本地网络
ip addr show
ping 127.0.0.1

# 2. 检查网关
ip route show
ping <网关IP>

# 3. 检查DNS
nslookup google.com
ping google.com

# 4. 检查远程服务
telnet <目标IP> <端口>
nc -zv <目标IP> <端口>

三、tcpdump抓包详解

基本概念

tcpdump:命令行网络包分析工具,可以捕获和分析网络数据包

安装和基本用法

安装

# Ubuntu/Debian
sudo apt-get install tcpdump

# CentOS/RHEL
sudo yum install tcpdump

# 检查版本
tcpdump --version

基本语法

tcpdump [选项] [过滤表达式]

常用选项详解

1. 接口相关

# 监听指定接口
tcpdump -i eth0

# 监听所有接口
tcpdump -i any

# 列出所有可用接口
tcpdump -D

# 监控回环接口
tcpdump -i lo

2. 输出控制

# 不解析主机名(显示IP)
tcpdump -n

# 不解析端口服务名
tcpdump -nn

# 详细输出
tcpdump -v
tcpdump -vv
tcpdump -vvv

# 十六进制和ASCII输出
tcpdump -X
tcpdump -XX

# 只显示包数量,不显示内容
tcpdump -c

3. 文件操作

# 保存到文件
tcpdump -w capture.pcap

# 从文件读取
tcpdump -r capture.pcap

# 同时显示并保存
tcpdump -w capture.pcap -U -i eth0

# 限制文件大小
tcpdump -C 10 -w capture.pcap  # 每10MB一个文件
tcpdump -W 5 -C 10 -w capture.pcap  # 保留5个文件,每个10MB

过滤表达式

1. 主机过滤

# 抓取特定主机的流量
tcpdump host 192.168.1.100

# 源地址过滤
tcpdump src host 192.168.1.100

# 目标地址过滤
tcpdump dst host 192.168.1.100

# 域名过滤
tcpdump host google.com

2. 端口过滤

# 特定端口
tcpdump port 80

# 端口范围
tcpdump portrange 20-23

# 源端口
tcpdump src port 53

# 目标端口
tcpdump dst port 443

3. 协议过滤

# TCP协议
tcpdump tcp

# UDP协议
tcpdump udp

# ICMP协议
tcpdump icmp

# ARP协议
tcpdump arp

4. 网络段过滤

# 特定网络
tcpdump net 192.168.1.0/24

# 源网络
tcpdump src net 192.168.1.0/24

# 目标网络
tcpdump dst net 10.0.0.0/8

高级过滤技巧

1. 逻辑运算符

# AND 运算
tcpdump host 192.168.1.100 and port 80

# OR 运算
tcpdump port 80 or port 443

# NOT 运算
tcpdump not port 22

# 组合使用
tcpdump host 192.168.1.100 and (port 80 or port 443)

2. 数据包大小过滤

# 大于指定大小
tcpdump greater 1000

# 小于指定大小
tcpdump less 512

# 范围过滤
tcpdump greater 64 and less 128

3. TCP标志位过滤

# SYN包
tcpdump 'tcp[tcpflags] & tcp-syn != 0'

# ACK包
tcpdump 'tcp[tcpflags] & tcp-ack != 0'

# SYN-ACK包
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'

# RST包
tcpdump 'tcp[tcpflags] & tcp-rst != 0'

# FIN包
tcpdump 'tcp[tcpflags] & tcp-fin != 0'

实用场景示例

1. HTTP流量分析

# 抓取HTTP流量
tcpdump -i any -A -s 0 'tcp port 80'

# 抓取HTTP请求头
tcpdump -i any -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

# 抓取包含特定Host头的流量
tcpdump -i any -A -s 0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

2. DNS查询监控

# 监控DNS查询
tcpdump -i any -n -s 0 'port 53'

# 只显示DNS查询
tcpdump -i any -n 'udp port 53 and src host 192.168.1.100'

# 显示DNS响应
tcpdump -i any -n 'udp port 53 and dst host 192.168.1.100'

3. SSH连接监控

# 监控SSH连接尝试
tcpdump -i any -n 'tcp port 22'

# 监控特定IP的SSH连接
tcpdump -i any -n 'tcp port 22 and host 192.168.1.100'

4. 网络故障排查

# 检查ICMP(ping)包
tcpdump -i any -n 'icmp'

# 检查TCP连接建立
tcpdump -i any -n 'tcp and (tcp[tcpflags] & tcp-syn != 0)'

# 检查TCP连接关闭
tcpdump -i any -n 'tcp and (tcp[tcpflags] & tcp-fin != 0)'

5. 性能分析

# 检查重传
tcpdump -i any -n 'tcp and (tcp[tcpflags] & tcp-ack != 0) and (tcp[14:2] == 0)'

# 检查零窗口(流量控制)
tcpdump -i any -n 'tcp[14:2] == 0'

输出解读

典型输出示例

15:30:25.123456 IP 192.168.1.100.54321 > 93.184.216.34.80: Flags [S], seq 1234567890, win 64240, options [mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 7], length 0

字段解释:

  • 15:30:25.123456:时间戳
  • IP:协议类型
  • 192.168.1.100.54321:源IP和端口
  • >:方向
  • 93.184.216.34.80:目标IP和端口
  • Flags [S]:TCP标志(S=SYN)
  • seq 1234567890:序列号
  • win 64240:窗口大小
  • length 0:数据长度

实用技巧

1. 实时统计

# 每5秒显示统计信息
tcpdump -i any -w - | pv -bert > /dev/null

# 统计TCP标志位
tcpdump -i any -n 'tcp' | awk '{print $7}' | sort | uniq -c

2. 组合使用其他工具

# 结合grep过滤
tcpdump -i any -A | grep "password"

# 结合awk分析
tcpdump -i any -n | awk '{print $3, $5}' | sort | uniq -c

# 实时显示Top连接
tcpdump -i any -n | awk -F'[ .]' '/IP/ {print $3"."$4"."$5"."$6}' | sort | uniq -c | sort -nr

3. 性能优化

# 减少缓冲区大小(避免丢包)
tcpdump -B 4096 -i eth0

# 使用内核过滤(BPF)提高性能
tcpdump -i eth0 'port 80'

# 限制捕获包大小
tcpdump -s 96 -i eth0  # 只捕获前96字节

常见问题排查

1. 权限问题

# 需要root权限
sudo tcpdump -i any

# 或者设置capabilities
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

2. 接口找不到

# 查看可用接口
tcpdump -D

# 或者使用
ip link show

3. 保存文件分析

# 捕获并保存
tcpdump -i any -w capture.pcap

# 使用Wireshark分析
wireshark capture.pcap

# 或者用tcpdump读取分析
tcpdump -r capture.pcap -n -A

速查表

场景命令
基础抓包tcpdump -i eth0
不解析主机名tcpdump -n -i eth0
保存到文件tcpdump -w file.pcap -i eth0
读取文件tcpdump -r file.pcap
HTTP流量tcpdump -i any -A 'port 80'
DNS查询tcpdump -i any -n 'port 53'
特定主机tcpdump host 192.168.1.100
特定端口tcpdump port 443
TCP SYN包tcpdump 'tcp[tcpflags] & tcp-syn != 0'