Appearance
网络命令
网络配置
ifconfig - 网络接口配置
bash
ifconfig # 显示所有接口
ifconfig en0 # 显示指定接口
ifconfig en0 up # 启用接口
ifconfig en0 down # 禁用接口
ifconfig en0 192.168.1.100 # 设置 IP
ifconfig en0 192.168.1.100 netmask 255.255.255.0
ifconfig en0 inet6 add 2001:db8::1/64 # 添加 IPv6networksetup - 网络设置
bash
networksetup -listallnetworkservices # 列出网络服务
networksetup -listnetworkserviceorder # 显示服务顺序
networksetup -getinfo "Wi-Fi" # 获取服务信息
networksetup -setmanual "Wi-Fi" 192.168.1.100 255.255.255.0 192.168.1.1
networksetup -setdhcp "Wi-Fi" # 设置 DHCP
networksetup -setdnsservers "Wi-Fi" 8.8.8.8 8.8.4.4
networksetup -setsearchdomains "Wi-Fi" example.com
networksetup -setairportpower en0 on # 开启 Wi-Fi
networksetup -setairportpower en0 off # 关闭 Wi-Fi
networksetup -listpreferredwirelessnetworks en0 # 列出已保存的 Wi-Fi
networksetup -removepreferredwirelessnetwork en0 "SSID" # 删除 Wi-Fiscutil - 系统配置
bash
scutil --dns # 查看 DNS 配置
scutil --proxy # 查看代理配置
scutil --nwi # 网络接口信息
scutil --host hostname # 解析主机名
scutil --get LocalHostName # 获取本地主机名
scutil --set LocalHostName newname # 设置本地主机名
scutil --get ComputerName # 获取计算机名
scutil --set ComputerName "New Name" # 设置计算机名网络诊断
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 5000 8.8.8.8 # 超时时间5秒
ping -q 8.8.8.8 # 安静模式
ping6 2001:db8::1 # IPv6traceroute - 路由追踪
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 # IPv6mtr - 网络诊断工具
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 # 指定端口netstat - 网络统计
bash
netstat # 显示所有连接
netstat -a # 显示所有连接
netstat -n # 数字形式显示
netstat -p tcp # 只显示 TCP
netstat -p udp # 只显示 UDP
netstat -r # 显示路由表
netstat -s # 显示统计
netstat -i # 接口统计
netstat -an # 组合使用
netstat -an | grep LISTEN # 查找监听端口
netstat -an | grep ESTABLISHED # 查找已建立连接lsof - 网络连接
bash
lsof -i # 所有网络连接
lsof -i :80 # 指定端口
lsof -i TCP # TCP 连接
lsof -i UDP # UDP 连接
lsof -i :80 -i :443 # 多个端口
lsof -i @192.168.1.1 # 指定地址
lsof -i @192.168.1.1:80 # 指定地址和端口
lsof -nP -iTCP -sTCP:LISTEN # 监听端口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 # 保持监听
echo "GET / HTTP/1.0\r\n\r\n" | nc 192.168.1.1 80 # HTTP 请求curl - 数据传输
bash
curl https://example.com # GET 请求
curl -I https://example.com # 只获取头部
curl -i https://example.com # 包含头部
curl -v https://example.com # 详细输出
curl -X POST https://example.com # POST 请求
curl -d "name=value" https://example.com
curl -d @data.json https://example.com
curl -H "Content-Type: application/json" https://example.com
curl -u user:pass https://example.com
curl -b "cookie=value" https://example.com
curl -c cookies.txt https://example.com
curl -L https://example.com # 跟随重定向
curl -o file.txt https://example.com/file
curl -O https://example.com/file.txt
curl -C - -O https://example.com/file # 断点续传
curl -x http://proxy:8080 https://example.com
curl --connect-timeout 10 https://example.com
curl -k https://example.com # 忽略证书wget - 文件下载
bash
wget https://example.com/file.txt
wget -O newname.txt https://example.com/file.txt
wget -c https://example.com/file.txt # 断点续传
wget -r https://example.com/ # 递归下载
wget -np -r https://example.com/ # 不递归父目录
wget -nd -r https://example.com/ # 不创建目录
wget -A "*.jpg" -r https://example.com/
wget --limit-rate=100k https://example.com/file.txt
wget -t 5 https://example.com/file.txt
wget -T 30 https://example.com/file.txtDNS 查询
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 -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 服务器dscacheutil - DNS 缓存
bash
dscacheutil -q host -a name example.com # 查询
dscacheutil -flushcache # 清除 DNS 缓存防火墙
pfctl - PF 防火墙
bash
sudo pfctl -s all # 查看所有规则
sudo pfctl -s rules # 查看规则
sudo pfctl -s nat # 查看 NAT
sudo pfctl -s state # 查看状态
sudo pfctl -e # 启用防火墙
sudo pfctl -d # 禁用防火墙
sudo pfctl -f /etc/pf.conf # 加载配置
sudo pfctl -nf /etc/pf.conf # 检查配置
sudo pfctl -F all # 清除所有规则/etc/pf.conf 配置示例
scrub in all
block in all
pass out all keep state
pass in inet proto tcp from any to any port 22
pass in inet proto tcp from any to any port 80
pass in inet proto tcp from any to any port 443applicationfirewall - 应用防火墙
bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/app.app
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --remove /Applications/app.app网络抓包
tcpdump - 抓包工具
bash
tcpdump # 抓取所有包
tcpdump -i en0 # 指定接口
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 en0 tcp port 80 -w http.pcap
tcpdump -A # ASCII 输出
tcpdump -X # 十六进制和 ASCII
tcpdump -v # 详细输出其他网络命令
hostname - 主机名
bash
hostname # 显示主机名
hostname -f # FQDN
hostname -s # 短主机名
scutil --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 # 添加条目
arp -d -a # 清除所有route - 路由表
bash
netstat -r # 显示路由表
netstat -rn # 不解析
route -n get default # 获取默认路由
sudo route add default 192.168.1.1 # 添加默认网关
sudo route delete default # 删除默认网关
sudo route add -net 10.0.0.0/8 192.168.1.1 # 添加路由
sudo route delete -net 10.0.0.0/8 # 删除路由airport - Wi-Fi 工具
bash
airport -I # 当前 Wi-Fi 信息
airport -s # 扫描 Wi-Fi
airport -z # 断开 Wi-Fi
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -InetworkQuality - 网络质量测试
bash
networkQuality # 测试网络质量
networkQuality -s # 简单测试
networkQuality -v # 详细输出网络故障排查
常用诊断流程
bash
ifconfig # 检查 IP 配置
ping 127.0.0.1 # 测试本地回环
ping 192.168.1.1 # 测试网关
ping 8.8.8.8 # 测试外网 IP
ping google.com # 测试 DNS
traceroute 8.8.8.8 # 追踪路由
nslookup google.com # 检查 DNS
netstat -an # 检查端口重置网络
bash
sudo ifconfig en0 down && sudo ifconfig en0 up
sudo route flush
sudo killall -HUP mDNSResponder # 重启 DNS 服务
dscacheutil -flushcache # 清除 DNS 缓存