Linux网络管理
- 一、Linux网络应用要点
- 二、命令常见用法
- 2.1、curl
- 2.1.1、发送GET请求
- 2.1.2、发送POST请求
- 2.1.3、设置请求头
- 2.1.4、处理cookies
- 2.1.5、处理重定向
- 2.1.6、调试和详细信息
- 2.1.7、使用代理
- 2.1.8、文件上传
- 2.1.9、其它常用选项
- 2.1.10、综合示例
- 2.2、wget
- 2.2.1、基本用法
- 2.2.2、断点续传
- 2.2.3、批量下载
- 2.2.4、递归下载
- 2.2.5、限制下载速度
- 2.2.6、后台下载
- 2.2.7、处理 cookies
- 2.2.8、设置用户代理
- 2.2.9、下载 FTP 文件
- 2.2.10、其他常用选项
- 2.2.11、综合示例
- 2.3、telnet
- 2.3.1、基本用法
- 2.3.2、测试端口连通性
- 2.3.3、交互模式
- 2.3.4、退出 telnet
- 2.3.5、 常见用途
- 2.3.6、注意事项
- 2.4、IP
- 2.4.1、 查看网络接口信息
- 2.4.2、启用或禁用网络接口
- 2.4.3、查看 IP 地址
- 2.4.4、添加或删除 IP 地址
- 2.4.5、查看路由表
- 2.4.6、添加或删除路由
- 2.4.7、查看 ARP 表
- 2.4.8、查看网络统计信息
- 2.4.9、修改接口属性
- 2.4.10、综合示例
- 2.5、hostname
- 2.5.1、查看当前主机名
- 2.5.2、临时修改主机名
- 2.5.3、永久修改主机名
- 2.5.4、查看完整主机名(FQDN)
- 2.5.5、查看主机名的其他信息
- 2.5.6、设置主机名的其他选项
- 2.5.7、综合示例
- 2.6、ifconfig
- 2.6.1、查看网络接口信息
- 2.6.2、启用或禁用网络接口
- 2.6.3、配置 IP 地址
- 2.6.4、修改 MAC 地址
- 2.6.5、查看网络接口统计信息
- 2.6.6、设置 MTU(最大传输单元)
- 2.6.7、综合示例
- 2.6.8、注意事项
- 2.7、route
- 2.7.1、查看路由表
- 2.7.2、添加路由
- 2.7.3、删除路由
- 2.7.4、修改路由
- 2.7.5、其他常用选项
- 2.7.6、综合示例
- 2.7.7、注意事项
- 2.8、ssh
- 2.9、ssh-keygen
- 2.10、firewalld
- 2.10.1、启动、停止和重启 firewalld
- 2.10.2、查看 firewalld 状态
- 2.10.3、管理区域(Zones)
- 2.10.4、管理服务(Services)
- 2.10.5、管理端口
- 2.10.6、管理源地址
- 2.10.7、重载配置
- 2.10.8、高级功能
- 2.10.9、备份和恢复配置
- 2.10.10、日志管理
- 2.10.11、注意事项
- 2.11、iptables
- 2.11.1、基本概念
- 2.11.2、基本语法
- 2.11.3、常用操作
- 2.11.4、保护和恢复规则
- 2.11.5、调试和日志
- 2.11.6、注意事项
- 2.12、host
- 2.12.1、基本用法
- 2.12.2、常用操作
- 2.12.3、高级用法
- 2.12.4、注意事项
- 2.14.5、与其它工具比较
- 2.13、nslookup
- 2.13.1、基本用法
- 2.13.2、常用操作
- 2.13.3、交互模式
- 2.13.4、高级用法
- 2.13.5、注意事项
- 2.13.6、与其他工具的比较
- 2.14、nc/netcat
- 2.14.1、基本用法
- 2.14.2、常用操作
- 2.14.3、高级用法
- 2.14.4、注意事项
- 2.14.5、与其它工具比较
- 2.15、ping
- 2.15.1、基本用法
- 2.15.2、常用操作
- 2.15.3、输出解析
- 2.15.4、高级用法
- 2.15.4、注意事项
- 2.15.5、与其他工具的比较
- 2.16、traceroute
- 2.16.1、基本用法
- 2.16.2、常用操作
- 2.16.3、输出解析
- 2.16.4、高级用法
- 2.16.5、注意事项
- 2.16.6、与其他工具的比较
- 2.17、netstat
- 2.17.1、基本用法
- 2.17.2、常用操作
- 2.17.3、输出解析
- 2.17.4、高级用法
- 2.17.5、注意事项
- 2.17.6、与其它工具的比较
一、Linux网络应用要点
- 下载文件 - 使用
curl
、wget
- telnet 方式登录远程主机,对远程主机进行管理 - 使用
telnet
- 查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道 - 使用
ip
- 查看和设置系统的主机名 - 使用
hostname
- 查看和配置 Linux 内核中网络接口的网络参数 - 使用
ifconfig
- 查看和设置 Linux 内核中的网络路由表 - 使用
route
- ssh 方式连接远程主机 - 使用
ssh
- 为 ssh 生成、管理和转换认证密钥 - 使用
ssh-keygen
- 查看、设置防火墙(Centos7),使用
firewalld
- 查看、设置防火墙(Centos7 以前),使用
iptables
- 查看域名信息 - 使用
host
,nslookup
- 设置路由 - 使用
nc/netcat
- 测试主机之间网络是否连通 - 使用
ping
- 追踪数据在网络上的传输时的全部路径 - 使用
traceroute
- 查看当前工作的端口信息 - 使用
netstat
二、命令常见用法
2.1、curl
curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具,curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl 可以祝一臂之力。
2.1.1、发送GET请求
curl <URL>
# 示例:
curl https://example.com
保存输出到文件:
curl -o <文件名> <URL>
# 示例:
curl -o output.html https://example.com
自动命名保存文件:
curl -O <URL>
# 示例:
curl -O https://example.com/index.html
2.1.2、发送POST请求
发送表单数据:
curl -X POST -d "key1=value1&key2=value2" <URL>
# 示例:
curl -X POST -d "username=admin&password=123456" https://example.com/login
发送 JSON 数据:
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' <URL>
# 示例:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John", "age":30}' https://example.com/api
2.1.3、设置请求头
curl -H "HeaderName: HeaderValue" <URL>
# 示例:
curl -H "Authorization: Bearer token123" https://example.com/api
2.1.4、处理cookies
发送 cookies:
curl -b "name=value" <URL>
# 示例:
curl -b "sessionid=abc123" https://example.com
保存 cookies 到文件:
curl -c <cookies文件> <URL>
# 示例:
curl -c cookies.txt https://example.com
使用 cookies 文件:
curl -b <cookies文件> <URL>
# 示例:
curl -b cookies.txt https://example.com
2.1.5、处理重定向
自动跟随重定向:
curl -L <URL>
# 示例:
curl -L https://example.com
限制重定向次数:
curl -L --max-redirs <次数> <URL>
# 示例:
curl -L --max-redirs 5 https://example.com
2.1.6、调试和详细信息
显示请求和响应头:
curl -v <URL>
# 示例:
curl -v https://example.com
仅显示响应头:
curl -I <URL>
# 示例:
curl -I https://example.com
2.1.7、使用代理
设置 HTTP 代理:
curl -x <代理地址> <URL>
# 示例:
curl -x http://proxy.example.com:8080 https://example.com
设置 SOCKS 代理:
curl --socks5 <代理地址> <URL>
# 示例:
curl --socks5 127.0.0.1:1080 https://example.com
2.1.8、文件上传
上传文件:
curl -F "file=@<文件路径>" <URL>
# 示例:
curl -F "file=@/path/to/file.txt" https://example.com/upload
上传文件并设置文件名:
curl -F "file=@<文件路径>;filename=<新文件名>" <URL>
# 示例:
curl -F "file=@/path/to/file.txt;filename=newname.txt" https://example.com/upload
2.1.9、其它常用选项
限制下载速度:
curl --limit-rate <速度> <URL>
# 示例:
curl --limit-rate 100K https://example.com/file.zip
断点续传:
curl -C - -o <文件名> <URL>
# 示例:
curl -C - -o file.zip https://example.com/file.zip
忽略 SSL 证书验证:
curl -k <URL>
# 示例:
curl -k https://example.com
2.1.10、综合示例
下载文件并保存:
curl -o file.zip https://example.com/file.zip
发送 POST 请求并保存响应:
curl -X POST -d "param1=value1¶m2=value2" -o response.txt https://example.com/api
调试请求:
curl -v -H "Authorization: Bearer token123" https://example.com/api
下载文件,指定下载路径,并查看进度
curl http://man.linuxde.net/test.iso -o filename.iso --progress
########################################## 100.0%
2.2、wget
wget 是一个命令行工具,用于从网络上下载文件,支持 HTTP、HTTPS 和 FTP 协议。它非常适合批量下载、递归下载以及断点续传等操作。
2.2.1、基本用法
下载单个文件:
wget <URL>
# 示例:
wget https://example.com/file.zip
下载并指定保存文件名:
wget -O <文件名> <URL>
# 示例:
wget -O myfile.zip https://example.com/file.zip
2.2.2、断点续传
继续未完成的下载
wget -c <URL>
# 示例:
wget -c https://example.com/file.zip
2.2.3、批量下载
从文件列表中下载
# 将多个 URL 保存在一个文件中(如 urls.txt),然后使用:
wget -i <文件>
# 示例:
wget -i urls.txt
2.2.4、递归下载
下载整个网站:
wget -r <URL>
# 示例:
wget -r https://example.com
限制递归深度:
wget -r -l <深度> <URL>
# 示例:
wget -r -l 2 https://example.com
下载特定类型的文件:
wget -r -A <文件类型> <URL>
# 示例:
wget -r -A "*.jpg" https://example.com
2.2.5、限制下载速度
wget --limit-rate=<速度> <URL>
# 示例:
wget --limit-rate=100k https://example.com/file.zip
2.2.6、后台下载
wget -b <URL>
# 示例:
wget -b https://example.com/file.zip
2.2.7、处理 cookies
使用 cookies 文件:
wget --load-cookies <cookies文件> <URL>
# 示例:
wget --load-cookies cookies.txt https://example.com
2.2.8、设置用户代理
wget --user-agent=<用户代理字符串> <URL>
# 示例:
wget --user-agent="Mozilla/5.0" https://example.com
2.2.9、下载 FTP 文件
下载 FTP 文件:
wget ftp://example.com/file.zip
使用用户名和密码:
wget --ftp-user=<用户名> --ftp-password=<密码> ftp://example.com/file.zip
# 示例:
wget --ftp-user=admin --ftp-password=123456 ftp://example.com/file.zip
2.2.10、其他常用选项
忽略 SSL 证书验证:
wget --no-check-certificate <URL>
# 示例:
wget --no-check-certificate https://example.com
限制重试次数:
wget --tries=<次数> <URL>
# 示例:
wget --tries=5 https://example.com
静默模式(不显示输出):
wget -q <URL>
# 示例:
wget -q https://example.com
2.2.11、综合示例
下载整个网站并限制速度:
wget -r --limit-rate=100k https://example.com
断点续传下载大文件:
wget -c https://example.com/largefile.zip
批量下载图片:
wget -r -A "*.jpg" https://example.com/images
2.3、telnet
telnet 是一个用于远程登录和管理网络设备的命令行工具,基于 Telnet 协议。它也可以用于测试网络服务的连通性。
2.3.1、基本用法
连接到远程主机
telnet <主机名或IP> <端口>
# 示例:
telnet example.com 23
2.3.2、测试端口连通性
telnet 常用于测试某个端口是否开放。例如,测试 example.com 的 80 端口:
telnet example.com 80
# 如果连接成功,会显示 Connected to example.com。
# 如果连接失败,会显示 Connection refused 或超时。
2.3.3、交互模式
连接成功后,telnet 会进入交互模式,可以输入命令与远程主机通信。例如:
telnet example.com 23
#输入用户名和密码(如果需要)。
#输入命令与远程主机交互。
2.3.4、退出 telnet
在交互模式下,输入以下命令退出:
Ctrl + ]
# 然后输入 quit 并按回车:
telnet> quit
2.3.5、 常见用途
测试 HTTP 服务:
telnet example.com 80
# 连接成功后,输入:
GET / HTTP/1.1
Host: example.com
按两次回车,查看服务器返回的 HTTP 响应。
测试 SMTP 服务:
telnet example.com 25
# 连接成功后,输入 SMTP 命令与服务器交互,例如:
HELO example.com
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Test Email
This is a test email.
.
QUIT
测试 MySQL 服务:
telnet example.com 3306
# 如果端口开放,会显示 MySQL 的版本信息。
2.3.6、注意事项
- 安全性:Telnet 协议是明文传输,不安全,建议使用 SSH 替代。
- 安装:如果系统未安装 telnet,可以通过以下命令安装:
# Ubuntu/Debian:
sudo apt install telnet
# CentOS/RHEL:
sudo yum install telnet
2.4、IP
ip 命令是 Linux 系统中用于管理网络接口、路由、ARP 表等网络配置的强大工具,取代了旧的 ifconfig 和 route 命令。
2.4.1、 查看网络接口信息
查看所有网络接口:
ip link show
# 或简写:
ip l
查看指定网络接口:
ip link show <接口名>
# 示例:
ip link show eth0
2.4.2、启用或禁用网络接口
启用接口:
ip link set <接口名> up
# 示例:
ip link set eth0 up
禁用接口:
ip link set <接口名> down
# 示例:
ip link set eth0 down
2.4.3、查看 IP 地址
查看所有接口的 IP 地址:
ip addr show
# 或简写:
ip a
查看指定接口的 IP 地址:
ip addr show <接口名>
# 示例:
ip addr show eth0
2.4.4、添加或删除 IP 地址
添加 IP 地址:
ip addr add <IP地址>/<子网掩码> dev <接口名>
# 示例:
ip addr add 192.168.1.100/24 dev eth0
删除 IP 地址:
ip addr del <IP地址>/<子网掩码> dev <接口名>
# 示例:
ip addr del 192.168.1.100/24 dev eth0
2.4.5、查看路由表
查看路由表:
ip route show
# 或简写:
ip r
查看指定网络的路由:
ip route show to <网络地址>
# 示例:
ip route show to 192.168.1.0/24
2.4.6、添加或删除路由
添加路由:
ip route add <目标网络> via <网关> dev <接口名>
# 示例:
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
删除路由:
ip route del <目标网络>
# 示例:
ip route del 192.168.2.0/24
2.4.7、查看 ARP 表
查看 ARP 表:
ip neigh show
# 或简写:
ip n
删除 ARP 条目:
ip neigh del <IP地址> dev <接口名>
# 示例:
ip neigh del 192.168.1.1 dev eth0
2.4.8、查看网络统计信息
查看网络接口统计信息
ip -s link show <接口名>
# 示例:
ip -s link show eth0
2.4.9、修改接口属性
修改接口 MTU:
ip link set <接口名> mtu <MTU值>
# 示例:
ip link set eth0 mtu 1500
修改接口 MAC 地址:
ip link set <接口名> address <MAC地址>
# 示例:
ip link set eth0 address 00:11:22:33:44:55
2.4.10、综合示例
查看所有网络接口及其 IP 地址:
ip a
添加 IP 地址并启用接口:
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
添加默认网关:
ip route add default via 192.168.1.1 dev eth0
查看路由表:
ip r
2.5、hostname
hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改 /etc/hosts 和 /etc/sysconfig/network 的相关内容。
2.5.1、查看当前主机名
hostname
#这会显示当前系统的主机名。
2.5.2、临时修改主机名
hostname <新主机名>
# 示例:
hostname myserver
# 这种修改是临时的,重启后会恢复为原来的主机名。
2.5.3、永久修改主机名
要永久修改主机名,需要编辑相关配置文件,具体方法因 Linux 发行版而异。
对于大多数 Linux 发行版(如 Ubuntu、Debian、CentOS 等):
- 编辑 /etc/hostname 文件:
sudo nano /etc/hostname
# 将文件内容替换为新主机名,例如:
myserver
- 更新 /etc/hosts 文件:
sudo nano /etc/hosts
# 找到包含旧主机名的行,将其替换为新主机名,例如:
复制
127.0.1.1 myserver
- 重启系统或使用以下命令立即生效:
sudo hostnamectl set-hostname <新主机名>
对于使用 systemd 的系统:
sudo hostnamectl set-hostname <新主机名>
# 示例:
sudo hostnamectl set-hostname myserver
2.5.4、查看完整主机名(FQDN)
hostname --fqdn
# 这会显示完整的主机名(Fully Qualified Domain Name,FQDN)。
2.5.5、查看主机名的其他信息
查看主机名的 IP 地址:
hostname -i
查看主机名的别名:
hostname -a
查看主机名的域名部分:
hostname -d
2.5.6、设置主机名的其他选项
设置主机名的别名:
hostname -A <别名>
设置主机名的域名:
hostname -b <域名>
2.5.7、综合示例
查看当前主机名:
hostname
临时修改主机名:
hostname temp-server
永久修改主机名:
sudo hostnamectl set-hostname myserver
查看完整主机名:
hostname --fqdn
2.6、ifconfig
ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
2.6.1、查看网络接口信息
查看所有网络接口:
ifconfig
查看指定网络接口:
ifconfig <接口名>
# 示例:
ifconfig eth0
2.6.2、启用或禁用网络接口
启用接口:
sudo ifconfig <接口名> up
# 示例:
sudo ifconfig eth0 up
禁用接口:
sudo ifconfig <接口名> down
# 示例:
sudo ifconfig eth0 down
2.6.3、配置 IP 地址
设置 IP 地址:
sudo ifconfig <接口名> <IP地址> netmask <子网掩码>
# 示例:
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
添加多个 IP 地址:
sudo ifconfig <接口名>:<别名> <IP地址> netmask <子网掩码>
# 示例:
sudo ifconfig eth0:0 192.168.1.101 netmask 255.255.255.0
2.6.4、修改 MAC 地址
临时修改 MAC 地址
sudo ifconfig <接口名> hw ether <MAC地址>
# 示例:
sudo ifconfig eth0 hw ether 00:11:22:33:44:55
2.6.5、查看网络接口统计信息
查看所有接口的统计信息:
ifconfig -a
查看指定接口的统计信息:
ifconfig <接口名>
# 示例:
ifconfig eth0
2.6.6、设置 MTU(最大传输单元)
sudo ifconfig <接口名> mtu <MTU值>
# 示例:
sudo ifconfig eth0 mtu 1500
2.6.7、综合示例
查看所有网络接口:
ifconfig
启用网络接口并设置 IP 地址
sudo ifconfig eth0 up
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
查看指定接口的详细信息
ifconfig eth0
2.6.8、注意事项
- 权限:修改网络配置通常需要 sudo 权限。
- 临时性:使用 ifconfig 修改的配置是临时的,重启后会失效。要永久修改网络配置,需要编辑网络配置文件(如 /etc/network/interfaces 或使用 netplan)。
- 替代工具:现代 Linux 系统推荐使用 ip 命令替代 ifconfig,因为 ifconfig 的功能较为有限。
2.7、route
route 命令用于查看和操作内核的 IP 路由表。它可以显示、添加、删除或修改路由规则。尽管现代 Linux 系统推荐使用 ip route 命令替代 route,但 route 仍然被广泛使用。
2.7.1、查看路由表
查看当前路由表
route -n
# -n 选项表示以数字形式显示 IP 地址和端口,避免 DNS 解析。
2.7.2、添加路由
添加默认网关:
sudo route add default gw <网关地址> <接口名>
# 示例:
sudo route add default gw 192.168.1.1 eth0
添加特定网络的路由:
sudo route add -net <目标网络> netmask <子网掩码> gw <网关地址> dev <接口名>
# 示例:
sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
添加主机路由:
sudo route add -host <目标IP> gw <网关地址> dev <接口名>
# 示例:
sudo route add -host 192.168.2.100 gw 192.168.1.1 dev eth0
2.7.3、删除路由
删除默认网关:
sudo route del default gw <网关地址> <接口名>
# 示例:
sudo route del default gw 192.168.1.1 eth0
删除特定网络的路由
sudo route del -net <目标网络> netmask <子网掩码>
# 示例:
sudo route del -net 192.168.2.0 netmask 255.255.255.0
删除主机路由
sudo route del -host <目标IP>
# 示例:
sudo route del -host 192.168.2.100
2.7.4、修改路由
修改默认网关:
sudo route change default gw <新网关地址> <接口名>
# 示例:
sudo route change default gw 192.168.1.254 eth0
2.7.5、其他常用选项
显示详细信息
route -v
显示所有路由(包括未激活的路由)
route -ee
2.7.6、综合示例
查看路由表
route -n
添加默认网关
sudo route add default gw 192.168.1.1 eth0
添加特定网络的路由
sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
删除特定网络的路由
sudo route del -net 192.168.2.0 netmask 255.255.255.0
2.7.7、注意事项
注意事项
- 权限:修改路由表通常需要 sudo 权限。
- 临时性:使用 route 命令修改的路由是临时的,重启后会失效。要永久修改路由,需要编辑网络配置文件(如 /etc/network/interfaces 或使用 netplan)。
- 替代工具:现代 Linux 系统推荐使用 ip route 命令替代 route,因为 ip route 功能更强大且更灵活。
2.8、ssh
ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。
ssh [选项] [用户名@]主机名或IP地址
常用选项:
-p <端口号>
:指定远程主机的SSH端口(默认是22)。-i <私钥文件>
:指定用于身份验证的私钥文件。-l <用户名>
:指定登录用户名。-v
:详细模式,显示调试信息(可以多次使用,如 -vvv 以增加详细程度)。-X
:启用X11转发,允许在远程主机上运行图形应用程序。-L <本地端口>:<远程主机>:<远程端口>
:设置本地端口转发。-R <远程端口>:<本地主机>:<本地端口>
:设置远程端口转发。-D <本地端口>
:设置动态端口转发(SOCKS代理)。
使用示例:
基本远程登录
ssh user@192.168.1.100
#这将使用用户名 user 登录到 IP 地址为 192.168.1.100 的远程主机。
指定端口
ssh -p 2222 user@192.168.1.100
# 这将连接到远程主机的 2222 端口。
使用私钥文件
ssh -i /path/to/private_key user@192.168.1.100
#这将使用指定的私钥文件进行身份验证。
启用X11转发
ssh -X user@192.168.1.100
#这将启用X11转发,允许在远程主机上运行图形应用程序。
本地端口转发
ssh -L 8080:localhost:80 user@192.168.1.100
# 这将把本地的 8080 端口转发到远程主机的 80 端口。
远程端口转发
ssh -R 8080:localhost:80 user@192.168.1.100
#这将把远程主机的 8080 端口转发到本地的 80 端口。
动态端口转发(SOCKS代理)
ssh -D 1080 user@192.168.1.100
# 这将设置一个动态端口转发,创建一个SOCKS代理,可以通过本地 1080 端口访问远程网络。
退出SSH会话
在SSH会话中,你可以通过输入 exit 或按 Ctrl+D 来退出并关闭连接。
其他注意事项:
- 配置文件:SSH的配置文件通常位于
~/.ssh/config
,你可以在其中定义主机别名、端口、用户名等,简化命令行操作。 - 公钥认证:为了提高安全性,建议使用公钥认证而不是密码认证。你可以使用
ssh-keygen
生成密钥对,并将公钥添加到远程主机的~/.ssh/authorized_keys
文件中。
示例配置文件:
Host myserver
HostName 192.168.1.100
User user
Port 2222
IdentityFile /path/to/private_key
2.9、ssh-keygen
ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。
ssh-kengen [选项]
常用选项:
-t <密钥类型>
指定密钥类型,如 rsa, ed25519, ecdsa 等。默认是 rsa。-b <密钥长度>
指定密钥的位数(仅适用于 rsa 和 ecdsa)。例如 -b 4096。-C <注释>
为密钥添加注释,通常是电子邮件或描述。-f <文件名>
指定生成的密钥文件的路径和名称。-N <密码>
为私钥设置密码(passphrase)。-p
更改现有私钥的密码。-q
静默模式,不显示输出。-y
从私钥生成公钥。
使用示例:
生成默认的 RSA 密钥对
ssh-keygen
# 默认生成 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
# 会提示你输入保存路径和密码(可选)。
生成指定类型的密钥对
ssh-keygen -t ed25519
# 生成 ed25519 类型的密钥对,默认保存为 ~/.ssh/id_ed25519 和 ~/.ssh/id_ed25519.pub。
指定密钥长度
ssh-keygen -t rsa -b 4096
# 生成 4096 位的 RSA 密钥对。
指定密钥文件路径
ssh-keygen -f ~/.ssh/my_key
# 生成密钥对并保存为 ~/.ssh/my_key(私钥)和 ~/.ssh/my_key.pub(公钥)。
为密钥添加注释
# ssh-keygen -C "my_email@example.com"
在公钥中添加注释 my_email@example.com。
为私钥设置密码
ssh-keygen -N "my_passphrase"
# 为生成的私钥设置密码 my_passphrase。
更改现有私钥的密码
ssh-keygen -p -f ~/.ssh/id_rsa
# 更改 ~/.ssh/id_rsa 私钥的密码。
从私钥生成公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
# 从私钥 ~/.ssh/id_rsa 生成公钥并保存到 ~/.ssh/id_rsa.pub。
密钥对的使用:
将公钥添加到远程主机
将生成的公钥(如 ~/.ssh/id_rsa.pub)内容复制到远程主机的 ~/.ssh/authorized_keys 文件中。
可以使用以下命令自动完成:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
使用密钥登录远程主机
ssh -i ~/.ssh/my_key user@remote_host
注意事项:
- 密钥类型选择:
- ed25519:推荐使用,安全性高且性能好。
- rsa:兼容性好,但建议密钥长度至少为 4096 位。
- ecdsa:基于椭圆曲线,安全性高,但兼容性稍差。
- 私钥保护:私钥文件应妥善保管,避免泄露。可以为私钥设置密码以增加安全性。
- 默认路径:SSH 默认会查找 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519 等密钥文件。如果使用其他路径,需要通过 -i 选项指定。
2.10、firewalld
firewalld 是一个动态管理防火墙的工具,它提供了对网络流量进行控制的接口,支持区域(zones)和服务(services)的概念。以下是 firewalld 的常用命令和操作。
2.10.1、启动、停止和重启 firewalld
# 启动 firewalld
sudo systemctl start firewalld
# 停止 firewalld
sudo systemctl stop firewalld
# 重启 firewalld
sudo systemctl restart firewalld
# 设置 firewalld 开机自启
sudo systemctl enable firewalld
# 禁用 firewalld 开机自启
sudo systemctl disable firewalld
# 检查 firewalld 状态
sudo systemctl status firewalld
2.10.2、查看 firewalld 状态
# 查看 firewalld 是否运行
sudo firewall-cmd --state
# 查看默认区域
sudo firewall-cmd --get-default-zone
# 查看所有区域
sudo firewall-cmd --get-zones
# 查看当前区域的配置
sudo firewall-cmd --list-all
# 查看指定区域的配置
sudo firewall-cmd --zone=public --list-all
2.10.3、管理区域(Zones)
区域是 firewalld 的核心概念,每个区域定义了不同的信任级别和规则。
# 设置默认区域
sudo firewall-cmd --set-default-zone=public
# 查看当前活动的区域
sudo firewall-cmd --get-active-zones
# 将网络接口绑定到指定区域
sudo firewall-cmd --zone=work --change-interface=eth0
# 查看指定接口的区域
sudo firewall-cmd --get-zone-of-interface=eth0
2.10.4、管理服务(Services)
服务是预定义的规则集合,用于允许特定类型的流量。
# 查看所有预定义的服务
sudo firewall-cmd --get-services
# 允许某个服务(如 http)
sudo firewall-cmd --zone=public --add-service=http
# 永久允许某个服务
sudo firewall-cmd --zone=public --add-service=http --permanent
# 移除某个服务
sudo firewall-cmd --zone=public --remove-service=http
# 永久移除某个服务
sudo firewall-cmd --zone=public --remove-service=http --permanent
2.10.5、管理端口
# 允许某个端口(如 8080)
sudo firewall-cmd --zone=public --add-port=8080/tcp
# 永久允许某个端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 移除某个端口
sudo firewall-cmd --zone=public --remove-port=8080/tcp
# 永久移除某个端口
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
2.10.6、管理源地址
# 允许某个 IP 地址访问
sudo firewall-cmd --zone=public --add-source=192.168.1.100
# 永久允许某个 IP 地址访问
sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent
# 移除某个 IP 地址的访问权限
sudo firewall-cmd --zone=public --remove-source=192.168.1.100
# 永久移除某个 IP 地址的访问权限
sudo firewall-cmd --zone=public --remove-source=192.168.1.100 --permanent
2.10.7、重载配置
在修改了永久规则后,需要重载配置使其生效。
sudo firewall-cmd --reload
2.10.8、高级功能
端口转发
# 将本地端口 8080 转发到 80
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80
# 永久生效
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent
富规则(Rich Rules)
# 富规则允许更复杂的规则配置。
# 允许某个 IP 访问特定端口
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
# 永久生效
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' --permanent
2.10.9、备份和恢复配置
# 备份配置
sudo cp /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.bak
# 恢复配置
sudo cp /etc/firewalld/firewalld.conf.bak /etc/firewalld/firewalld.conf
sudo firewall-cmd --reload
2.10.10、日志管理
# 查看 firewalld 日志
sudo journalctl -u firewalld
# 实时查看日志
sudo journalctl -u firewalld -f
2.10.11、注意事项
- 永久规则:使用 --permanent 选项的规则需要重载(–reload)后才能生效。
- 区域选择:根据网络环境选择合适的区域(如 public、work、home 等)。
- 测试规则:在应用新规则前,建议先测试,避免意外阻断网络连接。
2.11、iptables
iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
2.11.1、基本概念
- 表(Tables):iptables 有多个表,每个表用于不同的功能:
filter
:默认表,用于过滤数据包(允许或拒绝)。nat
:用于网络地址转换(NAT)。mangle
:用于修改数据包头(如 TTL、TOS)。raw
:用于配置数据包是否被连接跟踪。
- 链(Chains):每个表包含多个链,链是规则的集合:
INPUT
:处理进入本机的数据包。OUTPUT
:处理从本机发出的数据包。FORWARD
:处理转发的数据包。PREROUTING
:用于 nat 表,在路由之前修改数据包。POSTROUTING
:用于 nat 表,在路由之后修改数据包。
- 规则(Rules):每条规则定义了对数据包的处理方式(如允许、拒绝、丢弃)。
2.11.2、基本语法
iptables [-t 表名] 命令 [链名] [规则] [动作]
常用命令:
-A
在链的末尾添加规则。-I
在链的开头或指定位置插入规则。-D
删除链中的规则。-L
列出链中的规则。-F
清空链中的所有规则。-P
设置链的默认策略(如 ACCEPT、DROP)。-N
创建新的用户自定义链。-X
删除用户自定义链。-E
重命名用户自定义链。
常用选项:
-p
指定协议(如 tcp、udp、icmp)。--dport
指定目标端口。--sport
指定源端口。-s
指定源地址。-d
指定目标地址。-i
指定输入网络接口。-o
指定输出网络接口。-j
指定动作(如 ACCEPT、DROP、REJECT)。-m
使用扩展模块(如 state、multiport)。
2.11.3、常用操作
查看规则:
# 查看 filter 表的规则
iptables -L -n -v
# 查看 nat 表的规则
iptables -t nat -L -n -v
清空规则:
# 清空 filter 表的所有规则
iptables -F
# 清空 nat 表的所有规则
iptables -t nat -F
设置默认策略:
# 设置 INPUT 链的默认策略为 DROP
iptables -P INPUT DROP
# 设置 OUTPUT 链的默认策略为 ACCEPT
iptables -P OUTPUT ACCEPT
# 设置 FORWARD 链的默认策略为 DROP
iptables -P FORWARD DROP
允许或拒绝流量:
# 允许来自 192.168.1.0/24 的流量
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# 拒绝来自 192.168.1.100 的流量
iptables -A INPUT -s 192.168.1.100 -j DROP
# 允许访问本机的 22 端口(SSH)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许本机访问外部 80 端口(HTTP)
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
使用扩展模块:
# 允许已建立的连接和相关的流量
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许访问多个端口(如 80 和 443)
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
NAT配置:
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置源地址转换(SNAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 配置目标地址转换(DNAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
2.11.4、保护和恢复规则
iptables 的规则在重启后会丢失,需要手动保存和恢复。
保存规则
# 保存规则到文件
iptables-save > /etc/iptables/rules.v4
恢复规则
# 从文件恢复规则
iptables-restore < /etc/iptables/rules.v4
# 自动保存和恢复
# 在 Debian/Ubuntu 系统中,可以使用 iptables-persistent 包:
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
2.11.5、调试和日志
# 记录被拒绝的数据包
iptables -A INPUT -j LOG --log-prefix "iptables-dropped: "
# 查看日志
tail -f /var/log/syslog
2.11.6、注意事项
- 谨慎操作:在远程服务器上配置 iptables 时,确保不会阻断自己的连接(如 SSH)。
- 测试规则:在应用新规则前,建议先测试,避免意外阻断网络连接。
- 备份规则:在修改规则前,备份现有规则,以便恢复。
2.12、host
host 是一个用于查询 DNS(域名系统)信息的命令行工具。它可以用来查找域名的 IP 地址、反向查找 IP 地址对应的域名,以及查询域名的其他 DNS 记录(如 MX、NS 等)。以下是 host 命令的基本用法和常见操作。
2.12.1、基本用法
host [选项] 域名或IP地址 【DNS服务器】
常用选项:
-a
显示所有 DNS 记录(相当于 -t ANY)。-t <类型>
查询指定类型的 DNS 记录(如 A、MX、NS、TXT 等)。-4
仅使用 IPv4 查询。-6
仅使用 IPv6 查询。-C
查询域名的 SOA 记录。-v
显示详细信息。-r
禁用递归查询。-W <超时>
设置查询超时时间(秒)。
2.12.2、常用操作
查询域名的 IP 地址:
host example.com
# 输出示例:
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
查询指定类型的 DNS 记录:
# 查询 MX 记录(邮件服务器)
host -t MX example.com
# 查询 NS 记录(域名服务器)
host -t NS example.com
# 查询 TXT 记录(文本记录)
host -t TXT example.com
查询所有 DNS 记录:
host -a example.com
反向查找 IP 地址对应的域名:
host 93.184.216.34
# 输出示例
34.216.184.93.in-addr.arpa domain name pointer example.com.
指定 DNS 服务器查询:
host example.com 8.8.8.8
#这将使用 Google 的公共 DNS 服务器(8.8.8.8)进行查询。
查询域名的 SOA 记录:
host -C example.com
查询 IPv6 地址:
host -t AAAA example.com
设置查询超时时间:
host -W 5 example.com
# 这将设置查询超时时间为 5 秒。
2.12.3、高级用法
查询域名的 SPF 记录:
host -t TXT example.com
# SPF 记录通常以 v=spf1 开头。
查询域名的 CNAME 记录:
host -t CNAME www.example.com
查询域名的 PTR 记录:
host -t PTR 34.216.184.93.in-addr.arpa
禁用递归查询:
host -r example.com
2.12.4、注意事项
- DNS 缓存:查询结果可能受到本地 DNS 缓存的影响。如果需要最新结果,可以刷新 DNS 缓存。
- DNS 服务器:默认情况下,host 使用系统配置的 DNS 服务器。可以通过指定 DNS 服务器来覆盖默认设置。
- 超时设置:如果网络较慢,可以增加超时时间以避免查询失败。
2.14.5、与其它工具比较
nslookup
:功能类似,但交互性更强。dig
:功能更强大,适合高级用户。
2.13、nslookup
nslookup 是一个用于查询 DNS(域名系统)信息的命令行工具。它可以用来查找域名的 IP 地址、反向查找 IP 地址对应的域名,以及查询域名的其他 DNS 记录(如 MX、NS 等)。以下是 nslookup 命令的基本用法和常见操作。
2.13.1、基本用法
nslookup [选项] [域名或IP地址] [DNS服务器]
常用选项:
-type=<记录类型>
查询指定类型的 DNS 记录(如 A、MX、NS、TXT 等)。-debug
显示详细的调试信息。-timeout=<秒>
设置查询超时时间。-port=<端口>
指定 DNS 服务器的端口(默认是 53)。
2.13.2、常用操作
查询域名的 IP 地址:
nslookup example.com
# 输出示例:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
查询指定类型的 DNS 记录:
# 查询 MX 记录(邮件服务器)
nslookup -type=MX example.com
# 查询 NS 记录(域名服务器)
nslookup -type=NS example.com
# 查询 TXT 记录(文本记录)
nslookup -type=TXT example.com
反向查找 IP 地址对应的域名:
nslookup 93.184.216.34
# 输出示例:
34.216.184.93.in-addr.arpa name = example.com.
指定 DNS 服务器查询:
nslookup example.com 8.8.8.8
# 这将使用 Google 的公共 DNS 服务器(8.8.8.8)进行查询。
查询域名的 SOA 记录
nslookup -type=SOA example.com
查询 IPv6 地址
nslookup -type=AAAA example.com
设置查询超时时间
nslookup -timeout=5 example.com
# 这将设置查询超时时间为 5 秒。
2.13.3、交互模式
nslookup 支持交互模式,可以在命令行中输入 nslookup 进入交互模式,然后输入查询命令。
nslookup
> example.com
> set type=MX
> example.com
> exit
2.13.4、高级用法
查询域名的 SPF 记录:
nslookup -type=TXT example.com
# SPF 记录通常以 v=spf1 开头。
查询域名的 CNAME 记录:
nslookup -type=CNAME www.example.com
查询域名的 PTR 记录:
nslookup -type=PTR 34.216.184.93.in-addr.arpa
显示详细的调试信息:
nslookup -debug example.com
2.13.5、注意事项
- DNS 缓存:查询结果可能受到本地 DNS 缓存的影响。如果需要最新结果,可以刷新 DNS 缓存。
- DNS 服务器:默认情况下,nslookup 使用系统配置的 DNS 服务器。可以通过指定 DNS 服务器来覆盖默认设置。
- 超时设置:如果网络较慢,可以增加超时时间以避免查询失败。
2.13.6、与其他工具的比较
host
:功能类似,但输出更简洁。dig
:功能更强大,适合高级用户。
2.14、nc/netcat
netcat(通常简称为 nc)是一个功能强大的网络工具,被称为“网络瑞士军刀”。它可以用于创建 TCP/UDP 连接、端口扫描、文件传输、端口监听等。
2.14.1、基本用法
nc [选项] [主机名或IP地址] [端口]
常用选项:
-l
监听模式(作为服务器)。-p <端口>
指定本地端口(通常用于监听模式)。-u
使用 UDP 协议(默认是 TCP)。-v
显示详细信息(verbose)。-vv
显示更详细的信息。-z
端口扫描模式(不发送数据)。-w <秒>
设置超时时间。-n
直接使用 IP 地址,不进行 DNS 解析。-e <命令>
在连接后执行指定命令(常用于反向 Shell)。
2.14.2、常用操作
连接到远程服务器
nc example.com 80
# 连接到 example.com 的 80 端口(HTTP 服务)。连接成功后,可以手动输入 HTTP 请求,例如:
GET / HTTP/1.1
Host: example.com
监听端口(作为服务器)
nc -l -p 1234
#在本地 1234 端口监听连接。其他设备可以通过 nc <IP地址> 1234 连接到该端口。
文件传输
# 发送文件(从客户端到服务器):
nc -l -p 1234 > received_file.txt # 服务器端
nc example.com 1234 < file_to_send.txt # 客户端
# 接收文件(从服务器到客户端):
nc -l -p 1234 < file_to_send.txt # 服务器端
nc example.com 1234 > received_file.txt # 客户端
端口扫描
nc -zv example.com 20-30
#扫描 example.com 的 20 到 30 端口,检查哪些端口是开放的。
使用 UDP 协议
nc -u example.com 53
#使用 UDP 协议连接到 example.com 的 53 端口(DNS 服务)。
反向 Shell
# 服务器端(监听连接):
nc -l -p 1234
# 客户端(连接并执行 Shell):
nc example.com 1234 -e /bin/bash
# 连接成功后,服务器端可以执行 Shell 命令。
聊天模式
# 服务器端:
nc -l -p 1234
# 客户端:
nc example.com 1234
# 连接成功后,双方可以实时发送消息。
测试网络连通性
nc -zv example.com 80
# 测试 example.com 的 80 端口是否开放。
设置超时时间
nc -w 5 example.com 80
# 设置连接超时时间为 5 秒。
直接使用 IP 地址
nc -n 192.168.1.1 80
# 直接使用 IP 地址,不进行 DNS 解析。
2.14.3、高级用法
创建 HTTP 服务器
echo -e "HTTP/1.1 200 OK\n\nHello, World!" | nc -l -p 8080
# 在本地 8080 端口创建一个简单的 HTTP 服务器。访问 http://<IP地址>:8080 可以看到 "Hello, World!"。
创建反向代理
nc -l -p 1234 | nc example.com 80
# 将本地 1234 端口的流量转发到 example.com 的 80 端口。
测试 SMTP 服务器
nc example.com 25
# 连接到 example.com 的 25 端口(SMTP 服务),可以手动输入 SMTP 命令进行测试。
测试 DNS 服务器
nc -u example.com 53
# 连接到 example.com 的 53 端口(DNS 服务),可以手动发送 DNS 查询。
2.14.4、注意事项
- 安全性:netcat 功能强大,但使用不当可能导致安全风险(如反向 Shell)。在生产环境中应谨慎使用。
- 防火墙:确保防火墙允许相关端口的流量。
- 版本差异:不同操作系统上的 netcat 版本可能略有差异,某些选项可能不可用。
2.14.5、与其它工具比较
- telnet:功能类似,但 netcat 更强大。
- socat:功能更强大,支持更多协议和高级功能。
- nmap:更适合端口扫描和网络探测。
2.15、ping
ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
2.15.1、基本用法
ping [选项] [目标主机名或IP地址]
常用选项:
-c <次数>
指定发送的 ICMP 包次数。-i <秒>
设置发送 ICMP 包的时间间隔(默认 1 秒)。-s <字节>
设置 ICMP 包的大小(默认 56 字节)。-t <TTL>
设置 ICMP 包的生存时间(TTL)。-W <秒>
设置等待响应的超时时间。-q
静默模式,只显示统计信息。-v
显示详细信息。-4
强制使用 IPv4。-6
强制使用 IPv6。
2.15.2、常用操作
测试网络连通性
ping example.com
#持续向 example.com 发送 ICMP 包,直到手动停止(按 Ctrl+C)。
指定发送次数
ping -c 5 example.com
#向 example.com 发送 5 个 ICMP 包后停止。
设置发送间隔
ping -i 2 example.com
# 每隔 2 秒发送一个 ICMP 包。
设置包大小
ping -s 1000 example.com
# 发送大小为 1000 字节的 ICMP 包。
设置超时时间
ping -W 3 example.com
# 等待响应的超时时间为 3 秒。
静默模式
ping -c 5 -q example.com
# 只显示统计信息,不显示每个 ICMP 包的详细信息。
强制使用 IPv4 或 IPv6
ping -4 example.com # 强制使用 IPv4
ping -6 example.com # 强制使用 IPv6
2.15.3、输出解析
ping 命令的典型输出如下:
PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=55 time=25.3 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=55 time=24.8 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=55 time=25.1 ms
--- example.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 24.8/25.1/25.3/0.2 ms
- icmp_seq:ICMP 包的序列号。
- ttl:包的生存时间(Time To Live)。
- time:包的往返时间(Round-Trip Time, RTT)。
- packet loss:丢包率。
- min/avg/max/stddev:最小、平均、最大和标准偏差的往返时间。
2.15.4、高级用法
测试本地网络
ping 127.0.0.1
# 测试本地环回接口,检查网络协议栈是否正常。
测试局域网设备
ping 192.168.1.1
# 测试局域网中的设备(如路由器)是否可达。
测试 DNS 解析
ping example.com
# 测试 DNS 解析是否正常,同时检查目标主机是否可达。
测试网络性能
ping -c 10 -i 0.5 example.com
# 通过发送 10 个 ICMP 包,间隔 0.5 秒,测试网络延迟和稳定性。
检查 MTU 大小
ping -s 1472 -M do example.com
# 测试最大传输单元(MTU)大小。如果包大小超过 MTU,会收到“Packet needs to be fragmented”的提示。
2.15.4、注意事项
- 权限:在某些系统中,ping 需要管理员权限(如 Linux 中使用 sudo)。
- 防火墙:目标主机的防火墙可能阻止 ICMP 包,导致 ping 失败。
- 网络问题:如果 ping 失败,可能是网络配置、路由或硬件问题。
2.15.5、与其他工具的比较
- traceroute:用于追踪数据包从源到目标的路径。
- mtr:结合 ping 和 traceroute 的功能,实时显示网络状况。
- fping:快速并行 ping 多个主机。
2.16、traceroute
traceroute 是一个网络诊断工具,用于追踪数据包从源主机到目标主机的路径。它通过发送一系列 ICMP 或 UDP 包,并逐步增加 TTL(Time To Live)值,从而显示数据包经过的每一跳(路由器或网关)的 IP 地址和延迟信息。它默认发送的数据包大小是 40 字节。
2.16.1、基本用法
traceroute [选项] [目标主机名或IP地址]
常用选项:
-I
使用 ICMP 包(默认使用 UDP 包)。-T
使用 TCP SYN 包。-n
不解析主机名,直接显示 IP 地址。-m <最大跳数>
设置最大跳数(默认 30)。-q <查询次数>
每跳发送的查询次数(默认 3)。-w <超时时间>
设置等待响应的超时时间(秒)。-4
强制使用 IPv4。-6
强制使用 IPv6。
2.16.2、常用操作
追踪路径
traceroute example.com
# 追踪数据包到 example.com 的路径。
使用 ICMP 包
traceroute -I example.com
# 使用 ICMP 包代替默认的 UDP 包。
不解析主机名
traceroute -n example.com
# 直接显示 IP 地址,不解析主机名。
设置最大跳数
traceroute -m 20 example.com
# 设置最大跳数为 20。
设置查询次数
traceroute -q 5 example.com
# 每跳发送 5 个查询包。
设置超时时间
traceroute -w 2 example.com
# 设置等待响应的超时时间为 2 秒。
强制使用 IPv4 或 IPv6
traceroute -4 example.com # 强制使用 IPv4
traceroute -6 example.com # 强制使用 IPv6
2.16.3、输出解析
traceroute 命令的典型输出如下:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.345 ms 1.456 ms
2 10.0.0.1 (10.0.0.1) 5.678 ms 5.789 ms 5.890 ms
3 203.0.113.1 (203.0.113.1) 10.123 ms 10.234 ms 10.345 ms
4 93.184.216.34 (93.184.216.34) 25.678 ms 25.789 ms 25.890 ms
- 跳数:每行的第一个数字表示跳数(即经过的路由器数量)。
- IP 地址和主机名:显示每一跳的 IP 地址和主机名(如果启用解析)。
- 延迟:每跳的延迟时间(通常显示 3 个值,分别对应 3 次查询)。
2.16.4、高级用法
追踪本地网络
traceroute 192.168.1.1
# 追踪局域网中的设备(如路由器)路径。
追踪 IPv6 地址
traceroute -6 example.com
# 追踪 IPv6 地址的路径。
使用 TCP SYN 包
traceroute -T example.com
# 使用 TCP SYN 包代替默认的 UDP 包。
检查防火墙规则
traceroute -T -p 80 example.com
# 使用 TCP SYN 包并指定端口(如 80),检查防火墙是否允许该端口的流量。
设置包大小
traceroute -s 100 example.com
# 设置 ICMP 包的大小为 100 字节。
2.16.5、注意事项
- 权限:在某些系统中,traceroute 需要管理员权限(如 Linux 中使用 sudo)。
- 防火墙:目标主机的防火墙可能阻止 ICMP 或 UDP 包,导致某些跳无法显示。
- 网络问题:如果 traceroute 显示 *,表示该跳未响应,可能是网络配置或硬件问题。
2.16.6、与其他工具的比较
- ping:测试主机之间的连通性和延迟。
- mtr:结合 ping 和 traceroute 的功能,实时显示网络状况。
- pathping(Windows):结合 ping 和 tracert 的功能,提供更详细的统计信息。
2.17、netstat
netstat 是一个功能强大的网络工具,用于显示网络连接、路由表、接口统计信息、伪装连接、多播成员等信息。它可以帮助你监控和分析网络活动。
2.17.1、基本用法
netstat [选项]
常用选项:
-a
显示所有连接和监听端口。-t
显示 TCP 连接。-u
显示 UDP 连接。-n
以数字形式显示地址和端口号(不解析主机名和服务名)。-p
显示进程 ID 和程序名称。-r
显示路由表。-s
显示每个协议的统计信息。-l
显示监听中的端口。-c
持续输出信息(实时刷新)。-i
显示网络接口的统计信息。-g
显示多播组成员信息。
2.17.2、常用操作
显示所有连接和监听端口
netstat -a
# 显示所有活动的网络连接和监听端口。
显示 TCP 连接
netstat -at
# 显示所有 TCP 连接。
显示 UDP 连接
netstat -au
# 显示所有 UDP 连接。
以数字形式显示地址和端口
netstat -an
# 显示所有连接,但不解析主机名和服务名。
显示进程 ID 和程序名称
netstat -tunp
# 显示 TCP 和 UDP 连接,并显示进程 ID 和程序名称。
显示路由表
netstat -r
# 显示系统的路由表。
显示协议统计信息
netstat -s
# 显示每个协议(如 TCP、UDP、ICMP 等)的统计信息。
显示监听中的端口
netstat -l
# 显示所有监听中的端口。
持续输出信息
netstat -c
# 持续输出网络连接信息,类似于实时监控。
显示网络接口统计信息
netstat -i
# 显示网络接口的统计信息,包括接收和发送的数据包数量。
显示多播组成员信息
netstat -g
# 显示多播组成员信息。
2.17.3、输出解析
连接信息
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.100:22 192.168.1.1:54321 ESTABLISHED
- Proto:协议类型(如 TCP、UDP)。
- Recv-Q:接收队列中的数据量。
- Send-Q:发送队列中的数据量。
- Local Address:本地地址和端口。
- Foreign Address:远程地址和端口。
- State:连接状态(如 ESTABLISHED、LISTENING)。
路由表
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
- Destination:目标网络或主机。
- Gateway:网关地址。
- Genmask:子网掩码。
- Flags:路由标志(如 U=活动,G=网关)。
- Metric:路由成本。
- Iface:网络接口。
接口统计信息
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 12345 0 0 0 6789 0 0 0 BMRU
- Iface:网络接口名称。
- MTU:最大传输单元。
- RX-OK/TX-OK:成功接收/发送的数据包数量。
- RX-ERR/TX-ERR:接收/发送错误的数据包数量。
- RX-DRP/TX-DRP:丢弃的接收/发送数据包数量。
- RX-OVR/TX-OVR:接收/发送溢出的数据包数量。
- Flg:接口标志(如 B=广播,M=多播,R=运行,U=活动)。
2.17.4、高级用法
显示 TCP 连接的进程信息
netstat -tnp
# 显示所有 TCP 连接,并显示进程 ID 和程序名称。
显示 UDP 连接的进程信息
netstat -unp
# 显示所有 UDP 连接,并显示进程 ID 和程序名称。
显示监听中的 TCP 端口
netstat -ltn
# 显示所有监听中的 TCP 端口,并以数字形式显示地址和端口。
显示监听中的 UDP 端口
netstat -lun
# 显示所有监听中的 UDP 端口,并以数字形式显示地址和端口。
显示所有网络接口的详细信息
netstat -ie
# 显示所有网络接口的详细信息,包括 IP 地址、MAC 地址等。
显示多播组成员信息
netstat -g
# 显示多播组成员信息,包括接口和多播地址。
2.17.5、注意事项
- 权限:在某些系统中,netstat 需要管理员权限(如 Linux 中使用 sudo)。
- 替代工具:在某些现代 Linux 发行版中,ss 和 ip 命令已逐渐取代 netstat,功能更强大且性能更好。
2.17.6、与其它工具的比较
- ss:显示套接字统计信息,功能更强大且性能更好。
- ip:显示和配置网络接口、路由、地址等信息。
- lsof:显示打开的文件和网络连接。