Skip to content

网络命令

网络配置

ip - 网络配置工具

地址管理

bash
ip addr                            # 显示所有地址
ip addr show eth0                  # 显示指定接口
ip addr add 192.168.1.100/24 dev eth0    # 添加 IP
ip addr del 192.168.1.100/24 dev eth0    # 删除 IP
ip -6 addr add 2001:db8::1/64 dev eth0   # 添加 IPv6
ip addr flush eth0                 # 清除所有地址
ip a                               # 简写

接口管理

bash
ip link                            # 显示所有接口
ip link show eth0                  # 显示指定接口
ip link set eth0 up                # 启用接口
ip link set eth0 down              # 禁用接口
ip link set eth0 mtu 1500          # 设置 MTU
ip link set eth0 name eth1         # 重命名接口
ip link add veth0 type veth peer name veth1    # 创建虚拟接口
ip link delete veth0               # 删除接口

路由管理

bash
ip route                           # 显示路由表
ip route show                      # 显示路由表
ip route add default via 192.168.1.1    # 添加默认路由
ip route add 10.0.0.0/8 via 192.168.1.1  # 添加路由
ip route del default               # 删除默认路由
ip route del 10.0.0.0/8            # 删除路由
ip route get 8.8.8.8               # 查看到目标的路径
ip route flush cache               # 清除路由缓存
ip r                               # 简写

ifconfig - 传统网络配置

bash
ifconfig                           # 显示所有接口
ifconfig eth0                      # 显示指定接口
ifconfig eth0 up                   # 启用接口
ifconfig eth0 down                 # 禁用接口
ifconfig eth0 192.168.1.100        # 设置 IP
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
ifconfig eth0:1 192.168.1.101      # 添加虚拟 IP
ifconfig eth0 mtu 1500             # 设置 MTU
ifconfig eth0 promisc              # 启用混杂模式
ifconfig eth0 -promisc             # 禁用混杂模式

网络配置文件

Ubuntu/Debian

/etc/netplan/01-netcfg.yaml:

yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
    eth1:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
bash
netplan apply                      # 应用配置

CentOS/RHEL

/etc/sysconfig/network-scripts/ifcfg-eth0:

TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
bash
nmcli connection reload
nmcli connection up eth0

网络诊断

ping - 测试连通性

bash
ping 8.8.8.8                       # 测试连通性
ping -c 5 8.8.8.8                  # 发送5个包
ping -i 2 8.8.8.8                  # 间隔2秒
ping -s 1000 8.8.8.8               # 指定包大小
ping -t 64 8.8.8.8                 # 指定 TTL
ping -W 5 8.8.8.8                  # 超时时间5秒
ping -q 8.8.8.8                    # 安静模式
ping6 2001:db8::1                  # IPv6

traceroute - 路由追踪

bash
traceroute 8.8.8.8                 # 追踪路由
traceroute -n 8.8.8.8              # 不解析主机名
traceroute -I 8.8.8.8              # 使用 ICMP
traceroute -T 8.8.8.8              # 使用 TCP
traceroute -p 80 8.8.8.8           # 指定端口
traceroute -m 30 8.8.8.8           # 最大跳数
traceroute6 2001:db8::1            # IPv6
tracepath 8.8.8.8                  # 简化版追踪

mtr - 网络诊断工具

bash
mtr 8.8.8.8                        # 实时追踪
mtr -r 8.8.8.8                     # 报告模式
mtr -c 10 8.8.8.8                  # 发送10个包
mtr -n 8.8.8.8                     # 不解析主机名
mtr -T 8.8.8.8                     # 使用 TCP
mtr -u 8.8.8.8                     # 使用 UDP
mtr -p 80 8.8.8.8                  # 指定端口

ss - Socket 统计

bash
ss                                 # 显示所有 socket
ss -t                              # TCP socket
ss -u                              # UDP socket
ss -l                              # 监听 socket
ss -n                              # 不解析服务名
ss -a                              # 所有 socket
ss -p                              # 显示进程
ss -tulpn                          # 常用组合
ss -t state established            # 已建立的连接
ss -t state time-wait              # TIME_WAIT 状态
ss -s                              # 统计信息
ss -4                              # IPv4
ss -6                              # IPv6
ss -t src :80                      # 指定源端口
ss -t dst :80                      # 指定目标端口

netstat - 网络统计

bash
netstat                            # 显示所有连接
netstat -t                         # TCP 连接
netstat -u                         # UDP 连接
netstat -l                         # 监听端口
netstat -n                         # 不解析
netstat -p                         # 显示进程
netstat -a                         # 所有连接
netstat -tulpn                     # 常用组合
netstat -r                         # 路由表
netstat -i                         # 接口统计
netstat -s                         # 协议统计
netstat -c                         # 持续刷新

