Linux运维——网络管理
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 EmailThis 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 myserverHostName 192.168.1.100User userPort 2222IdentityFile /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#53Non-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 packets1 192.168.1.1 (192.168.1.1) 1.234 ms 1.345 ms 1.456 ms2 10.0.0.1 (10.0.0.1) 5.678 ms 5.789 ms 5.890 ms3 203.0.113.1 (203.0.113.1) 10.123 ms 10.234 ms 10.345 ms4 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:显示打开的文件和网络连接。
相关文章:
Linux运维——网络管理
Linux网络管理 一、Linux网络应用要点二、命令常见用法2.1、curl2.1.1、发送GET请求2.1.2、发送POST请求2.1.3、设置请求头2.1.4、处理cookies2.1.5、处理重定向2.1.6、调试和详细信息2.1.7、使用代理2.1.8、文件上传2.1.9、其它常用选项2.1.10、综合示例 2.2、wget2.2.1、基本…...

STM32CUBEIDE FreeRTOS操作教程(十三):task api 任务访问函数
STM32CUBEIDE FreeRTOS操作教程(十三):task api 任务访问函数 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板…...

Jmeter+Jenkins接口压力测试持续集成
项目介绍 接口功能测试应用: http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能:获取对应城市的天气预报 请求方法:Get 压测脚本开发工具:jmeter 源码脚本位置: https://github.com/shife…...

深入浅出ES6:现代JavaScript的基石
ES6(ECMAScript 2015)是JavaScript语言的一次重大更新,引入了许多新特性,使JavaScript更加强大、优雅和易于维护。这些特性已经成为现代JavaScript开发的基石,掌握它们对于任何JavaScript开发者都至关重要。本文将深入…...
实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能
下面将详细介绍如何实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能。我们将按照以下步骤进行: 步骤1&#x…...

潜水泵,高效排水,守护城市与农田|深圳鼎跃
洪水是常见的自然灾害,在春夏季节的我国降水多为丰富,容易造成城市内部的洪涝灾害。特别是低洼地区的积水,不仅容易造成城市交通的出行不便,还存在潜在的隐患,严重影响了人们正常生活。 潜水泵作为一种高效、可靠的排水…...

易基因:RNA甲基化修饰和R-loop的交叉调控:从分子机制到临床意义|深度综述
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 R-loop(RNA-DNA杂合结构)是转录调控、DNA复制和修复等关键细胞过程的重要组成部分。但R-loop异常积累可能会破坏基因组完整性,从而导致多种疾病的发生…...

115 道 MySQL 面试题,从简单到深入!
1. 什么是数据库事务? 数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性…...

一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格,用于比较Flask中的…...
MFC学习笔记-1
一、编辑框和按钮 //.h文件private:CString str;//给窗口类加了一个变量(定义一个成员变量),关联到IDC_EDIT1中(要在实现中关联,源文件文件夹中)CString str2;//接收button2,和IDC_EDIT2绑定 p…...

Linux搜索查找类指令
1、find指令 基本语法:find [搜索范围] [选项] 功能:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端。 常用选项: 操作 命令示例 说明 查找指定路径下的所有文件 find /path/to/dir 查找指定目…...

江协科技/江科大-51单片机入门教程——P[1-1] 课程简介P[1-2] 开发工具介绍及软件安装
本教程也力求在玩好单片机的同时了解一些计算机的基本概念,了解电脑的一些基本操作,了解电路及其元器件的基本理论,为我们学习更高级的单片机,入门IT和信息技术行业,打下一定的基础。 目录 1.课程简介 2.开发工具及…...

监听load和hashchange事件
监听load和hashchange事件 上篇文章中,我们已经将菜谱的数据给拿到,并且已经可以渲染到页面上,本篇我们将为程序添加一些事件; 注:本项目来自于Jonas Schmedtmann创建,文章仅仅作为学习作用! 菜…...
深度剖析Seata源码:解锁分布式事务处理的核心逻辑
文章目录 写在文章开头如何使用源码(配置转掉)基于AT模式详解Seata全链路流程Seata服务端启动本地服务如何基于GlobalTransaction注解开启事务客户端如何开启分布式事务RM和TC如何协调处理分支事务RM生成回滚日志事务全局提交与回滚小结参考写在文章开头 在当今分布式系统日益…...

在 Ansys Mechanical 中解决干涉拟合
有意和无意的过盈配合在工程设计和有限元分析 (FEA) 中很常见。当两个组件重叠或接触时,就会发生这种情况,从而产生应力和变形,必须仔细分析以确保功能正常。有意干涉,例如轴和轴承之间的压配合或用于固定金…...
JMeter性能问题
性能测试中TPS上不去的几种原因 性能测试中TPS上不去的几种原因_tps一直上不去-CSDN博客 网络带宽 连接池 垃圾回收机制 压测脚本 通信连接机制 数据库配置 硬件资源 压测机 业务逻辑 系统架构 CPU过高什么原因 性能问题分析-CPU偏高 - 西瓜汁拌面 - 博客园 US C…...

美国国防部(DoD)SysML v2迁移指南项目
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 分享一篇SysML v1向SysML v2迁移的资料。 下载地址:https://ndia.dtic.mil/wp-content/uploads/2023/systems/Thurs_1560710_Stirk.pdf 核心内容用DeepSeek整理如下&#…...

JavaWeb-GenericServlet源码分析(适配器/模板方法)
文章目录 类直接实现Servlet接口的弊端Servlet接口的方法适配器设计模式 适配器对象的改造关于init方法的ServletConfig对象来源使用模板方法设计模式改造init方法 GenericServlet内置抽象类ServletConfig接口ServletConfig接口简介测试再谈GenericServlet抽象类 类直接实现Ser…...
微机原理与汇编语言试题四
一、单项选择 1.(单选题)()指向的内存单元的值被CPU做为指令执行。 A. DS:SI B. CS:IP C. SS:SP D. ES:DI 正确答案:B 2.(单选题)当RESET信号进入高电平状态时,将使8086的()寄存器初始化为0FFFFH A. SS B. DS C. ES D. CS 正确答案:D 3.(单选题)堆栈段寄存器是( …...

[java基础-JVM篇]1_JVM自动内存管理
JVM内存管理涉及但不限于类加载、对象分配、垃圾回收等,本篇主要记录运行时数据区域与对象相关内容。 内容主要来源《深入理解Java虚拟机:JVM高级特性与最佳实践》与官方文档,理解与表述错漏之处恳请各位大佬指正。 目录 运行时数据区域 栈 栈…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...