公众号:网络技术联盟站
你好,这里是网络技术联盟站。
昨天在视频号中,发布了一则有关Linux网络命令的视频,有朋友私聊我,希望我能将每条命令都解释一下,那么今天的文章中瑞哥安排一下!
瑞哥的视频着重于简单、直观、高饱和,致力于大家一眼就能有大局观,比如就《Linux网络命令》而言,这条视频,你一眼看去就知道Linux网络命令,大概分为:
远程访问和文件传输 网络配置 DNS工具 网络排障 防火墙和安全 网络连接
一共六大类,大家在记忆的时候,就会首先记得Linux网络命令有六大类,每一类里面包含了几个重要的、常用的命令,至于每条命令的意思、如何使用,靠一个视频讲完,那又繁琐、又浪费时间,可能有些命令太简单,但是你又不得不看完,难受!
所以文章的价值就体现在这了,可以很直观、很详细的介绍出来。
让我们直接开始吧!
一、远程访问和文件传输
1.1 ssh
- 安全远程登录命令 🔒
SSH(Secure Shell)是一种网络协议,用于加密方式远程登录到服务器或其他计算机。它提供了一个安全的通道,允许用户在不安全的网络(如互联网)上进行数据传输和远程命令执行,而不必担心数据被窃听或篡改。
SSH的主要特点:
加密通信:SSH使用公钥加密技术,确保数据传输的安全性。 认证:SSH支持多种认证方式,包括密码认证、公钥认证和基于密钥的认证。 端口转发:SSH可以转发端口,使得可以通过SSH连接访问远程服务器上的服务,即使这些服务在远程服务器的防火墙后面。 远程执行命令:用户可以通过SSH在远程服务器上执行命令,就像直接在服务器上操作一样。 文件传输:SSH可以用于文件传输,如通过SCP(Secure Copy Protocol)或SFTP(SSH File Transfer Protocol)。
SSH的基本使用:
安装SSH客户端:
大多数Linux发行版和MacOS系统都预装了SSH客户端。在Windows上,你可以使用Windows 10/11自带的OpenSSH客户端,或者下载PuTTY等第三方SSH客户端。
SSH连接:
要使用SSH连接到远程服务器,你需要知道服务器的IP地址或域名,以及用于登录的用户名。如果服务器配置了SSH服务,你可以使用以下命令连接:
ssh username@server_address
例如,如果你的用户名是root
,服务器地址是192.168.3.110
,你可以使用以下命令:
ssh root@192.168.3.110
SSH密钥认证:
SSH还支持使用密钥对进行认证,这比密码认证更安全。你需要在本地计算机上生成一对密钥(公钥和私钥),然后将公钥添加到远程服务器的~/.ssh/authorized_keys
文件中。
SSH端口转发:
SSH可以用于端口转发,这在访问远程服务器上的服务时非常有用。例如,你可以使用以下命令将本地的8080端口转发到远程服务器的80端口:
ssh -L 8080:localhost:80 username@server_address
这样,你就可以通过访问本地的8080端口来访问远程服务器上的80端口服务。
SSH是一个功能强大的工具,适用于系统管理员、开发者和任何需要安全远程访问计算机的用户。通过SSH,你可以安全地管理远程服务器,传输文件,甚至执行复杂的网络操作。
1.2 scp
- 安全文件复制命令 📁
scp
(Secure Copy Protocol)是一个基于SSH协议的文件传输工具,它允许用户在两台计算机之间安全地复制文件和目录。scp
使用SSH进行数据传输,因此它提供了与SSH相同的加密和身份验证功能,确保数据在传输过程中的安全性。
scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2
user:远程主机的用户名(如果省略,则使用当前用户的用户名)。 SRC_HOST:源主机的地址(可以是IP地址或域名)。 DEST_HOST:目标主机的地址。 file1:要复制的源文件或目录的路径。 file2:目标路径,可以是文件名或目录路径。
scp的使用示例:
从本地复制文件到远程主机:
scp /path/to/local/file username@remote_host:/path/to/remote/directory
这条命令会将本地路径/path/to/local/file
的文件复制到远程主机username
用户的/path/to/remote/directory
目录下。
从远程主机复制文件到本地:
scp username@remote_host:/path/to/remote/file /path/to/local/directory
这条命令会将远程主机username
用户的/path/to/remote/file
文件复制到本地的/path/to/local/directory
目录下。
使用绝对路径:
scp /absolute/path/to/local/file username@remote_host:/absolute/path/to/remote/directory
使用公钥认证:
如果你的远程主机配置了SSH密钥认证,你可以使用scp
而不需要输入密码:
scp /path/to/local/file username@remote_host:/path/to/remote/directory
压缩文件后再传输:
scp
本身不支持压缩,但你可以结合使用gzip
和scp
来实现:
gzip -c /path/to/local/file | scp username@remote_host:/path/to/remote/directory/file.gz
然后在远程主机上解压:
gunzip /path/to/remote/directory/file.gz
递归复制目录:
scp
不支持递归复制目录,但你可以使用-r
选项:
scp -r /path/to/local/directory username@remote_host:/path/to/remote/directory
注意事项:
scp
默认使用SSH的端口22,如果远程主机的SSH服务运行在不同的端口,你需要使用-P
选项指定端口。scp
在传输过程中会提示输入密码,除非你配置了SSH密钥认证。scp
不支持交互式输入,如果需要传输敏感信息,请确保使用SSH密钥认证。
scp
是一个简单而强大的工具,适用于日常的文件传输需求,特别是在需要加密传输的场景下。通过结合使用SSH和scp
,你可以确保数据的安全性和完整性。
1.3 rsync
- 文件同步命令 🔄
rsync
是一个非常强大的文件同步工具,它通过一个远程或本地的shell来复制和同步文件。与scp
不同,rsync
支持更高级的功能,如增量文件传输、压缩数据传输、忽略文件属性差异等。这使得rsync
在备份和镜像网站时非常有用。
rsync [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2
user:远程主机的用户名(如果省略,则使用当前用户的用户名)。 SRC_HOST:源主机的地址(可以是IP地址或域名)。 DEST_HOST:目标主机的地址。 file1:要同步的源文件或目录的路径。 file2:目标路径,可以是文件名或目录路径。
rsync的使用示例:
同步本地目录到另一个本地目录:
rsync -av /path/to/source/directory /path/to/destination/directory
这条命令会同步/path/to/source/directory
到/path/to/destination/directory
,-a
选项表示归档模式,-v
表示详细模式。
同步远程目录到本地目录:
rsync -av username@remote_host:/path/to/remote/directory /path/to/local/directory
这条命令会从远程主机username
用户的/path/to/remote/directory
同步文件到本地的/path/to/local/directory
目录。
同步本地目录到远程目录:
rsync -av /path/to/local/directory username@remote_host:/path/to/remote/directory
这条命令会将本地的/path/to/local/directory
同步到远程主机username
用户的/path/to/remote/directory
目录。
使用SSH进行加密传输:
rsync -avz -e ssh /path/to/local/directory username@remote_host:/path/to/remote/directory
这条命令使用SSH加密传输,-z
选项表示压缩数据。
删除已删除的文件:
rsync -av --delete /path/to/source/directory /path/to/destination/directory
这条命令在同步时会删除目标目录中已经从源目录删除的文件。
同步时排除某些文件或目录:
rsync -av --exclude 'pattern' /path/to/source/directory /path/to/destination/directory
这条命令在同步时会排除匹配pattern
的文件或目录。
同步时仅更新已更改的文件:
rsync -avu /path/to/source/directory /path/to/destination/directory
这条命令使用-u
选项,仅同步那些已更改的文件,不同步未更改的文件。
注意事项:
rsync
默认使用SSH的端口22,如果远程主机的SSH服务运行在不同的端口,你需要使用-e
选项指定端口。rsync
在同步时会保留文件的权限和时间戳,除非使用-a
选项。rsync
可以通过--progress
选项显示同步进度。
rsync
是一个功能丰富的工具,它不仅可以用于文件传输,还可以用于数据备份和同步。它的增量传输特性使得在网络带宽有限的情况下同步大量数据变得非常高效。
二、网络配置
2.1 ifconfig
- 网络接口配置命令 📡
ifconfig
(interface configure)是一个在Linux系统中用来配置和显示网络接口参数的命令行工具。它允许用户查看和手动配置网络接口的IP地址、子网掩码、广播地址等参数。不过,需要注意的是,ifconfig
命令在一些新的Linux发行版中已经被ip
命令所取代,后者是ifconfig
的现代替代品。
ifconfig的基本用法:
显示所有网络接口的状态:
ifconfig
显示特定网络接口的状态:
ifconfig enp3s0
这条命令会显示名为enp3s0
的网络接口的状态。
为网络接口配置IP地址:
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
这条命令会给eth0
接口配置IP地址192.168.1.100
和子网掩码255.255.255.0
。
启用和禁用网络接口:
ifconfig eth0 up
ifconfig eth0 down
up
命令启用接口,而down
命令禁用接口。
添加和删除ARP代理:
ifconfig eth0:0 192.168.2.100 netmask 255.255.255.0
ifconfig eth0:0 down
这条命令会为eth0
接口创建一个别名eth0:0
,并配置IP地址192.168.2.100
。
显示网络接口的统计信息:
ifconfig -a
-a
选项会显示所有接口,包括未激活的接口。
注意事项:
ifconfig
命令的配置在重启后不会保留,如果需要永久配置网络接口,需要修改网络配置文件。在使用 ifconfig
命令时,需要具有相应的权限,通常需要root
权限。ifconfig
命令的输出可能会因不同的Linux发行版和内核版本而有所差异。
尽管ifconfig
命令在一些系统中已经不再是首选工具,但它仍然广泛存在于许多Linux系统中,并且对于快速查看和配置网络接口非常有用。对于需要更现代化和功能更强大的网络管理工具的用户,推荐使用ip
命令。
2.2 ip addr
- 现代网络配置命令 🌟
ip addr
是 ip
命令的一个子命令,用于显示和操作网络接口的地址。它是 ifconfig
命令的现代替代品,提供了更灵活和强大的网络接口管理功能。ip
命令是 Linux 中用于网络配置的主要工具之一,它允许用户查看和修改网络接口的IP地址、路由表、网络设备等。
ip addr 的基本用法:
显示所有网络接口的地址:
ip addr
这条命令会列出所有网络接口的IP地址信息。
显示特定网络接口的地址:
ip addr show enp3s0
这条命令会显示名为 enp3s0
的网络接口的IP地址信息。
添加IP地址到网络接口:
ip addr add 192.168.1.100/24 dev eth0
这条命令会给 eth0
接口添加一个IP地址 192.168.1.100
,子网掩码为 /24
(即 255.255.255.0
)。
删除IP地址从网络接口:
ip addr del 192.168.1.100/24 dev eth0
这条命令会从 eth0
接口删除IP地址 192.168.1.100
。
显示所有网络接口的详细信息:
ip addr show scope global
这条命令会显示所有全局范围内的网络接口的详细信息。
显示链路本地地址:
ip addr show scope link
这条命令会显示所有链路本地地址。
常用选项:
show
:显示网络接口的地址信息。add
:添加一个新的地址到网络接口。del
:从网络接口删除一个地址。flush
:删除网络接口上的所有地址。
注意事项:
使用 ip addr
命令时,通常需要具有相应的权限,可能需要root
权限。ip addr
命令的配置在重启后不会保留,如果需要永久配置网络接口,需要修改网络配置文件。ip addr
命令的输出可能会因不同的Linux发行版和内核版本而有所差异。
ip addr
是一个非常有用的工具,它提供了一种更现代和灵活的方式来管理Linux系统中的网络接口地址。通过使用 ip addr
,用户可以轻松地查看和修改网络配置,而不需要重启网络服务。
三、DNS工具
3.1 host
host
是一个用于查询DNS来查找域名与IP地址映射或其它DNS记录的命令行工具。它通常包含在BIND(Berkeley Internet Name Domain)软件包中,BIND是实现域名系统(DNS)的软件。
host命令的基本用法:
查询A记录(地址记录):
host -t A baidu.com
这条命令会查询baidu.com
的A记录,即其对应的IPv4地址。
查询AAAA记录(IPv6地址记录):
host -t AAAA baidu.com
这条命令会查询baidu.com
的AAAA记录,即其对应的IPv6地址。
查询MX记录(邮件交换记录):
host -t MX baidu.com
这条命令会查询baidu.com
的MX记录,这些记录用于确定负责处理收到的电子邮件的邮件服务器。
查询NS记录(名称服务器记录):
host -t NS baidu.com
这条命令会查询baidu.com
的NS记录,这些记录标识了负责该域名的权威DNS服务器。
查询TXT记录:
host -t TXT baidu.com
这条命令会查询baidu.com
的TXT记录,这些记录通常用于提供关于域名的额外信息,如SPF(Sender Policy Framework)记录。
查询CNAME记录(规范名称记录):
host -t CNAME baidu.com
这条命令会查询baidu.com
的CNAME记录,这些记录用于将一个域名指向另一个域名。
常用选项:
-t
:指定要查询的记录类型。-l
:列出所有记录。-b
:使用TCP进行查询(默认是UDP)。-v
:显示详细模式,包括查询过程中的所有DNS服务器和响应。-r
:递归查询,不使用本地的DNS缓存。
注意事项:
host
命令的输出可能会因不同的操作系统和DNS服务器配置而有所差异。在某些系统中, host
命令可能需要安装额外的软件包才能使用。host
命令通常用于故障排除网络连接问题和DNS解析问题。
host
是一个简单但功能强大的工具,可以帮助你理解和验证DNS记录,这对于网络管理和故障排除非常重要。
3.2 dig
- DNS查询命令 🕵️♂️
dig
是一个功能强大的命令行工具,用于查询DNS信息。它能够提供关于域名、IP地址以及其他DNS记录的详细信息。以下是 dig
命令的一些基本用法和功能:
基本用法
查询A记录:
dig baidu.com A
这条命令查询 baidu.com
的A记录,即IPv4地址。
查询MX记录:
dig baidu.com MX
这条命令查询 baidu.com
的MX记录,即邮件交换记录。
查询NS记录:
dig baidu.com NS
这条命令查询 baidu.com
的NS记录,即名称服务器记录。
查询TXT记录:
dig baidu.com TXT
这条命令查询 baidu.com
的TXT记录,通常用于SPF记录等。
查询CNAME记录:
dig baidu.com CNAME
这条命令查询 baidu.com
的CNAME记录,即规范名称记录。
高级用法
仅显示查询结果:
dig baidu.com A +noall +answer
这条命令仅显示查询结果,不显示其他信息。
显示最简答案:
dig www.baidu.com +short
这条命令查询百度的A记录,并显示最简答案。
显示详细信息但不显示dig版本等信息:
dig +nocmd baidu.com A +multiline +noall +answer
这条命令显示详细信息,但不显示dig版本等信息。
通过IP查询域名(PTR记录):
dig -x 127.0.0.1 +short
这条命令通过IP地址查询域名。
输出查询全过程:
dig baidu.com +trace
这条命令输出查询 baidu.com
的A记录的DNS解析全过程。
使用指定的NS服务器解析指定域名:
dig @ns1.baidu.com www.baidu.com
这条命令使用指定的NS服务器解析指定域名。
批量查询文件中的域名:
dig -f /path/to/host-list.txt +noall +answer
这条命令批量查询文件中的域名。
dig
命令是DNS查询的利器,它提供了丰富的查询选项和输出格式,使其成为系统管理员和网络工程师的必备工具。通过 dig
,用户可以深入了解计算机如何与名称服务器交互,以及如何获取和管理DNS信息。
3.3 nslookup
- DNS查询命令 🔍
nslookup
是一个用于查询 DNS 来查找域名与 IP 地址映射或其它 DNS 记录的命令行工具。它最初是作为 UNIX 系统的一个网络管理工具而开发的,现在在 Windows 和大多数 Linux 发行版中都可用。nslookup
可以用来诊断 DNS 问题,测试域名解析,或者查找与域名相关的特定信息。
nslookup 的基本用法:
查询域名的 IP 地址:
nslookup baidu.com
这条命令会显示与 baidu.com
相关的所有 DNS 信息,包括其 IPv4 和 IPv6 地址。
指定类型查询:
nslookup -type=A baidu.com
这条命令仅查询 baidu.com
的 A 记录(IPv4 地址)。
查询 IPv6 地址:
nslookup -type=AAAA baidu.com
这条命令查询 baidu.com
的 AAAA 记录(IPv6 地址)。
查询邮件交换记录(MX 记录):
nslookup -type=MX baidu.com
这条命令显示 baidu.com
的 MX 记录,这些记录指示邮件服务器的位置。
查询名称服务器(NS 记录):
nslookup -type=NS baidu.com
这条命令显示负责 baidu.com
的 DNS 服务器。
交互式查询:
nslookup
> baidu.com
在 nslookup
的交互式模式下,你可以输入不同的域名来查询。
指定 DNS 服务器:
nslookup baidu.com 8.8.8.8
这条命令使用 Google 的公共 DNS 服务器(8.8.8.8)来解析 baidu.com
。
注意事项:
nslookup
默认使用你的系统配置的 DNS 服务器进行查询。在某些系统中, nslookup
可能需要安装额外的软件包才能使用。nslookup
的输出可能会因不同的操作系统和 DNS 服务器配置而有所差异。
nslookup
是一个简单但功能强大的工具,可以帮助你理解和验证 DNS 记录,这对于网络管理和故障排除非常重要。通过使用 nslookup
,你可以快速检查域名的 DNS 配置是否正确,以及是否存在解析问题。
四、网络排障
4.1 ping
- 网络连通性测试命令 🏓
ping
是一个常用的网络诊断工具,用于测试主机之间的网络连通性。它通过发送 ICMP(Internet Control Message Protocol)回声请求消息到目标主机,并监听回声应答来检查网络连接。ping
命令的名称来源于声纳术语,意在“听”到网络路径上的“回声”。
ping命令的基本用法:
基本连通性测试:
ping baidu.com
这条命令会向 baidu.com
发送 ICMP 回声请求,并显示回声应答。
指定发送次数:
ping -c 4 baidu.com
这条命令会向 baidu.com
发送 4 次 ICMP 回声请求。
使用IPv6:
ping6 baidu.com
这条命令使用 IPv6 协议向 baidu.com
发送 ICMP 回声请求。
指定接口:
ping -I eth0 baidu.com
这条命令指定使用 eth0
网络接口发送 ICMP 回声请求。
指定数据包大小:
ping -s 1024 baidu.com
这条命令发送 ICMP 回声请求,数据包大小为 1024 字节。
快速连续发送:
ping -f baidu.com
这条命令会快速连续发送 ICMP 回声请求,直到手动停止。
显示详细的网络路径:
ping -D baidu.com
这条命令会显示数据包通过网络的路径。
使用外部网络接口:
ping -S baidu.com
这条命令会显示发送和接收数据包的源和目的地址。
注意事项:
ping
命令的输出可能会因不同的操作系统和网络配置而有所差异。在某些网络环境中,ICMP 请求可能被防火墙或路由器阻止,导致 ping
命令失败。ping
命令通常需要相应的权限,特别是在发送大量数据包或使用某些选项时。
ping
是一个非常有用的工具,可以帮助你快速检查网络连接、诊断网络问题以及测试网络延迟。通过使用不同的选项,你可以获取关于网络路径和数据包传输的详细信息。
4.2 ss
- 套接字统计命令 🔌
ss
是一个在 Linux 系统中用于查看套接字统计信息的命令,功能类似于 netstat
,但速度更快,提供更详细的网络连接状态信息。它是 Socket Statistics(套接字统计)的缩写,用于显示和分析系统的网络连接状态。
基本用法和选项
查看所有套接字连接:
ss -a
显示系统中所有套接字的详细信息,包括监听和非监听的连接。
仅显示 TCP 套接字:
ss -t
仅显示当前系统的 TCP 连接。
仅显示 UDP 套接字:
ss -u
仅显示当前系统的 UDP 连接。
查看正在监听的套接字:
ss -l
仅显示正在监听的套接字,不包括已建立的连接。
显示与套接字关联的进程信息:
ss -p
显示所有与网络连接相关的进程信息。
以数字形式显示地址:
ss -n
以数字形式显示地址,而不是解析成主机名。
将主机名解析为 IP 地址:
ss -r
将主机名解析为 IP 地址。
显示套接字的摘要信息:
ss -s
显示套接字的摘要信息。
其他常用选项
仅显示 IPv4 套接字:
ss -4
仅显示 IPv6 套接字:
ss -6
显示详细的内部信息:
ss -i
显示 TCP 计时器信息:
ss -o
通过 ID 杀死指定的 socket:
ss -K
指定协议族:
ss -f --family=FAMILY
FAMILY 可以是 inet
, inet6
, unix
, link
, netlink
等。
显示每个套接字使用的内存:
ss -m
不显示标题行:
ss -H
显示详细的输出:
ss -v
ss
命令因其高效和丰富的功能,成为了网络诊断和监控的有力工具,特别是在需要快速获取网络连接状态信息时。
4.3 netstat
- 网络统计命令 📊
netstat
是一个在 Unix 和 Unix-like 操作系统中广泛使用的网络工具,用于显示网络连接、路由表、接口统计等网络信息。它是网络管理员和系统管理员的重要工具,用于诊断网络问题和监控网络状态。
netstat 的基本用法:
显示所有网络连接:
netstat -a
这条命令会显示系统中所有的活动网络连接和监听端口。
显示 TCP 网络连接:
netstat -t
这条命令仅显示 TCP 连接。
显示 UDP 网络连接:
netstat -u
这条命令仅显示 UDP 连接。
显示监听端口:
netstat -l
这条命令显示所有正在监听的端口。
显示网络服务的状态:
netstat -s
这条命令显示每个协议的统计数据,包括 TCP、UDP、ICMP 等。
显示程序和进程的网络连接:
netstat -p
这条命令显示每个连接或监听端口所属的进程ID和名称。
显示详细的网络连接信息:
netstat -n
这条命令以数字形式显示地址和端口号,不进行域名解析。
组合选项:
显示所有 TCP 和 UDP 连接:
netstat -tu
显示所有监听端口和进程信息:
netstat -lp
显示所有 TCP 连接和监听端口:
netstat -tl
其他常用选项:
显示路由表:
netstat -r
显示网络接口统计:
netstat -i
显示持续连接的持续时间:
netstat -o
注意事项:
netstat
命令的输出可能会因不同的操作系统和网络配置而有所差异。在某些系统中, netstat
可能需要安装额外的软件包才能使用。netstat
的一些选项可能需要 root 权限才能执行。
netstat
是一个功能丰富的工具,可以帮助你了解系统的网络状态,包括哪些服务正在监听,哪些服务正在被使用,以及网络流量的走向。尽管在一些新的 Linux 发行版中,ss
命令(Socket Statistics)正在逐渐取代 netstat
,但 netstat
仍然是一个非常重要的网络诊断工具。
4.4 traceroute
- 路径跟踪命令 🗺️
traceroute
是一个网络诊断工具,用于确定数据包从本地主机到远程主机(如网站或服务器)的路径。它显示经过的每个路由器节点和在每个节点上的延迟时间,帮助你识别网络中可能存在的问题,例如数据包丢失或高延迟。
traceroute 的基本用法:
追踪到特定主机的路径:
traceroute baidu.com
这条命令会显示数据包从你的计算机到 baidu.com
的路径。
使用特定的端口和服务:
traceroute -p 33000 baidu.com
这条命令指定使用 UDP 端口 33000 进行追踪。
使用特定的网络接口:
traceroute -I eth0 baidu.com
这条命令指定使用 eth0
网络接口进行追踪。
使用IPv6地址:
traceroute -6 baidu.com
这条命令使用IPv6协议进行追踪。
设置最大跳数:
traceroute -m 10 baidu.com
这条命令设置最大跳数为10,即最多追踪10个路由器节点。
显示每个节点的IP地址和主机名:
traceroute -A baidu.com
这条命令同时显示每个节点的IP地址和尝试解析的主机名。
常用选项:
-p <port>
:指定发送数据包的端口号。-I
:使用 ICMP ECHO 请求而不是默认的 UDP 数据包进行追踪。-6
:使用 IPv6 协议进行追踪。-m <max_hops>
:设置最大跳数。-A
:显示每个节点的IP地址和主机名。-T
、-N
、-P
:分别使用TCP连接、NS(Name Server)查询或多个端口进行追踪。
注意事项:
traceroute
命令的输出可能会因不同的操作系统和网络配置而有所差异。在某些网络环境中, traceroute
可能会被防火墙或路由器阻止,导致无法显示完整的路径。traceroute
的一些选项可能需要 root 权限才能执行。
traceroute
是一个非常有用的工具,可以帮助你了解数据包在网络上的传输路径,以及识别网络延迟和丢包等问题的来源。通过分析 traceroute
的输出,你可以更好地理解网络的结构和性能。
五、防火墙和安全
5.1 iptables
- 防火墙规则设置命令 🔥
iptables
是 Linux 系统中一个非常强大的防火墙工具,用于配置网络流量的过滤规则。它是内核空间的网络包过滤框架,提供了对进出网络接口的数据包进行控制的能力。iptables
可以基于数据包的源地址、目的地址、协议类型、端口号等多种条件来决定是否允许数据包通过。
iptables 的基本用法:
查看当前的 iptables 规则:
iptables -L
这条命令会列出当前所有的 iptables 规则。
添加规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这条命令会在 INPUT 链的末尾添加一条规则,允许所有 TCP 流量通过 22 端口(SSH)。
删除规则:
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
这条命令会从 INPUT 链中删除允许所有 TCP 流量通过 22 端口的规则。
插入规则:
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
这条命令会在 INPUT 链的开头插入一条规则,允许所有 TCP 流量通过 22 端口。
保存规则:
iptables-save > /etc/iptables/rules.v4
这条命令会将当前的 iptables 规则保存到文件中,以便在系统重启后恢复。
恢复规则:
iptables-restore < /etc/iptables/rules.v4
这条命令会从文件中恢复 iptables 规则。
设置默认策略:
iptables -P INPUT DROP
这条命令将 INPUT 链的默认策略设置为 DROP,即默认情况下拒绝所有进入的连接。
常用选项和参数:
-A <chain>
:在指定链的末尾添加规则。-D <chain>
:从指定链中删除规则。-I <chain> <rulenum>
:在指定链的指定位置插入规则。-p <protocol>
:指定协议(如 tcp, udp, icmp)。--dport <port>
:指定目的端口。-s <source>
:指定源地址。-d <destination>
:指定目的地址。-j <action>
:指定规则的动作(如 ACCEPT, DROP, REJECT)。-L
:列出规则。-F
:清空指定链的所有规则。-X
:删除指定链。-P <chain> <policy>
:设置指定链的默认策略。
注意事项:
iptables
规则的顺序很重要,因为数据包是按顺序匹配规则的。某些操作可能需要 root 权限。 在修改 iptables 规则时要小心,错误的规则可能会导致无法访问系统。 iptables
规则在重启后不会自动保存,需要手动保存到文件并在启动时恢复。
iptables
是一个功能丰富的工具,但同时也相对复杂。正确配置 iptables
可以提高系统的安全性,防止未授权访问,并控制进出网络流量。对于需要更现代化和灵活的防火墙管理,可以考虑使用 firewalld
,它是 iptables
的一个动态替代品。
5.2 ufw
ufw
(Uncomplicated Firewall)是一个用户友好的防火墙管理工具,它为 iptables
提供了一个简化的接口,使得配置防火墙变得更加简单。以下是 ufw
的一些主要功能和用法:
功能:
简化管理: ufw
提供了一个简化的界面,使得用户可以更容易地管理网络规则,无需深入了解iptables
的复杂性。默认规则: ufw
允许设置默认的入站和出站流量策略,例如,默认可以设置为拒绝所有入站流量,允许所有出站流量。规则添加:用户可以添加规则来允许或拒绝特定的端口、服务或IP地址。 高级规则: ufw
支持基于IP地址、子网和IP地址/子网/端口组合的高级规则。用户规则文件: ufw
允许用户在/etc/ufw/user.rules
文件中直接配置防火墙规则,修改后需要重新载入ufw
以使新规则生效。状态检查:用户可以使用 sudo ufw status
命令来检查ufw
的状态,包括当前的防火墙规则。日志记录: ufw
提供了日志记录功能,有助于监控和排查网络安全问题。IPv6 支持: ufw
支持 IPv6,能够为同时使用 IPv4 和 IPv6 的网络配置防火墙规则。
基本用法:
启用防火墙:
sudo ufw enable
这条命令启用 ufw
防火墙并应用配置的规则。
禁用防火墙:
sudo ufw disable
这条命令禁用 ufw
防火墙。
检查防火墙状态:
sudo ufw status
这条命令显示防火墙的当前状态及活动规则(默认显示简要信息)。使用 verbose
选项可以显示更详细的信息。
重置 ufw
:
sudo ufw reset
这条命令重置 ufw
,清除所有已定义的规则并禁用防火墙。
允许或拒绝端口:
sudo ufw allow 22
sudo ufw deny 80
这些命令分别允许和拒绝特定端口的流量。
允许或拒绝服务:
sudo ufw allow OpenSSH
sudo ufw deny http
这些命令使用服务名而不是端口号来管理规则。
允许或拒绝特定 IP 地址的连接:
sudo ufw allow from 203.0.113.4
sudo ufw deny from 192.168.1.123
这些命令允许或阻止来自特定 IP 地址的连接。
ufw
是一个简单但功能强大的防火墙工具,适合管理入站和出站的网络流量。它通过提供易于使用的命令行界面,简化了复杂的防火墙规则配置,特别适合于 Ubuntu 等系统环境。
5.3 nmap
- 网络扫描命令 🕵️♀️
nmap
(Network Mapper)是一款开源的网络扫描和安全审计工具,它可以用来发现网络上的设备,检测开放的端口,确定运行的服务及其版本,以及检测潜在的安全漏洞。nmap
被网络管理员、安全专家和渗透测试人员广泛使用。
nmap 的基本用法:
扫描单个主机:
nmap target_host
这条命令会扫描指定的目标主机。
扫描多个主机:
nmap target_host1,target_host2
这条命令会扫描多个目标主机。
扫描整个网络:
nmap 192.168.3.0/24
这条命令会扫描整个 C 类网络。
扫描特定端口:
nmap -p 80,443 target_host
这条命令会扫描目标主机上的80和443端口。
使用TCP协议扫描:
nmap -sT target_host
这条命令使用TCP连接扫描目标主机。
使用UDP协议扫描:
nmap -sU target_host
这条命令使用UDP协议扫描目标主机。
进行快速扫描:
nmap -F target_host
这条命令进行快速扫描,只扫描常见的端口。
进行慢速扫描:
nmap -sS -sU -p- target_host
这条命令进行慢速扫描,使用TCP SYN和UDP协议扫描所有端口。
检测操作系统指纹:
nmap -O target_host
这条命令尝试识别目标主机的操作系统。
检测版本信息:
nmap -sV target_host
这条命令尝试确定目标主机上运行的服务版本。
常用选项:
-sS
:使用TCP SYN扫描(半开放扫描)。-sT
:使用TCP连接扫描。-sU
:使用UDP扫描。-sV
:服务版本检测。-O
:操作系统检测。-p
:指定要扫描的端口范围。-F
:快速扫描,只扫描TOP 100个端口。-v
:增加输出的详细程度。-n
:不进行DNS解析。-Pn
:跳过主机发现阶段,直接扫描。-A
:启用操作系统检测、版本检测、脚本扫描和traceroute。
注意事项:
nmap
的扫描可能会被目标主机的防火墙或入侵检测系统(IDS)检测到。在某些网络环境中,未经授权使用 nmap
进行扫描可能违反法律或政策。nmap
扫描可能会对网络性能产生影响,特别是在进行大规模扫描时。
nmap
是一个功能强大的工具,它不仅可以用于安全审计和网络管理,还可以用于教育和研究。正确使用 nmap
可以帮助你更好地了解你的网络环境,并识别潜在的安全风险。
六、网络连接
6.1 telnet
- 远程登录命令 📞
telnet
是一个用于远程登录的网络协议,它允许用户从本地计算机连接到远程主机,并在远程系统上执行命令。telnet
客户端向 telnet
服务器发送请求,以建立一个控制会话,从而可以进行远程操作。
telnet 的基本用法:
连接到远程主机:
telnet remote_host
这条命令会尝试连接到指定的远程主机。
指定端口连接:
telnet remote_host 23
这条命令会尝试通过端口23(telnet
默认端口)连接到指定的远程主机。
常用选项:
-a
:尝试自动登录。-l
:指定远程登录的用户名称。-f
:使用全名域名而不是别名。-8
:使用 8 位数据路径。
注意事项:
telnet
协议不加密传输的数据,包括用户名、密码和所有其他数据,因此它不安全,特别是在公共网络上。由于安全问题,许多系统已经不推荐或不再使用 telnet
协议,而是推荐使用ssh
(Secure Shell)这样的加密远程登录工具。在某些系统上, telnet
客户端可能没有预装,需要额外安装。telnet
客户端和服务端的实现可能因操作系统而异,导致在不同系统间的兼容性问题。
6.2 curl
- 数据传输工具 🌪️
curl
是一个功能强大的命令行工具,用于传输数据,支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、 TFTP、DICT、TELNET、SMB、TSP 等。它用于从或向服务器发送数据,常用于测试、调试和与 Web 服务交互。
curl 的基本用法:
发送 HTTP GET 请求:
curl http://example.com
这条命令会向 http://example.com
发送一个 HTTP GET 请求,并显示响应内容。
发送 HTTP POST 请求:
curl -d "param1=value1¶m2=value2" http://example.com/resource
这条命令会向指定的资源发送一个 HTTP POST 请求,并附带数据。
发送 HTTPS 请求:
curl https://example.com
这条命令会向 https://example.com
发送一个 HTTPS GET 请求。
使用用户名和密码进行认证:
curl -u username:password http://example.com
这条命令会使用 Basic Auth 认证向服务器发送请求。
上传文件:
curl -F "file=@localfile.txt" http://example.com/upload
这条命令会将本地文件 localfile.txt
上传到服务器。
下载文件:
curl -O http://example.com/file.zip
这条命令会下载 http://example.com/file.zip
并保存为 file.zip
。
使用代理:
curl -x http://proxyserver:port http://example.com
这条命令会通过指定的代理服务器发送请求。
保存响应到文件:
curl -o filename.html http://example.com
这条命令会将响应保存到 filename.html
文件中。
常用选项:
-d
:发送 POST 请求的数据。-F
:发送带有文件的 POST 请求。-u
:使用用户名和密码进行认证。-O
:将输出保存到文件中,并使用 URL 中的文件名。-o
:指定输出文件。-x
:使用代理服务器。-i
:显示响应头。-v
:详细模式,显示通信详情。-s
:静默模式,不显示进度条和错误消息。-H
:添加自定义头。-X
:指定请求方法(如 GET, POST, PUT, DELETE)。
注意事项:
curl
默认发送 GET 请求。curl
支持的协议和功能非常广泛,可以根据需要使用不同的选项和参数。curl
在处理敏感数据时不会加密传输,因此对于需要加密的场景,推荐使用 HTTPS 协议。
curl
是一个非常实用的工具,它不仅可以用于简单的数据传输,还可以用于复杂的 API 交互和自动化脚本。由于其灵活性和强大的功能,curl
成为了开发者和系统管理员日常工作中不可或缺的工具之一。
6.3 wget
- 文件下载命令 📥
wget
是一个非常流行的自由软件,用于从网络上下载文件。它是非交互式的,意味着你可以在后台运行 wget
而不需要监视或交互。wget
支持 HTTP、HTTPS 和 FTP 协议,也可以递归下载整个网站,保持链接的完整性。
wget 的基本用法:
下载单个文件:
wget http://example.com/file.zip
这条命令会从指定的 URL 下载文件。
下载并重命名文件:
wget -O newname.zip http://example.com/file.zip
这条命令会下载文件并将其保存为 newname.zip
。
限制下载速度:
wget --limit-rate=100k http://example.com/file.zip
这条命令限制下载速度不超过 100 KB/s。
使用代理下载:
wget -e use_proxy=yes -e http_proxy=http://proxyserver:port http://example.com/file.zip
这条命令通过指定的代理服务器下载文件。
递归下载网站:
wget -r -p -l 2 http://example.com
这条命令递归下载 http://example.com
网站,-l 2
表示限制递归深度为 2 层。
下载使用用户名和密码的受限访问文件:
wget --user=username --password=password http://example.com/file.zip
这条命令使用提供的用户名和密码下载文件。
检查文件完整性:
wget -c http://example.com/file.zip
这条命令使用断点续传功能下载文件,如果下载中断,可以恢复。
常用选项:
-O
:指定输出文件名。-r
:递归下载。-p
:递归下载时,尝试下载所有相关的文件(如图片、样式表等)。-l
:递归下载时,限制递归深度。--limit-rate
:限制下载速度。-e
:设置环境变量,如代理。--user
和--password
:提供 HTTP 认证的用户名和密码。-c
:继续部分下载的文件。
注意事项:
wget
默认不会重定向,如果需要跟随重定向,可以使用--follow-ftp
或--follow-all
选项。wget
默认不会覆盖已存在的文件,如果需要覆盖,可以使用-nc
(--no-clobber)选项。wget
在使用递归下载时,会尝试下载指定页面上所有链接到的文件,这可能会导致大量数据下载。
wget
是一个非常强大的命令行工具,特别适合于自动化下载任务。它简单易用,功能丰富,是 Linux 和其他 Unix-like 系统中常用的网络工具之一。
本文完!
最后再欣赏一下视频:
记得关注视频号哦!
网络工程师如果学Python,这几个类库一定要掌握,有用!
IT知识百科:什么是防火墙?有哪些分类?
同样都是网络测试命令,ping、ping6、traceroute、traceroute6、mtr五个命令有啥区别?
END
给大家分享一款针对咱们网络工程师的【子网掩码计算器】,由瑞哥自研开发,速度快,体验感棒,永久针对粉丝免费! 网络专属技术群
构建高质量的技术交流社群,欢迎从事网络技术、网络安全、系统集成、网络开发、或者对网络技术感兴趣,也欢迎技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
7群已满!8群开放!!!
💡文明发言,以交流技术、职位内推、行业探讨为主
广告人士勿入,切勿轻信私聊,防止被骗
支持就在看
一键四连,你的技术也四连