
Linux网络基础
Linux网络基础
本节所讲:
1、掌握Linux中的常见网络命令
2、掌握Linux中的基本网络配置
3、掌握Linux网络故障排除方法
4、掌握常见的网络协议类型和端口
一、常用网络命令
本文将介绍常用的网络命令,包括 ping、traceroute、netstat、ifconfig、nslookup、route、dig、tcpdump、iptables、lsof、mtr。这些命令是系统管理员和网络工程师必备的工具,可以帮助他们快速排除网络故障和进行网络管理。
1.1 ping
1.1.1 ping命令作用及用法
ping
命令用于测试网络连通性,它会向指定的主机发送ICMP回显请求(也称为Ping请求),并接收该主机返回的ICMP回显应答。通过检查发送和接收的数据包数量以及往返时间(RTT)来判断主机之间的连通性。
ping
命令的基本用法为:ping <IP地址或域名>
,例如:
ping www.google.com
1.1.2 ping命令参数的含义
ping
命令的常用参数如下:
参数 | 含义 |
---|---|
-c <次数> | 指定发送的回显请求次数。默认情况下,ping 命令会一直发送请求,直到用户手动停止。 |
-i <间隔时间> | 指定发送回显请求的间隔时间(单位为秒)。默认情况下,间隔时间为1秒。 |
-s <数据包大小> | 指定发送回显请求时的数据包大小(单位为字节)。默认情况下,数据包大小为56字节。 |
-t <TTL> | 指定数据包的生存时间(Time To Live,TTL),即数据包能经过的最大路由器数量。默认情况下,TTL为64。 |
1.1.3 ping命令输出及解释
ping
命令的输出包含以下信息:
- 发送的回显请求的序号(seq)和时间戳(timestamp)
- 接收到的回显应答的序号(seq)和时间戳(timestamp)
- 发送和接收数据包的数量
- 往返时间(RTT)
- TTL值
例如:
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (14.119.104.254) 56(84) bytes of data.
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=1 ttl=128 time=24.1 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=3 ttl=128 time=37.2 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=4 ttl=128 time=21.6 ms
[root@localhost ~]# ping -c4 www.baidu.com
PING www.a.shifen.com (14.119.104.254) 56(84) bytes of data.
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=1 ttl=128 time=74.1 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=2 ttl=128 time=77.3 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=3 ttl=128 time=21.3 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=4 ttl=128 time=24.1 ms
[root@localhost ~]# ping -c4 -i 0.2 www.baidu.com
PING www.a.shifen.com (14.119.104.254) 56(84) bytes of data.
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=1 ttl=128 time=23.5 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=2 ttl=128 time=24.3 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=3 ttl=128 time=19.4 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=4 ttl=128 time=19.5 ms
[root@localhost ~]# ping -I ens32 www.baidu.com
PING www.a.shifen.com (14.119.104.189) from 192.168.1.100 ens32: 56(84) bytes of data.
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=1 ttl=128 time=37.2 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=3 ttl=128 time=52.2 ms
1.1.4 ping命令常见用途
ping
命令的常见用途如下:
- 测试本地网络连通性:通过向本地网络中的其他设备发送回显请求,测试网络的连通性。
- 测试远程网络连通性:通过向远程主机发送回显请求,测试本地主机和远程主机之间的网络连通性。
1.2 traceroute
1.2.1 traceroute命令的作用及用法
traceroute 命令使用发送的 UDP 数据包,每个数据包上面的 TTL 字段递增,直到到达目的主机。每当 TTL 达到下一跳路由器时,该路由器会将数据包丢弃,并发送一个 ICMP 时间戳回显应答消息(TTL 超时)。traceroute 利用此消息确定它到达了哪个路由器。使用此方法,traceroute 可以确定路由路径上的所有路由器,以及发送和接收响应消息所需的时间。
[root@localhost ~]# yum -y install traceroute
该命令的语法为:
traceroute [options] [host]
其中,options
为traceroute
命令的参数,host
为要跟踪的目标主机的IP地址或域名。
1.2.2 traceroute命令参数的含义
以下是traceroute
命令常用的参数及其含义:
参数 | 含义 |
---|---|
-I | 使用 ICMP 协议进行探测,默认为 UDP 协议 |
-p | 使用指定端口号发送UDP数据包 |
-q | 设置发送数据包的个数 |
-r | 忽略默认的源路由,直接发送数据包到目标主机 |
-w | 设置每个数据包的超时时间 |
-U | 使用 UDP 数据包而不是 ICMP 回显请求。 |
-T | 使用 TCP SYN 包而不是 UDP 数据包。 |
局限性:
在某些网络环境下,traceroute 可能会被防火墙或路由器配置阻止。
由于路由器可能使用不同的算法来选择路由,因此在不同的路由器上运行的 traceroute 可能会显示不同的路径。
在某些情况下,traceroute 可能无法识别中间路由器的所有 IP 地址,因为路由器可能配置为使用不同的 IP 地址响应 ICMP TTL 超时消息。
1.2.3 traceroute命令的输出及解释
traceroute
命令的输出结果包括每个路由器的IP地址、路由器名称、距离以及响应时间等信息。下面是一个示例:
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (14.119.104.254), 30 hops max, 60 byte packets
1 gateway (192.168.1.2) 0.083 ms 0.025 ms 0.021 ms
上述示例中,traceroute
命令首先显示了要跟踪的目标主机的IP地址,最大跳数(默认为30)和每个数据包的大小(默认为60字节)等信息。随后,命令输出了每个路由器的IP地址、名称、距离和响应时间。第一列为路由器的跳数,从本机到目标主机所经过的路由器数量。第二列为路由器的IP地址或名称。第三列为发送三个UDP数据包到该路由器的响应时间,单位为毫秒。
[root@localhost ~]# traceroute -n -T ip/host -p port # TCP测试
[root@localhost ~]# traceroute -n -U ip/host -p port # UDP测试
示例:
[root@localhost ~]# traceroute -n -T -p 80 www.baidu.com
traceroute to www.baidu.com (14.119.104.189), 30 hops max, 60 byte packets
1 192.168.1.2 0.093 ms 0.023 ms 0.021 ms
2 14.119.104.189 102.059 ms 114.913 ms 104.897 ms
异常情况:
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (14.119.104.189), 30 hops max, 60 byte packets
1 gateway (192.168.1.2) 0.088 ms 0.023 ms 0.016 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
1.2.4 traceroute命令的常见用途
traceroute
命令常用于诊断网络故障和调试网络问题。通过查看每个路由器的IP地址和响应时间,可以确定数据包在经过哪些路由器时出现了问题。
1.3 netstat
1.3.1 netstat命令的作用及用法
netstat
命令是一种用于查看网络状态和统计信息的命令行工具。它可以显示与计算机上正在进行的网络连接,以及在这些连接中发送和接收的数据量。
1.3.2 netstat命令参数的含义
netstat
命令有许多可用的选项和参数。以下是其中一些常用的选项和参数:
选项 | 描述 |
---|---|
-a | 显示所有网络连接,包括已建立的连接和正在监听的连接。 |
-t | 仅显示TCP连接。 |
-u | 仅显示UDP连接。 |
-n | 使用IP地址而不是域名显示网络连接。 |
-p | 显示与每个网络连接相关的进程信息。 |
-r | 显示路由表。 |
-s | 显示网络统计信息,例如传输的数据包数量和错误数量。 |
1.3.3 netstat命令的输出及解释
netstat
命令的输出分为两部分:路由表和网络连接列表。以下是netstat
命令的输出示例:
cssCopy codeKernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.2:22 192.168.1.3:49548 ESTABLISHED 1421/sshd: pi [priv
tcp6 0 0 ::1:631 :::* LISTEN 1082/cupsd
路由表部分显示了系统的路由表。其中包含了所有目标地址、网关、网络掩码、标志、度量值、参考数和接口。下面是各列的解释:
列名 | 描述 |
---|---|
Destination | 目标网络地址。 |
Gateway | 下一跳网关地址。 |
Genmask | 目标网络地址的子网掩码。 |
Flags | 路由标志。 |
Metric | 路由到目标网络的距离,即路由优先级。 |
Ref | 被路由表中路由引用的次数。 |
Use | 到达目标网络的数据包数。 |
Iface | 路由通过的网络接口。 |
网络连接列表部分显示了当前活动的网络连接,包括服务器和已建立的连接。下面是各列的解释:
列名 | 描述 |
---|---|
Proto | 网络协议(例如TCP或UDP) |
Recv-Q | 等待接收的数据大小 |
Send-Q | 等待发送的数据大小 |
Local Address | 本地IP地址和端口号 |
Foreign Address | 外部IP地址和端口号 |
State | 连接状态 |
PID/Program name | 程序名和PID |
1.3.4 netstat命令的常见用途和案例
netstat命令是一个非常强大的网络工具,可以帮助系统管理员了解当前系统的网络状态和连接情况,及时发现和解决网络问题。以下是一些常见的案例:
查看当前的网络连接状态:使用netstat -a命令可以显示当前所有的网络连接状态,包括TCP和UDP连接。使用netstat -at可以只显示TCP连接的状态,使用netstat -au可以只显示UDP连接的状态。
查看网络接口统计信息:使用netstat -i命令可以显示网络接口的统计信息,包括接收和发送的数据包数量、错误数量等。
查看路由表信息:使用netstat -r命令可以显示当前系统的路由表信息,包括目标地址、网关地址、网络接口等。
查看当前系统的端口使用情况:使用netstat -nlp命令可以列出当前系统所有打开的端口及其占用情况,包括进程ID和进程名称等。
监控网络流量:使用netstat -s命令可以显示系统的网络统计信息,包括接收和发送的数据包数量、错误数量、丢失的数据包数量等。
检测网络安全问题:使用netstat -an命令可以列出当前所有的网络连接,可以用于检测是否有异常的连接。
#案例
[root@localhost ~]# netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1397/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1749/master
tcp 0 0 192.168.1.100:22 192.168.1.1:61006 ESTABLISHED 9074/sshd: root@pts
tcp 0 36 192.168.1.100:22 192.168.1.1:60953 ESTABLISHED 9026/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1397/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1749/master
[root@localhost ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.100:22 192.168.1.1:61006 ESTABLISHED
tcp 0 36 192.168.1.100:22 192.168.1.1:60953 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
[root@localhost ~]# netstat -s |head -5
Ip:
12413 total packets received
0 forwarded
0 incoming packets discarded
12413 incoming packets delivered
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 ens32
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens32
1.4 ifconfig
1.4.1 ifconfig命令的作用及用法
ifconfig
命令用于配置和显示Linux操作系统中的网络接口参数,包括IP地址、MAC地址、子网掩码等信息。
该命令通常需要以root权限运行。
1.4.2 ifconfig命令参数的含义
下面是 ifconfig
命令中一些常用的参数:
参数 | 作用 |
---|---|
-a | 显示所有接口,包括未激活的 |
-s | 显示摘要信息 |
up | 激活接口 |
down | 关闭接口 |
inet addr | 设置或显示IPv4地址 |
netmask | 设置或显示子网掩码 |
hw ether | 设置或显示MAC地址 |
1.4.3 ifconfig命令的输出及解释
ifconfig
命令的输出结果包括以下信息:
- 接口名字:网络接口的名称。
- MAC地址:本机网络接口的物理地址。
- IPv4地址:本机网络接口的IPv4地址。
- 子网掩码:本机网络接口的子网掩码。
- 广播地址:本机网络接口的广播地址。
- MTU:网络接口的最大传输单元。
- 网络状态:网络接口的状态。
以下是 ifconfig
命令的一个示例输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe6b:15c9 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:6b:15:c9 txqueuelen 1000 (Ethernet)
RX packets 712512 bytes 131987191 (125.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 530847 bytes 55087625 (52.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中,eth0
是网络接口名字,UP,BROADCAST,RUNNING,MULTICAST
表示网络接口的状态,192.168.1.2
是IPv4地址,255.255.255.0
是子网掩码,00:0c:29:6b:15:c9
是MAC地址。
1.4.4 ifconfig命令的常见用途
ifconfig
命令的常见用途包括:
- 显示网络接口信息
- 设置网络接口的IP地址、子网掩码、MAC地址等
- 启动或关闭网络接口
示例:
[root@localhost ~]# ifconfig ens32 down
[root@localhost ~]# ifconfig ens32 up
[root@localhost ~]# ifconfig ens32
[root@localhost ~]# ifconfig ens33 hw ether 00:0c:29:44:55:66
[root@localhost ~]# ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
[root@localhost ~]# ifconfig ens33:1 192.168.1.250 netmask 255.255.255.0 broadcast 192.168.1.255 up
1.5 nslookup
1.5.1 nslookup命令的作用及用法
nslookup是一个用于查询DNS(域名系统)的命令行工具。它可以通过域名查询IP地址,也可以通过IP地址查询域名。在网络故障排除时,nslookup常常被用来确定DNS服务器是否可用,以及域名是否解析正确。
nslookup的使用方法:
nslookup [options] [name | -] [server]
其中,name
为要查询的域名或IP地址,server
为可选参数,指定要使用的DNS服务器的地址。
1.5.2 nslookup命令参数的含义
nslookup命令有多个参数,以下是一些常用的参数:
参数 | 含义 |
---|---|
-query=TYPE | 指定查询类型,例如A记录、MX记录等 |
-debug | 输出调试信息 |
-timeout=N | 设置超时时间 |
-retry=N | 设置重试次数 |
-sil[ent] | 静默输出结果 |
1.5.3 nslookup命令的常见用途
- 检查DNS服务器是否可用:使用nslookup命令来检查DNS服务器是否正常工作,以及是否能够查询到DNS记录。
- 查询域名的IP地址:使用nslookup命令查询域名的IP地址,以便进行网络连接或访问。
- 查询IP地址的域名:使用nslookup命令查询IP地址所对应的域名,以便确定网络连接的目标主机。
1.5.4 nslookup命令的输出及解释
以下是一个使用nslookup查询www.baidu.com
域名的例子:
[root@localhost ~]# nslookup
输出结果如下:
> www.baidu.com
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.119.104.189
Name: www.a.shifen.com
Address: 14.119.104.254
>
输出结果解释:
Server
:列出DNS服务器的名称和IP地址。Address
:DNS服务器的IP地址。Non-authoritative answer
:表示查询结果并非来自域名的授权服务器,而是来自本地DNS缓存或其他中间DNS服务器。Name
:查询的域名。Address
:查询结果的IP地址。
示例:
[root@localhost ~]# nslookup -query=A www.wcfeng.top
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
Name: www.wcfeng.top
Address: 8.222.145.102
[root@localhost ~]# nslookup -query=A www.wcfeng.top 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.wcfeng.top
Address: 8.222.145.102
[root@localhost ~]# nslookup -query=MX www.baidu.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
www.a.shifen.com canonical name = www.wshifen.com.
Authoritative answers can be found from:
wshifen.com
origin = ns1.wshifen.com
mail addr = baidu_dns_master.baidu.com
serial = 2309110001
refresh = 60
retry = 30 expire = 2592000
minimum = 3600
1.6 route
1.6.1 route命令的作用及用法
route
命令用于查看和管理Linux系统的路由表,可以添加、删除和修改路由表项。路由表是一张记录了网络的地址和路由器之间映射关系的表格。在IP协议中,路由表的作用是决定数据包从源主机到目标主机所要经过的中间设备。
1.6.2 route命令参数的含义
以下是一些 route
命令中常用的参数:
-n
:使用数字形式显示路由表项;-v
:显示详细信息;add
:添加路由表项;del
:删除路由表项。
更多参数可以使用 man route
命令查看。
1.6.3 route命令的输出及解释
下面是一个示例路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
解释一下各个字段的含义:
Destination
:目标地址或网络;Gateway
:路由的下一跳;Genmask
:掩码;Flags
:标志,U表示路由是可用的,G表示需要通过网关,H表示是主机的路由(即目标地址是主机地址);Metric
:跃点数;Ref
:路由被使用的次数;Use
:该路由被使用的时间;Iface
:使用该路由的接口。
1.6.4 route命令的常见用途
下面是一些常见的 route
命令用途:
- 查看系统的路由表;
- 添加路由表项;
- 删除路由表项;
- 修改路由表项;
- 检查路由表项是否可用。
举个例子,如果我们要添加一个到网络 192.168.2.0/24
的路由,并指定下一跳为 192.168.1.2
,则可以使用以下命令:
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.2 0.0.0.0 UG 100 0 0 ens32
0.0.0.0 192.168.1.2 0.0.0.0 UG 101 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
192.168.1.0 0.0.0.0 255.255.255.0 U 101 0 0 ens33
[root@localhost ~]#route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.2
[root@localhost ~]# route add -net 192.168.1.0 netmask 255.255.255.0 dev ens32
[root@localhost ~]# route add -host 192.168.1.2 dev ens33
这条命令的含义是:添加一个到网络 192.168.2.0/24
的路由,掩码为 255.255.255.0
,下一跳为 192.168.1.2
。
1.7 dig
1.7.1 dig
命令的作用及用法
dig
全称为Domain Information Groper,是一种用于查询DNS域名解析的命令行工具,可以通过dig
命令查询指定域名的各种DNS记录信息。dig
命令是一种广泛应用于Linux、UNIX等操作系统中的DNS工具,可用于查看DNS服务器是否正常、查询DNS记录等操作。
dig
命令的基本语法如下:
dig [选项] [域名] [查询类型]
其中,选项和域名参数是可选的,查询类型是必选的。如果没有指定域名参数,则默认查询本地DNS服务器。
1.7.2 dig
命令参数的含义
dig
命令常用的参数如下表所示:
参数 | 含义 |
---|---|
+trace | 显示DNS域名解析过程中的详细信息 |
+short | 只显示查询结果的IP地址或者CNAME |
+nocmd | 只显示DNS解析结果,不显示查询命令及DNS服务器的应答信息 |
+noall | 只显示查询结果,不显示任何信息 |
+answer | 只显示DNS解析结果的回答部分,不显示其他部分 |
+authority | 只显示DNS解析结果的权威部分,不显示其他部分 |
+additional | 只显示DNS解析结果的附加部分,不显示其他部分 |
+noquestion | 只显示DNS解析结果的各个部分,不显示查询的域名及查询类型 |
+nocomments | 不显示注释信息 |
@<dns_server> | 指定查询的DNS服务器,<dns_server> 为DNS服务器的IP地址或域名 |
1.7.3 dig
命令的输出及解释
当执行 dig
命令时,命令行会显示输出信息,这些信息包含了请求的 DNS 服务器的名称、被查询的主机名或 IP 地址、DNS 解析结果等信息。下面是 dig
命令的一个例子:
[root@localhost ~]# dig www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10337
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 9
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 5 IN CNAME www.a.shifen.com.
www.a.shifen.com. 5 IN A 14.119.104.189
www.a.shifen.com. 5 IN A 14.119.104.254
;; AUTHORITY SECTION:
a.shifen.com. 5 IN NS ns2.a.shifen.com.
a.shifen.com. 5 IN NS ns3.a.shifen.com.
a.shifen.com. 5 IN NS ns1.a.shifen.com.
a.shifen.com. 5 IN NS ns4.a.shifen.com.
a.shifen.com. 5 IN NS ns5.a.shifen.com.
;; ADDITIONAL SECTION:
ns3.a.shifen.com. 5 IN A 36.155.132.12
ns3.a.shifen.com. 5 IN A 153.3.238.162
ns4.a.shifen.com. 5 IN A 111.20.4.28
ns4.a.shifen.com. 5 IN A 14.215.177.229
ns5.a.shifen.com. 5 IN A 180.76.76.95
ns1.a.shifen.com. 5 IN A 110.242.68.42
ns2.a.shifen.com. 5 IN A 220.181.33.32
ns5.a.shifen.com. 5 IN AAAA 240e:bf:b801:1006:0:ff:b04f:346b
ns5.a.shifen.com. 5 IN AAAA 240e:940:603:a:0:ff:b08d:239d
;; Query time: 47 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Sep 12 20:03:26 CST 2023
;; MSG SIZE rcvd: 348
查看MX记录
[root@localhost ~]# dig -t MX www.baidu.com
查看A记录类型
[root@localhost ~]# dig www.baidu.com A
指定域名服务器进行查询
[root@localhost ~]# dig @8.8.8.8 www.google.com
上面的输出信息包含了如下几个部分:
- 命令行的提示信息
- 请求的 DNS 服务器的名称
- DNS 请求的信息(包括 DNS 记录类型、查询类型等)
- DNS 应答的信息(包括状态码、查询结果等)
- 查询的时间和日期
- 接收到的数据包的大小
1.7.4 dig命令的常见用途
dig
命令常用于以下场景:
- 测试 DNS 解析的结果是否正确,例如查询一个域名解析后的 IP 地址;
- 查看域名的 DNS 记录,例如查看一个域名的 MX 记录或 TXT 记录等;
- 测试 DNS 服务器是否正常工作,例如查看一个 DNS 服务器是否能够正常响应 DNS 请求。
1.8 tcpdump
1.8.1 tcpdump命令的作用及用法
tcpdump是一个常用的网络协议分析工具,可以用于抓取网络数据包,并以可读的格式输出到终端或文件中,用于诊断网络问题、调试网络应用程序等。
tcpdump命令的基本语法如下:
yum -y install tcpdump
tcpdump [options] [expression]
其中,options为命令选项,expression为过滤表达式,用于过滤抓取的数据包。
1.8.2 tcpdump命令参数的含义
tcpdump命令常用的参数如下:
参数 | 含义 |
---|---|
-i | 指定抓取数据包的网络接口,如eth0、lo等 |
-n | 不对IP地址和端口进行反向域名解析,加快抓包速度 |
-X | 以十六进制和ASCII码的形式显示数据包 |
-v | 输出更详细的抓包信息 |
-c | 指定抓包的数量 |
-w | 将抓包结果保存到指定的文件中 |
-r | 从指定的文件中读取数据包进行分析 |
-s | 指定抓取数据包的最大长度,默认为65535字节 |
-A | 以ASCII码的形式显示数据包,相当于-Xvv |
-q | 以更安静的模式输出结果,只输出关键信息 |
-tttt | 显示时间戳,包括日期和时间 |
-nn | 不解析协议名称和端口号 |
-e | 显示以太网头部信息 |
1.8.3 tcpdump命令的输出及解释
tcpdump命令输出的格式如下:
16:51:57.495635 IP 192.168.1.10.52554 > 8.8.8.8.domain: 59732+ PTR? 3.2.1.10.in-addr.arpa. (38)
16:51:57.541431 IP 8.8.8.8.domain > 192.168.1.10.52554: 59732 NXDomain* 0/1/0 (95)
以上是tcpdump命令输出的两行示例,下面是每个字段的解释:
16:51:57.495635
:时间戳,格式为小时:分钟:秒.微秒。IP
:网络层协议。192.168.1.10.52554
:源IP地址和源端口号。8.8.8.8.domain
:目标IP地址和目标端口号。59732+
:查询的类型,此处是PTR。PTR? 3.2.1.10.in-addr.arpa.
:查询的域名。(38)
:查询的数据长度。
在上述示例中,第一行表示从本机IP地址为192.168.1.10的主机(源IP地址)发送了一个查询类型为PTR(反向DNS查询)的DNS请求到目标IP地址为8.8.8.8(Google的DNS服务器IP地址)的主机的domain端口,查询的域名是3.2.1.10.in-addr.arpa.(源IP地址的反向域名)。数据长度为38。
第二行表示Google的DNS服务器以NXDomain(表示查询的域名不存在)的方式回复了上述查询请求。
通过分析tcpdump的输出,可以了解网络中正在进行的数据传输情况,有助于诊断网络故障。
1.8.4 tcpdump命令的常见用途及案例
以下是一个tcpdump
抓包的案例:
sudo tcpdump -i eth0 tcp port 80
上述命令表示在eth0
接口上抓取所有目标端口为80的TCP流量。抓包结果输出如下:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:52:27.512282 IP 192.168.1.2.47914 > 151.101.130.69.http: Flags [S], seq 1279194995, win 29200, options [mss 1460,sackOK,TS val 2159822476 ecr 0,nop,wscale 7], length 0
15:52:27.651218 IP 151.101.130.69.http > 192.168.1.2.47914: Flags [S.], seq 2082525300, ack 1279194996, win 29200, options [mss 1460,sackOK,TS val 4272127856 ecr 2159822476,nop,wscale 7], length 0
15:52:27.651312 IP 192.168.1.2.47914 > 151.101.130.69.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 2159822615 ecr 4272127856], length 0
15:52:27.651408 IP 192.168.1.2.47914 > 151.101.130.69.http: Flags [P.], seq 1:92, ack 1, win 229, options [nop,nop,TS val 2159822615 ecr 4272127856], length 91: HTTP: GET / HTTP/1.1
15:52:27.791327 IP 151.101.130.69.http > 192.168.1.2.47914: Flags [.], ack 92, win 229, options [nop,nop,TS val 4272127995 ecr 2159822615], length 0
15:52:27.791361 IP 151.101.130.69.http > 192.168.1.2.47914: Flags [P.], seq 1:625, ack 92, win 229, options [nop,nop,TS val 4272127995 ecr 2159822615], length 624: HTTP: HTTP/1.1 301 Moved Permanently
15:52:27.791404 IP 192.168.1.2.47914 > 151.101.130.69.http: Flags [.], ack 625, win 237, options [nop,nop,TS val 2159822754 ecr 4272127995], length 0
上述输出列出了所有通过eth0
接口的TCP 80端口流量。每一行都表示一个TCP数据包。
以下是一些其他类型的tcpdump
抓包案例:
- 抓取所有来自指定IP地址的流量
tcpdump -i eth0 src 192.168.1.2
上述命令表示在eth0
接口上抓取所有来自IP地址为192.168.1.2
的流量。
2.抓取所有发往指定IP地址的流量
tcpdump -i eth0 dst 151.101.130.69
上述命令表示在eth0
接口上抓取所有发往IP地址为151.101.130.69
的流量。
3.抓取指定端口的UDP流量
tcpdump -i eth0 udp port 53
上述命令表示在eth0
接口上抓取所有目标端口为53
的UDP流量,该端口通常用于DNS查询。
4.抓取指定端口的TCP流量,并将结果写入文件
tcpdump -i eth0 -w tcpdump_output.pcap tcp port 80
上述命令表示在eth0
接口上抓取所有目标端口为80
的TCP流量,并将结果写入名为tcpdump_output.pcap
的文件中。可以使用Wireshark等工具打开并分析该文件。
5.抓取所有发往或来自指定IP地址的流量,并将结果输出为ASCII文本
tcpdump -i eth0 -A host 192.168.1.2
上述命令表示在eth0
接口上抓取所有发往或来自IP地址为192.168.1.2
的流量,并将结果输出为ASCII文本。
1.9 iptables
1.9.1 命令的作用及用法
iptables是Linux系统中用于配置网络防火墙规则的命令行工具。它可以控制进出本机的网络流量,实现网络访问的授权、限制、重定向等功能。
iptables命令的基本用法为:
iptables [ -t 表名 ] 命令选项 [ 链名 ] [ 规则规范 ]
其中,-t参数用于指定操作的表名,可以是以下四种表之一:
-
filter:过滤表,用于过滤网络包。
-
nat:网络地址转换表,用于实现网络地址转换。
-
mangle:Mangle表,用于对网络包进行高级处理。
-
raw:Raw表,用于对原始数据包进行处理。
1.9.2 iptables命令参数及其含义
参数 | 含义 |
---|---|
-A append | 在指定的链中添加规则。 |
-D | 在指定的链中删除规则。 |
-I | 在指定的链中插入规则。 |
-R | 替换指定链中的规则。 |
-L | 列出指定链中的规则。 |
-F | 清空指定链中的规则。 |
-N | 创建新链。 |
-X | 删除指定的链。 |
-P | 设置指定链的默认策略。 |
1.9.3 iptables命令常见的用途
- 实现端口转发:将一台服务器的网络连接请求转发到另一台服务器上。
- 实现网络地址转换:将内部私有地址转换为公网地址,实现内网对外访问。
- 过滤网络流量:过滤不需要的网络连接请求,提高网络的安全性。
- 控制网络访问:限制某些用户或IP地址对网络资源的访问权限。
1.9.4 示例
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP 入站和出站均ping不通
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT ##放行多个端口范围
[root@localhost ~]#iptables -t filter -I INPUT -p icmp -j REJECT 禁止所有的icmp报文进入本机
[root@localhost ~]# iptables -I INPUT -i ens33 -p icmp --icmp-type echo-request -j DROP
[root@localhost ~]# iptables -I INPUT -i ens33 -s 192.168.1.102 -p icmp --icmp-type echo-request -j DROP
[root@localhost ~]# iptables -I INPUT -i ens33 ! -s 192.168.1.101 -p icmp --icmp-type echo-request -j DROP
[root@localhost ~]# iptables -I OUTPUT -o ens33 -d 192.168.1.101 -p icmp --icmp-type echo-request -j DROP
[root@localhost ~]# iptables -I INPUT -p icmp -s 192.168.1.0/24 --icmp-type echo-request -j DROP
1.10 lsof命令
lsof
(List Open Files)命令是一种在Unix和Linux操作系统中查看打开文件和进程的工具。它可以显示哪些进程打开了哪些文件,哪些文件被哪些进程打开,以及哪些进程使用了哪些网络套接字等等。以下是关于lsof
命令的更多信息:
1.10.1 作用及用法
lsof
命令的主要作用是列出系统中所有打开的文件和进程的相关信息,包括文件名、进程ID(PID)、用户、文件类型、打开模式、网络连接等等。它的使用格式为:
lsof [options]
1.10.2 命令参数的含义
下表是lsof
命令中常用的选项和参数的含义:
参数 | 含义 |
---|---|
-a | 显示同时满足所有条件的进程和文件 |
-c <进程名称> | 显示指定进程名相关的信息 |
-u <用户名> | 显示指定用户名相关的信息 |
-p <进程ID> | 显示指定进程ID相关的信息 |
-i | 显示所有打开的网络连接 |
-t | 仅显示进程ID |
-h | 不显示标题行 |
-F <格式> | 以指定格式输出信息 |
-w | 等待打开的文件或网络连接 |
1.10.3 命令输出及解释
lsof
命令的输出包括以下几个部分:
[root@localhost ~]# lsof |head -n 10
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1632776 34228053 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 238217 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 965923 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 238213 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 238302 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 238283 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 238513 /usr/lib64/libattr.so.1.1.0
1. 命令名和选项
2. 进程ID(PID)
3. 用户名
4. 文件类型
5. 文件名
6. 文件描述符(FD)
7. 文件偏移量(OFFSET)
8. 节点(NODE)
9. 网络连接
10. 进程启动的工作目录(CWD)
11. 标准输入、输出和错误(STDIN/STDOUT/STDERR)
12. 库文件名(LIB)
13. 记录的时间(TIME)
lsof
命令的输出格式比较复杂,但是可以使用不同的选项来指定不同的输出格式。例如,使用-F
选项可以以指定格式输出信息。下面是一些常见的输出格式:
格式 | 含义 |
---|---|
f | 文件名 |
u | 用户名 |
p | 进程ID |
t | 文件类型 |
i | IP地址和端口号 |
c | 命令名 |
n | 节点 |
d | 文件描述符 |
T | 文件类型的文本描述 |
L | 库文件名 |
D | 设备号 |
g | 进程所属的组 |
r | 文件的状态标志 |
1.10.4 常见用途和案例
lsof
命令的常见用途和案例包括:
1. 查找被进程占用的端口:使用`lsof -i:<端口号>`命令可以列出占用指定端口号的进程信息
例如`lsof -i:80`可以列出占用80端口的进程信息。
2. 查找被删除但仍然被进程占用的文件:使用`lsof | grep deleted`命令可以列出被删除但仍然被进程占用的文件
例如`lsof | grep deleted`可以列出所有被删除但仍然被进程占用的文件。
3. 监控文件的打开和关闭:使用`lsof -r <秒数>`命令可以每隔指定时间列出所有打开和关闭的文件
例如`lsof -r 5`可以每隔5秒列出所有打开和关闭的文件。
4. 查找占用过多资源的进程:使用`lsof -u <用户名>`命令可以列出指定用户名的进程信息,包括占用的资源等
例如`lsof -u root`可以列出所有由root用户运行的进程信息。
5. 查找指定进程打开的文件:使用`lsof -p <进程ID>`命令可以列出指定进程打开的文件
例如`lsof -p 1234`可以列出进程ID为1234的进程打开的所有文件。
6. 查找指定文件被哪些进程打开:使用`lsof <文件名>`命令可以列出指定文件被哪些进程打开
例如`lsof /var/log/messages`可以列出打开/var/log/messages文件的所有进程。
lsof
命令可以帮助系统管理员更好地管理系统资源,了解系统进程和文件的使用情况,以便及时进行优化和故障排除。
1.11 mtr
1.11.1 mtr命令的作用及用法
mtr
命令是一个网络诊断工具,它结合了traceroute
和ping
命令的功能,可以显示每个网络节点的丢包率、延迟等信息。mtr
命令的使用格式为:
mtr [options] hostname/IP
1.11.2 mtr命令参数的含义
mtr
命令支持的常见参数如下:
参数 | 含义 |
---|---|
-c | 指定发送数据包的数量 |
-i | 指定发送数据包的间隔时间 |
-n | 不对主机名进行解析 |
-r | 不进行 DNS 反向解析 |
-s | 指定发送数据包的大小 |
-t | 持续显示路由跟踪信息 |
1.11.3 mtr命令的输出及解释
以下是一个mtr
命令的测试案例:
mtr -c 10 -i 1 -n www.google.com
上述命令表示向www.google.com
发送10个数据包,每个数据包之间的间隔为1秒,并且不对主机名进行解析。测试结果输出如下:
HOST LOSS% SNT LAST AVG BEST WRST STDEV
192.168.0.1 0.0% 10 1.5 1.5 1.4 1.6 0.1
10.50.2.254 0.0% 10 3.3 3.2 2.9 3.4 0.2
192.168.100.1 0.0% 10 4.4 4.2 4.0 4.4 0.1
58.250.192.2 0.0% 10 4.4 4.4 4.3 4.6 0.1
219.158.3.58 0.0% 10 5.2 5.2 5.0 5.4 0.1
219.158.11.225 0.0% 10 7.0 6.8 6.6 7.0 0.2
202.96.12.102 0.0% 10 27.3 27.2 26.7 27.5 0.3
202.97.94.149 0.0% 10 27.7 28.1 27.6 29.6 0.7
202.97.91.1 0.0% 10 28.2 28.2 27.9 28.5 0.2
72.14.233.121 0.0% 10 34.7 34.9 34.3 36.2 0.6
72.14.237.175 0.0% 10 35.7 35.8 35.1 36.5 0.5
72.14.237.155 0.0% 10 35.2 35.3 34.8 35.9 0.4
72.14.237.151 0.0% 10 34.6 34.9 34.4 35.4 0.4
172.253.67.199 0.0% 10 35.5 35.8 35.2 36.6 0.5
172.253.66.199 0.0% 10 35.1 35.2 34.8 35.7 0.3
172.253.50.243 0.0% 10 34.8 35.0 34.5
mtr
命令的输出包括三部分:
- 本地主机的基本信息,包括主机名、IP地址、TTL值等;
- 中间节点的信息,包括节点的IP地址、丢包率、延迟等;
- 目标主机的信息,包括主机名、IP地址、丢包率、延迟等。
每行输出的信息解释如下:
字段 | 含义 |
---|---|
HOST | 主机名或IP地址 |
LOSS% | 丢包率 |
SNT | 发送数据包的数量 |
LAST | 最后一个数据包的延迟时间 |
AVG | 平均延迟时间 |
BEST | 最短延迟时间 |
WRST | 最长延迟时间 |
STDEV | 延迟时间的标准差 |
1.11.4 mtr命令的常见用途和案例
mtr
命令的常见用途如下:
1. 诊断网络连接问题:使用`mtr`命令可以诊断网络连接的延迟和丢包问题,帮助用户找出网络连接的瓶颈所在。
2. 监测网络性能:通过持续运行`mtr`命令,可以监测网络连接的稳定性和性能,及时发现和解决网络问题。
3. 查找网络故障的原因:通过分析`mtr`命令的输出,可以确定网络故障的具体原因,例如网络拥塞、路由器故障等。
4. 比较不同网络节点的性能:使用`mtr`命令可以比较不同网络节点的延迟和丢包率等性能指标,以便选择最佳的网络路径。
mtr
命令是一个非常强大的网络诊断工具,可以帮助用户快速诊断和解决网络连接问题,提高网络的性能和稳定性。
以下是mtr
命令的使用案例:
-
查看到达目标主机所需的路由和延迟时间:
mtr example.com
-
指定路由跟踪的最大跳数:
mtr -m 20 example.com
-
指定路由跟踪的初始TTL:
mtr -f 10 example.com
-
指定跟踪的网络接口:
mtr -i eth0 example.com
-
指定每个路由的探测次数:
mtr -c 5 example.com
-
将结果保存到文件中:
mtr -r example.com > mtr-results.txt
-
显示IP地址而不是主机名:
mtr -n example.com
-
显示实时延迟和丢包率:
mtr -r example.com
1.12 nmap 命令
1.12.1 作用及用法
nmap(Network Mapper)是一个用于网络发现和安全审计的开源工具。它可以扫描网络中的主机和服务,以便管理员评估网络的安全性。
1.12.2 参数含义
下表列出了一些常用的 nmap 参数及其含义:
参数 | 含义 |
---|---|
-sP | 扫描主机是否存活 |
-sT | 使用TCP连接扫描端口 |
-sU | 使用UDP数据包扫描端口 |
-sS | 使用TCP SYN扫描端口 |
-sF | 使用TCP FIN扫描端口 |
-p | 指定要扫描的端口范围 |
-A | 启用OS检测和版本检测 |
-oN | 将扫描结果输出到指定文件 |
-v | 显示详细的扫描信息 |
-O | 启用操作系统检测 |
-sV | 启用版本检测 |
--script | 启用Nmap脚本 |
-iL | 从文件中读取要扫描的主机列表 |
--traceroute | 显示路由跟踪信息 |
--max-rtt-timeout | 设置超时时间 |
1.12.3 输出及解释
nmap 命令的输出通常分为四部分:扫描目标的主机列表、扫描状态、扫描结果和脚本输出。
扫描目标的主机列表部分显示要扫描的主机列表。
扫描状态部分显示扫描进度和状态。
扫描结果部分显示已发现的开放端口、服务、操作系统和其他信息。
脚本输出部分显示Nmap脚本的输出信息,如是否存在某个漏洞。
1.12.4 常见用途和案例
下面是一些 nmap 常见用途和案例:
- 网络发现:使用 nmap 扫描网络中的主机和服务,以便管理员评估网络的安全性。
- 端口扫描:使用 nmap 扫描网络中的开放端口,以便管理员识别潜在的安全漏洞。
- 操作系统检测:使用 nmap 确定网络上运行的操作系统,以便管理员了解安全性并确定潜在的攻击面。
- 漏洞扫描:使用 nmap 执行漏洞扫描,以便管理员检测系统中可能存在的漏洞并采取适当的措施。
- 防火墙规则测试:使用 nmap 模拟攻击并测试防火墙规则是否生效。
- 端口策略检测:使用 nmap 检测主机的端口策略,以便管理员调整端口策略并加强安全性。
- 网络监测:使用 nmap 监测网络中的主机和服务,以便管理员及时发现网络异常。
- 渗透测试:使用 nmap 进行渗透测试,以便测试人员模拟攻击并检测系统中的安全漏洞。
举例来说,如果一个管理员想要了解他们的网络上有哪些主机和服务在运行,他们可以使用以下命令:
nmap -sP 192.168.1.0/24
这将扫描 192.168.1.0/24 子网内所有的主机是否存活,从而列出所有活动主机的 IP 地址。
如果一个渗透测试员想要检测目标系统中是否存在任何漏洞,他们可以使用以下命令:
nmap -sV --script vuln target.com
这将扫描目标系统中所有的开放端口,并使用 Nmap 的漏洞扫描脚本检测是否存在任何漏洞。
如果一个管理员想要扫描他们的网络中所有主机的操作系统类型,他们可以使用以下命令:
nmap -O 192.168.0.0/24
这将扫描 192.168.0.0/24 子网中所有主机的操作系统类型,并为每个主机列出操作系统的猜测结果。
如果一个安全研究员想要扫描目标系统中的所有 TCP 端口并输出结果到一个文件中,他们可以使用以下命令:
nmap -p 1-65535 -sS -oN output.txt target.com
这将扫描目标系统上的所有 TCP 端口,并使用 SYN 扫描模式来减少扫描的噪音。输出将写入一个名为 output.txt 的文件中。
无论是在评估网络安全性、执行渗透测试还是其他用途,nmap 都是一种非常有用的工具。
1.13 wget 下载命令
主要选项:
-q | 不显示下载过程 |
---|---|
-O | 指定文件名 |
-b | 在后台执行下载操作 |
-c | 断点续传,分组续传 |
--spider | 爬虫,检查网站是不是好的,不会下载,只会检查 robots.txt |
-T, | –timeout=SECONDS 设定响应超时的秒数 - |
-tries=2 | 指定重试的次数 |
主要案例:
wget -q -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.14 curl 下载工具
curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面列举其常用功能
-I | 查看响应 header 信息 |
---|---|
-s | 安静的 |
-w | 获取状态码 |
-o | 把输出写到该文件中 |
主要案例:
[root@localhost ~]# curl www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
[root@localhost ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Tue, 12 Sep 2023 12:32:27 GMT
Etag: "575e1f65-115"
Last-Modified: Mon, 13 Jun 2016 02:50:13 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
[root@localhost ~]# curl -i www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2381
Content-Type: text/html
Date: Tue, 12 Sep 2023 12:34:36 GMT
Etag: "588604dc-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:56 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
有些网域需要 HTTP 认证,这时 curl 需要用到 --user 或者 -u 参数。
[root@localhost ~]# curl --user name:password example.com
二、Linux中的基本网络配置
2.1 网络设备和接口
2.1.1 网络设备和接口的概念
在Linux系统中,网络设备是指计算机中的硬件设备,如网卡、无线网卡等;网络接口是指在操作系统中对应的虚拟设备,如eth0、wlan0等。网络接口是网络数据包在计算机系统和外界网络之间传输的桥梁。
2.1.2 网络设备和接口的类型
在Linux系统中,常见的网络设备和接口有以下几种:
类型 | 描述 |
---|---|
eth0 | 有线网络接口,用于连接局域网和互联网 |
wlan0 | 无线网络接口,用于连接无线局域网和互联网 |
lo | 回环网络接口,用于本地回环测试 |
virbr0 | 虚拟网桥,用于虚拟机之间的通信 |
docker0 | Docker容器网络接口 |
ens33 | 有线网络接口,用于连接局域网和互联网 |
2.1.3 网络设备和接口的配置方法
网络设备和接口的配置方法主要包括以下几个方面:
- 配置IP地址和子网掩码
- 配置默认网关
- 配置DNS服务器
下面是一个以eth0为例的网络配置示例:
# 编辑网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 配置IP地址和子网掩码
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
# 配置默认网关
GATEWAY=192.168.1.1
# 配置DNS服务器
DNS1=8.8.8.8
DNS2=8.8.4.4
# 重启网络服务
systemctl restart network
2.2 网关和路由表
2.2.1 网关和路由表的概念及作用
在Linux系统中,网关是指连接本地网络和远程网络之间的设备,如路由器、交换机等。路由表是指存储网络路由信息的表格,记录了本地网络和远程网络之间的路由信息。
网关和路由表的作用是将本地网络的数据包传输到远程网络,并将远程网络的数据包传输到本地网络。
2.2.2 网关和路由表的配置方法
网关和路由表的配置方法主要包括以下几个方面:
- 配置默认网关
- 添加静态路由
- 删除静态路由
下面是一个以添加静态路由为例的配置示例:
# 添加静态路由
route add -net 192.168.2.0/24 gw 192.168.1.254
# 删除静态路由
route del -net 192.168.2.0/24 gw 192.168.1.254
# 设置默认网关
ip route add default via 192.168.1.254
2.2.3 路由表的查看和修改方法
路由表的查看和修改方法主要包括以下几个命令:
- route:查看和管理路由表
- ip route:查看和管理路由表
- netstat -r:查看路由表
2.2.4 网关和路由表的常见问题及解决方法
网关和路由表的常见问题及解决方法主要包括以下几个方面:
- 网关配置错误导致网络无法访问
- 解决方法:检查网关配置是否正确,确认网关是否能够正常工作
- 路由表配置错误导致网络无法访问
- 解决方法:检查路由表配置是否正确,使用ping命令测试网络连通性
- 网络拓扑变化导致路由表失效
- 解决方法:重新配置路由表,或者使用动态路由协议实现自动路由配置
三、Linux网络故障排除方法
3.1 网络故障排除方法
3.1.1 网络故障的种类及原因
网络故障的种类和原因有很多,主要包括以下几个方面:
- 连接不上网络:网线故障、网卡故障、网关配置错误等
- 无法访问网络:路由表配置错误、防火墙阻塞等
- 网络速度慢:网络带宽不足、网络拥塞等
- DNS解析故障:DNS服务器故障、DNS配置错误等
- 网络安全问题:网络攻击、网络病毒等
3.1.2 网络故障排除的基本方法和步骤
网络故障排除的基本方法和步骤主要包括以下几个方面:
- 确认网络拓扑和设备连接情况
- 使用ping命令测试网络连通性
- 检查网络配置和路由表
- 检查防火墙设置
- 使用网络故障排除工具和技巧
3.1.3 网络故障排除的工具和技巧
网络故障排除的工具和技巧主要包括以下几个方面:
- ping
- traceroute:追踪网络数据包的路径和延迟
- netstat:查看网络连接和统计信息
- ifconfig:查看和配置网络接口
- tcpdump:抓取和分析网络数据包
- nmap:扫描和识别网络服务和主机
- Wireshark:分析网络数据包和协议
- iptables:配置和管理防火墙规则
- SELinux:配置和管理Linux安全模块
3.2 常见网络故障及解决方法
3.2.1 连接不上网络的故障排除方法
连接不上网络的故障排除方法主要包括以下几个方面:
- 检查网线是否插好,网卡是否工作正常
- 确认IP地址、网关和DNS配置是否正确
- 使用ping命令测试网络连通性
- 检查路由表配置是否正确
3.2.2 无法访问网络的故障排除方法
无法访问网络的故障排除方法主要包括以下几个方面:
- 检查防火墙设置是否阻塞了需要访问的端口和服务
- 确认路由表配置是否正确
- 使用traceroute命令检查网络数据包的路径和延迟
3.2.3 网络速度慢的故障排除方法
网络速度慢的故障排除方法主要包括以下几个方面:
- 确认网络带宽是否足够
- 检查网络设备的负载和性能
- 检查网络拓扑是否优化
3.2.4 DNS解析故障的故障排除方法
DNS解析故障的故障排除方法主要包括以下几个方面:
- 检查DNS服务器配置是否正确
- 确认DNS服务器是否工作正常
- 检查本机的DNS配置是否正确
- 使用nslookup命令测试DNS解析结果
3.2.5 网络安全问题的故障排除方法
网络安全问题的故障排除方法主要包括以下几个方面:
- 检查防火墙设置是否阻塞了异常的网络流量
- 使用iptables命令配置和管理防火墙规则
- 使用SELinux配置和管理Linux安全模块
- 使用nmap等工具扫描和识别网络服务和主机
互动:如果一台办公室内主机无法上网(打不开网站),请给出你的排查步骤?
①首先确定物理链路是否联通正常。
②查看本机 IP,路由,DNS 的设置情况是否达标。
③telnet 检查服务器的 WEB 有没有开启以及防火墙是否阻拦。
④ping 一下网关,进行最基础的检查,通了,表示能够到达服务器。
⑤测试到网关或路由器的通常情况,先测网关,然后再测路由器一级一级的测试。
⑥测试 ping 公网 ip 的通常情况(记住几个外部 IP),
⑦测试 DNS 的通畅。ping 出对应 IP。
⑧通过以上检查后,还在网管的路由器上进行检查。
四、网络服务类型
4.1.什么是网络服务?
网络服务:是指一些在网络上运行的、面向服务的软件模块,比如web服务,邮件服务,FTP服务等
网络服务的标准:可以使用各种协议通过网络进行远程访问的软件模块(常协议http/ftp/telnet/smtp等)
4.2 为什么要学习网络服务?
举个例子,比如你要访问baidu的网站,那这个访问过程是什么样的呢?
答案显然不是的,用户访问百度的过程是一个非常复杂的过程,广义的讲如下:
1)用户本地需要有网络的支持,而用户本地的网络类型有很多种类的,比如移动访问,无线热点,家庭宽带,公司专线等方式,这里涉及到了第一个网络服务DHCP,DHCP用于为你的本地的计算机分类IP地址,使得你的计算机有一个逻辑寻址的地址,用于访问baidu
2)当浏览器输入:www.baidu.com后,计算机并不知道这一串字符代表什么,所以计算机并不是Baidu地址在哪里,这时就需要一个翻译者来告知浏览器Baidu的IP地址,接下来浏览器会直接去访问这个IP地址,最后就可以访问到百度网站,这里涉及到第二个网络服务:DNS
所以,当我们去访问一个网站时,最基础的网络服务必须要DHCP和DNS,用于帮助我们分配IP地址和网站的IP地址,所以我们必须要去学习他,了解他的工作过程和配置方式了。
对于服务端来说,用于支持我们访问的web服务器的类型有很多,常见的有IIS,APACHE,NGINX,TOMCAT等,作为一个运维工程师来说,必须要掌握这些web服务的基本的配置和管理,同时在面对日益增长的用户访问量,我们还需要考虑如何对web服务进行优化和扩容,甚至需要对架构进行改造,使用集群话的方式来部署我们的服务,这些更加考验我们的技术能力,所以对于运维工程师来说,最大的价值不是在于管理单台服务器,而是具备集群化的管理,同时需要针对集群内的机器做好监控,日志,数据库的备份和管理也非常重要。所以在这部分中我们需要了解邮件、web服务,数据库的配置和管理等
4.3 网络服务类型
网络服务可以根据其提供的功能和特点分为多种类型,以下是一些常见的网络服务类型:
服务名称 | 描述 |
---|---|
邮件服务 | 提供电子邮件功能,允许用户发送和接收电子邮件。 |
文件传输协议(FTP)服务 | 允许用户上传和下载文件,用于文件共享和远程文件管理。 |
网络存储服务 | 提供云存储功能,用户可以将文件上传到远程服务器并随时访问这些文件。 |
远程访问服务 | 允许用户通过远程连接控制远程计算机或设备。 |
媒体流服务 | 允许用户在线观看和/或听取音频和视频内容。 |
虚拟专用网络(VPN)服务 | 提供安全的远程连接,允许用户通过加密通道连接到另一个网络。 |
域名系统(DNS)服务 | 将域名转换为IP地址,允许用户通过使用域名访问网站和服务。 |
云计算服务 | 提供计算和存储资源的访问,用于构建、部署和管理应用程序和服务。 |
即时消息服务 | 提供即时消息功能,允许用户与其他人进行实时通信。 |
社交媒体服务 | 提供在线社交网络,允许用户在互联网上创建和分享内容、建立社交关系。 |
4.4 常见的网络协议和端口
在我们的网络环境中,存在各种各样的网络协议和端口,以下是以下常见的类型
协议 | 描述 | 端口 |
---|---|---|
HTTP | 超文本传输协议,用于Web浏览器和服务器之间的通信 | 80 |
HTTPS | 安全超文本传输协议,通过TLS/SSL保护数据传输的HTTP协议 | 443 |
FTP | 文件传输协议,用于文件上传和下载 | 20, 21 |
SSH | 安全壳协议,用于安全远程访问和文件传输 | 22 |
Telnet | 远程终端协议,用于远程访问主机 | 23 |
SMTP | 简单邮件传输协议,用于电子邮件的发送 | 25 |
DNS | 域名系统,将域名转换为IP地址 | 53 |
DHCP | 动态主机配置协议,用于自动分配IP地址和其他网络配置 | 67, 68 |
SNMP | 简单网络管理协议,用于监视和管理网络设备 | 161, 162 |
POP3 | 邮局协议版本3,用于电子邮件的接收 | 110 |
IMAP | 互联网消息访问协议,用于电子邮件的接收和管理 | 143 |
RDP | 远程桌面协议,用于远程控制Windows计算机 | 3389 |
五、本章总结
在本章我们主要是了解一些常见的网络命令和协议,这些命令有助于我们在进行网络排障的时候能更加快速的解决问题,同时也能加深我们对于网络故障排查的经验,同时给大家也介绍了路由的设置方法,路由是当前网络通往目标网络的出口,这个出口必须是正确的,否则也是无法网络通信,最后给大家介绍了一些网络排查的思路和方法需要多看多总结自己的经验,这样才能快速的定位问题解决问题。
六、HTTP 常见状态码
1xx 状态码 - 信息性状态码:
100 Continue:服务器已经接收到请求的初始部分,客户端应该继续发送请求的剩余部分。
101 Switching Protocols:服务器同意切换协议,客户端应该切换到使用新协议发送后续请求。
2xx 状态码 - 成功状态码:
200 OK:请求成功。常见于 GET 和 POST 请求。
201 Created:请求已经成功处理,并且结果是创建了一个新的资源。
204 No Content:服务器成功处理了请求,但没有返回任何内容。
3xx 状态码 - 重定向状态码:
301 Moved Permanently:请求的资源已经永久移动到新的位置,应该更新书签/链接。
302 Found:请求的资源临时移动到了新的地址。
304 Not Modified:资源未修改,可以使用缓存的版本。
4xx 状态码 - 客户端错误状态码:
400 Bad Request:请求错误,服务器无法理解。
401 Unauthorized:请求需要用户身份验证。
403 Forbidden:服务器拒绝请求,没有访问权限。
404 Not Found:请求的资源不存在。
5xx 状态码 - 服务器错误状态码:
500 Internal Server Error:服务器遇到了意外的情况,无法完成请求。
503 Service Unavailable:服务器暂时不可用,通常是由于过载或维护而造成的。
- 感谢你赐予我前进的力量