nc - 网络工具

端口扫描

bash
nc -zv 192.168.1.1 80              # 扫描单个端口
nc -zv 192.168.1.1 20-80           # 扫描端口范围
nc -zv 192.168.1.1 80 443 8080     # 扫描多个端口
nc -zvn 192.168.1.1 80             # 不解析 DNS

传输数据

bash
nc -l 1234                         # 监听端口(服务端)
nc 192.168.1.1 1234                # 连接端口(客户端)

nc -l 1234 > received.txt          # 接收文件(服务端)
nc 192.168.1.1 1234 < file.txt     # 发送文件(客户端)

nc -l 1234 | tar xzf -             # 接收目录(服务端)
tar czf - dir/ | nc 192.168.1.1 1234    # 发送目录(客户端)

其他用法

bash
nc -u 192.168.1.1 1234             # UDP 模式
nc -l 1234 -k                      # 保持监听
nc -l 1234 -e /bin/bash            # 执行命令(危险)
echo "GET / HTTP/1.0\r\n\r\n" | nc 192.168.1.1 80    # HTTP 请求

nmap - 网络扫描

bash
nmap 192.168.1.1                   # 扫描主机
nmap -sS 192.168.1.1               # SYN 扫描
nmap -sT 192.168.1.1               # TCP 扫描
nmap -sU 192.168.1.1               # UDP 扫描
nmap -sP 192.168.1.0/24            # Ping 扫描
nmap -p 80,443 192.168.1.1         # 指定端口
nmap -p 1-1000 192.168.1.1         # 端口范围
nmap -A 192.168.1.1                # 全面扫描
nmap -O 192.168.1.1                # 系统识别
nmap -sV 192.168.1.1               # 版本检测
nmap -v 192.168.1.1                # 详细输出
nmap -oN output.txt 192.168.1.1    # 输出到文件

curl - 数据传输

bash
curl http://example.com            # GET 请求
curl -I http://example.com         # 只获取头部
curl -i http://example.com         # 包含头部
curl -v http://example.com         # 详细输出
curl -X POST http://example.com    # POST 请求
curl -d "name=value" http://example.com    # 发送数据
curl -d @data.json http://example.com      # 从文件发送
curl -H "Content-Type: application/json" http://example.com    # 自定义头
curl -u user:pass http://example.com       # 基本认证
curl -b "cookie=value" http://example.com  # 发送 Cookie
curl -c cookies.txt http://example.com     # 保存 Cookie
curl -L http://example.com         # 跟随重定向
curl -o file.txt http://example.com/file   # 保存文件
curl -O http://example.com/file.txt        # 使用原文件名保存
curl -C - -O http://example.com/file       # 断点续传
curl -x http://proxy:8080 http://example.com    # 使用代理
curl --connect-timeout 10 http://example.com    # 连接超时
curl -k https://example.com        # 忽略证书

wget - 文件下载

bash
wget http://example.com/file.txt    # 下载文件
wget -O newname.txt http://example.com/file.txt    # 指定文件名
wget -c http://example.com/file.txt    # 断点续传
wget -b http://example.com/file.txt    # 后台下载
wget -r http://example.com/            # 递归下载
wget -np -r http://example.com/        # 不递归父目录
wget -nd -r http://example.com/        # 不创建目录
wget -A "*.jpg" -r http://example.com/ # 只下载指定类型
wget -R "*.html" -r http://example.com # 排除指定类型
wget -l 2 -r http://example.com/       # 限制递归深度
wget -p http://example.com/page.html   # 下载页面资源
wget -k -r http://example.com/         # 转换链接
wget --limit-rate=100k http://example.com/file.txt    # 限速
wget -t 5 http://example.com/file.txt  # 重试次数
wget -T 30 http://example.com/file.txt # 超时时间
wget -q http://example.com/file.txt    # 安静模式
wget --spider http://example.com/file.txt    # 只检查

DNS 查询

dig - DNS 查询工具

bash
dig example.com                    # 查询 A 记录
dig @8.8.8.8 example.com           # 指定 DNS 服务器
dig example.com A                  # 指定记录类型
dig example.com MX                 # 查询 MX 记录
dig example.com NS                 # 查询 NS 记录
dig example.com TXT                # 查询 TXT 记录
dig example.com CNAME              # 查询 CNAME 记录
dig example.com ANY                # 查询所有记录
dig -x 192.168.1.1                 # 反向查询
dig +short example.com             # 简短输出
dig +trace example.com             # 追踪查询过程
dig +noall +answer example.com     # 只显示答案

nslookup - DNS 查询

bash
nslookup example.com               # 查询域名
nslookup example.com 8.8.8.8       # 指定 DNS 服务器
nslookup -type=MX example.com      # 指定记录类型
nslookup -type=any example.com     # 所有记录
nslookup 192.168.1.1               # 反向查询

host - DNS 查询

bash
host example.com                   # 查询域名
host -t A example.com              # A 记录
host -t MX example.com             # MX 记录
host -t NS example.com             # NS 记录
host -t TXT example.com            # TXT 记录
host 192.168.1.1                   # 反向查询
host example.com 8.8.8.8           # 指定 DNS 服务器

防火墙

iptables - 防火墙规则

bash
iptables -L                        # 列出规则
iptables -L -n                     # 不解析
iptables -L -v                     # 详细信息
iptables -L --line-numbers         # 显示行号

iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # 允许 SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 允许 HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # 允许 HTTPS
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT    # 允许网段
iptables -A INPUT -i lo -j ACCEPT                # 允许回环
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -D INPUT 1                # 删除第1条规则
iptables -F                        # 清空所有规则
iptables -F INPUT                  # 清空 INPUT 链
iptables -P INPUT DROP             # 设置默认策略

firewalld - 防火墙管理

bash
systemctl start firewalld          # 启动
systemctl stop firewalld           # 停止
systemctl enable firewalld         # 开机自启
systemctl disable firewalld        # 禁用自启

firewall-cmd --state               # 查看状态
firewall-cmd --list-all            # 列出所有规则
firewall-cmd --list-ports          # 列出端口
firewall-cmd --list-services       # 列出服务

firewall-cmd --add-port=80/tcp     # 添加端口(临时)
firewall-cmd --add-port=80/tcp --permanent    # 永久添加
firewall-cmd --remove-port=80/tcp --permanent # 永久移除

firewall-cmd --add-service=http    # 添加服务
firewall-cmd --add-service=http --permanent
firewall-cmd --remove-service=http --permanent

firewall-cmd --reload              # 重新加载
firewall-cmd --runtime-to-permanent    # 保存临时规则

ufw - Ubuntu 防火墙

bash
ufw enable                         # 启用
ufw disable                        # 禁用
ufw status                         # 查看状态
ufw status numbered                # 编号显示

ufw allow 22                       # 允许端口
ufw allow 80/tcp                   # 允许 TCP 端口
ufw allow from 192.168.1.0/24      # 允许网段
ufw allow from 192.168.1.1 to any port 22    # 允许 IP 访问端口

ufw deny 80                        # 拒绝端口
ufw delete allow 80                # 删除规则
ufw reset                          # 重置

网络抓包

tcpdump - 抓包工具

bash
tcpdump                            # 抓取所有包
tcpdump -i eth0                    # 指定接口
tcpdump -n                         # 不解析
tcpdump -nn                        # 不解析端口
tcpdump -c 100                     # 抓取100个包
tcpdump -w capture.pcap            # 保存到文件
tcpdump -r capture.pcap            # 读取文件
tcpdump host 192.168.1.1           # 指定主机
tcpdump src 192.168.1.1            # 源主机
tcpdump dst 192.168.1.1            # 目标主机
tcpdump port 80                    # 指定端口
tcpdump tcp port 80                # TCP 端口
tcpdump udp port 53                # UDP 端口
tcpdump -i eth0 tcp port 80 -w http.pcap    # 组合使用
tcpdump -A                         # ASCII 输出
tcpdump -X                         # 十六进制和 ASCII
tcpdump -v                         # 详细输出

其他网络命令

hostname - 主机名

bash
hostname                           # 显示主机名
hostname -I                        # 显示 IP 地址
hostname -f                        # FQDN
hostnamectl                        # 主机信息
hostnamectl set-hostname newname   # 设置主机名

arp - ARP 表

bash
arp -a                             # 显示 ARP 表
arp -n                             # 不解析
arp -d 192.168.1.1                 # 删除条目
arp -s 192.168.1.1 00:11:22:33:44:55    # 添加条目
ip neigh                           # 新版命令

route - 路由表

bash
route                              # 显示路由表
route -n                           # 不解析
route add default gw 192.168.1.1   # 添加默认网关
route del default                  # 删除默认网关
route add -net 10.0.0.0/8 gw 192.168.1.1    # 添加路由
route del -net 10.0.0.0/8          # 删除路由

ethtool - 网卡工具

bash
ethtool eth0                       # 网卡信息
ethtool -i eth0                    # 驱动信息
ethtool -S eth0                    # 统计信息
ethtool -a eth0                    # 暂停参数
ethtool -k eth0                    # 卸载设置
ethtool -s eth0 speed 1000 duplex full    # 设置速度和双工
ethtool -s eth0 autoneg on         # 自动协商

下一步学习