0
点赞
收藏
分享

微信扫一扫

读书笔记(8)网络故障排除工具

1 概述

不管是排除网络故障,还是验证网络功能,都有工具的协助,这些工具表现在

网络管理员手里就是一些形形色色的命令。个人用户多数用的是 Windows 系统,

但随着 Linux 系统在服务器和专业电脑上的应用,这一趋势正在悄悄发生改变。

所以我们的文档理所当然地提供了两大主流操作系统系统平台的常用网络排障工

具。聪明的你不管是遇到什么样的平台都不用怕啦!

每一小节的标题就是主命令,下面的每行是最常用的参数,示例部分用来展示

常用的 命令 + 参数 组合。示例才是读者需要关注的重点。

2 Windows 平台工具

2.1 ipconfig

用来查看本机网络配置参数。这是一个非常有用的命令,我们在解决问题之前

首先先要了解现状,这个命令就可以帮助我们了解最基本的主机配置信息。常用

参数及说明如下:

/all

显示当前所有网络接口详细配置信息。

/release

释放某个接口从 DHCP 获取的的 IPv4 地址。

/release6

释放某个接口从 DHCP 获取的的 IPv6 地址。

/renew

更新某个接口从 DHCP 获取的 IPv4 地址。

/renew6

更新某个接口从 DHCP 获取的 IPv6 地址。

/displaydns

显示本机所有 DNS 缓存记录。

/flushdns

清除本机所有 DNS 缓存记录。

示例:

1 )显示本机所有网卡的配置信息

ipconfig /all 如果内容太多,一页显示不完,可以通过管道传递给 more ,分页显示。比如:

ipconfig /all | more

也可以通过重定向将所有输入信息记录到一个文件当中。比如:

ipconfig /all >> d:\ip.log

如果只显示含有特定信息的某行,可以通过管道传递给 findstr 。比如我只想显

示地址相关信息,就可以使用如下命令:

ipconfig /all | findstr Address

2 )刷新本机的主机配置信息

前一个命令是释放地址(发送 release 消息给 DHCP Server ),后一个命令是重

新获取地址(发送 Discover 消息给 DHCP Server )。

ipconfig /release

ipconfig /renews

3 )显示本机的 dns 缓存

ipconfig /displaydns

4 )清除本机的 dns 缓存

ipconfig /flushdns

2.2 arp

查看和修改本机 ARP 表的命令,执行这个命令必须要带参数。常用参数及简

要说明如下:

-a

显示本机所有 ARP 条目。

-d

清除本机所有 ARP 条目。

-s

创建静态 ARP 条目。

示例:

1 )查看本机所有的 arp 条目

arp -a 如果显示内容太多,超过一页,可以将输出内容通过管道传递给 more ,进行

分页显示,如下:

arp -a | more

也可以重定向到文件当中。如下:

arp -a >> d:\arp.log

2 )删除本机所有的 arp 条目

arp -d

3 )创建静态 arp 条目

arp -s 192.168.25.254 00-00-5e-00-01-19

4 arp 绑定脚本

先将本机所有条目删除,防止已经存在错误的条目。然后再创建静态的正确的

条目。把如下内容写到记事本当中,保存,然后修改文件后缀为 .bat ,拖放到开始

菜单启动项,创建一个开始菜单启动项的快捷方式。或者创建一个注册表启动项,

即在

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersi

on\Run 下面创建一个“ String Value” ,值内容填写 .bat 文件的绝对路径。

其目的是每一次开机时都执行一次 ARP 条目的规范化。

@echo off

arp -d

arp -s 192.168.25.254 00-00-5e-00-01-19

arp -s 192.168.25.252 00-25-9e-ca-dc-13

2.3 netstat

显示本机网络状态的命令,可以同时带多个参数,多个参数同时使用时只需要

一个“ -” 即可,当然也可以每一个参数前面带一个“ -” ,参数之间用空格隔开。如

果是带多个参数,不管“ -” 是多个还是一个,参数的先后顺序都不影响其功能的 实现。常用的参数及简要说明如下:

-a

显示所有连接和监听端口。

-b

显示每一个连接或监听端口的可执行程序名。

-n

以数字形式显示地址和端口号等信息。

-o

显示连接所属的进程 ID

-s

显示每一个协议的统计信息。缺省只显示 IP, IPv6, ICMP, ICMPv6,

TCP, TCPv6, UDP, and UDPv6 等协议统计信息。

-r

显示本机路由表。

示例:

1 )查看本机网络连接建立情况,以数字形式,查看所有,并列出相关应用程序进

ID

netstat -nao

如果内容太多超过一页,可以通过管道传递给 more 进行分页显示。

netstat -nao | more

还可以将输出内容重定向到文件当中。

netstat -ano >> d:\net.log

还可以通过管道传递给 findstr ,通过 findstr 过滤后只显示包含某特定关键字的

行。

netstat -ano findstr 80

2 )查看本机网络连接建立情况,以数字形式,查看所有,并列出相关应用程序进

程进程名

netstat -nab

上面的管道传递操作、重定向操作和过滤操作同样适用。

3 )统计本机网卡的流量信息

netstat -s 因为打印出来内容太多,而且还需要做更加详细的分析,所以一般是把打印

出来的统计信息重定向到文件当中。比如:

netstat -s >> d:\net.log

4 )打印本机路由表

netstat -r

一般来说打印出来的信息都会超过一屏,不超过两屏,所以我们经常也会用到

上面说的分页和重定向等。

2.4 tasklist

显示本机的进程列表。严格意义来说它不算不上是网络排障工具,因为它不能

直接应用于网络相关的操作,但它可以显示应用网络的进程。如果不使用任何参

数执行这个命令,与用户打开的任务管理器显示的进程的条目一样。常用的参数

及简要说明如下:

/fi

根据条件显示进程命令中任何筛选条件的进程。

示例:

1 )查看本机当前运行的所有进程

tasklist

2 )使用过滤器,通过进程 ID ,查看特定进程

tasklist /fi "pid eq 3816"

3 )使用过滤器,通过进程映像名,查看特定进程

tasklist /fi "imagename eq svchost.exe"

2.5 ntsd

这个命令可用来结束特定进程,严格来说也不是网络排障工具,因排障过程中

可能会用到它而列出来。不使用设备管理器来结束进程不仅仅是因为命令行更酷,

主要是因为 ntsd 结束进程的能力更强,而且命令行更方便脚本化和日志记录。常

用以下两个参数组合,简要说明如下: -c q -p pid

结束某个进程 ID pid 的特定进程,然后退出程序。

-c q -pn image

结束某个进程名为 image 的特定进程,然后退出程序。

示例:

1 Windows 7 之前的操作系统下指定进程号结束某特定进程

ntsd -c q -p 3816

2 Windows 7 之前的操作系统下指定进程名结束某特定进程

ntsd -c q -pn notepad.exe

2.6 taskkill

1 Windows 7 及以后系统下指定进程号结束某特定进程

taskkill /pid 1230

2 Windows 7 及以后系统下指定进名强制结束某特定进程及其子进程

taskkill /f /t /im notepad.exe

2.7 ping

说它是网络排障命令一哥一点都不夸张。 ping.exe 是基于 ICMP 协议开发的应

用,专门用来测试网络的连通性。各个参数可以同时使用,且不分先后位置。常

用的参数及简要说明如下:

-t

一直 ping ,直到手动结束,工程中我们把它叫做长 ping ,如果不指定

-t” 参数,缺省数量是 4 个。

-l

指定数据大小,是纯数据的大小,即 Socket 编程中的缓冲区大小,是

不包含任何报头或封装数据的,如果不指定数据大小,缺省是 32Bytes

-n

指定发送 echo request 的数量,就是我们经常说的 ping 包数,如果不

指定数量,缺省是 4 个。

-w

等待回应的时间,以毫秒为单位,缺省是 4000ms

-i

指定 TTL 值,对于不同的目标系统,其值不同, Windows 缺省是 128 Unix 系都是 64 ,对于网络设备来说,多数是 255

示例:

1 )测试本机到目标主机的连通性

IP 地址也可以换成主机域名,效果一样,系统会先通过 DNS 系统解析出对应

IP 地址。

ping < 目标主机 IP 地址或域名 >

2 )检查一段时间内本机到目标主机之间的网络连接状况

此所谓长 ping

ping -t < 目标主机 IP 地址或域名 >

3 )发送一个探测包,检查目标主机是否在线

ping -n 1 -w 50 < 目标主机 IP 地址或域名 >

4 ping 目标主机 500 个包,每个包 1460 字节大小,并将结果保存到文件中:

ping -n 500 -l 1460 < 目标主机 IP 地址或域名 > >> d:\ping.log

5 )一个 ping 需求

a ping 一段 IP 地址;

b )先检查这一个地址是否能通;

c )对于能通的 IP 地址, ping 500 个包,每个包数据大小 1460Byte ping 的过程

和结果记录在 ping.log

for /l %i in (2,1,254) do @ping -n 1 -w 100 192.168.6.%i & if errorlevel 1 (echo

192.168.6.%i is not online >> d:\ping.log) else (echo 192.168.6.%i is online >>

d:\ping.log & ping -n 500 -l 1460 192.168.6.%i >> d:\ping.log)

6 )脚本参考

做成脚本只是一种选择,很多时候我都没有这样做,替代的做法是把上面的文

本 复制到文本编辑器里,修改几处有关 IP 地址的值,然后再粘贴到命令行窗口

执行。 rem @echo off

@echo input start IP please:

@set /p start=

@echo input end IP please:

@set /p end=

@for /l %%i in (%start%,1,%end%) do @ping -n 1 -w 100 192.168.6.%%i & if

errorlevel 1 (echo 192.168.6.%%i is not online >> d:\ping.log) else (echo 192.168.6.%

%i is online >> d:\ping.log & ping -n 500 -l 1460 192.168.6.%%i >> d:\ping.log)

2.8 tracert

ping.exe 一要,也是基于 ICMP 开发的,只是功能不同,它是用来跟踪路由

用的。

-h

指定追踪到目标的最大跳数,缺省值是 30

-w

每跳等待时长,以毫秒为单位,缺省是 4000ms

示例:

1 )追踪到目标主机的路由,超过 10 跳就不追了,也不要让我等太久:

tracert -h 10 -w < 目标主机 IP 地址或域名 >

2 )一个追踪需求

a )追踪一段 IP 地址;

b )先检查主机是否在线;

c )如果在线,追踪它的路由信息,追踪的过程和结果记录在 traceroute.log

for /l %i in (2,1,254) do @ping -n 1 -w 100 10.1.40.%i & if errorlevel 1 (echo

10.1.40.%i is not online>> d:\traceroute1.40.log) else (echo 10.1.40.%i is online>>

d:\traceroute1.40.log & tracert -h 10 10.1.40.%i >> d:\traceroute1.40.log)

3 )脚本参考

同样,我也不怎么使用这个脚本,取而代之的是使用文本编辑器编辑样例后粘 贴到命令行执行。

rem @echo off

@echo input start IP please:

@set /p start=

@echo input end IP please:

@set /p end=

@for /l %%i in (%start%,1,%end%) do @ping -n 1 -w 100 10.1.40.%%i & if errorlevel

1 (echo 10.1.40.%%i is not online >> d:\traceroute1.40.log) else (echo 10.1.40.%%i is

online>> d:\traceroute1.40 .log & tracert -h 10 10.1.40.%%i >> d:\traceroute1.40.log)

2.9 route

路由操作命令,随着近几年电脑对多卡的支持,以及操作系统对路由功能的支

持, route 逐渐获得更多关注。常用参数及简要说明如下:

print

打印本机完整路由表。

add

添加路由表条目。

delete

删除某条特定路由。

示例:

1 )打印主机路由表

route print

路由表条目经常会超过一屏,可以将输出内容通过管道传递给 more ,如下:

route print | more

也可以将输出内容重定向到一个文件当中,如下:

route print >> d:\route.log

2 )为主机添加路由条目

电脑有两张网卡,其中一张网络卡的网关是 192.168.0.1 ,现在需要到网络

172.16.0.0/24 的数据包走这个网络接口,数据内容需要能够存盘,就算电脑重启 不用再添加。可以执行如下命令:

route add -p 172.16.0.0 mask 255.255.255.0 192.168.0.1 metric 10

3 )删除主机路由表

route delete 0.0.0.0

4 )设置走两个运营商的优先级

Windows 服务器上可能会遇到这种情况。因为两个运营商给的带宽不同,

正常情况下业务数据走 A 运营商, A 运营商不可用时走 B 运营商。

route -p add 0.0.0.0 mask 0.0.0.0 < 连接 A 运营商出口的网关 > metric 10

route -p add 0.0.0.0 mask 0.0.0.0 < 连接 B 运营商出口的网关 > metric 20

2.10

nslookup

用来查询主机的域名是否能够正常解析,或检查 DNS 服务器能否正常为用户

提供服务。使用这个命令基本不用带什么特别参数。

示例:

1 )检查 DNS 能否正常解析域名

执行这个命令之前应确保执行这个命令的电脑网络连接正常。如果试图解析几

个知名大厂的域名都有问题,那就是 DNS 服务器有问题,因为几个大厂的网站同

时出问题的几乎不可能;如果已经确定 DNS 服务器正常工作,但是自己的域名还

是不能解析,就有可能是域名的问题。需要进一步排查。

nslookup < 主机域名 >

2.11

telnet

这本来只是一个通过网络进行远程登录的应用,因其使用 TCP 协议进行连接,

所以也可以用来测试远程目标主机的端口是否开放,是否正在提供服务。使用这

个命令时基本不用带什么特别参数。

示例: 1 )远程管理网络设备等

比如我要管理的目标设备的 IP 地址是 192.168.0.1 ,默认的端口没有修改。就

可以使用如下命令实现远程登录。

telnet < 目标主机 IP 地址或域名 >

2 测试目标主机的某个 TCP 端口是否开放

telnet < 目标主机 IP 地址或域名 > < 目标端口号 >

比如我想测试一下到 IETF 官方网站的服务是否正常,就可以使用如下命令:

telnet www.ietf.org 80

2.12 ssh

也是一个远程登录的应用,不过它相对于 telnet 更加安全。常用参数及简要说

明如下:

-p

指定目标主机的端口

示例:

1 )通过网络远程管理设备

ssh < 目标主机 IP 地址或域名 >

2 )指定用户名“ niuhai” 和端口号“ 2222” ,通过网络远程管理设备“ 192.168.1.1”

ssh niuhai@192.168.1.1 -p 22222

2.13 ftp

登录到远程主机上,进行文件的上传和下载。备份、升级网络设备操作操作系

统软件或配置文件时会用到。使用这个命令时基本不用带什么特别参数。

示例:

1 )连接 ftp 服务器,上传下载文件

ftp 192.168.6.1 2.14

nbtstat

一个有关 NetBIOS 的命令。多个参数可以连在一起使用而不用带空格。常用

参数及简要说明如下:

-A

根据给出的地址,列出远程主机的名字。

-r

以广播的形式,通过 WINS 解析出远程主机的名字。

-n

列出本机的 NetBIOS 名称。

示例:

1) 根据一台主机的 IP 地址,通过 WINS server 和广播方式,查找到主机名

nbtstat -rA 192.168.0.58

nbtstat -r -A 192.168.0.58

2) 列出本机主机名列表

nbtstat -n

3 Linux 平台工具

3.1 ethtool

配置网络接口的命令。它几乎可以配置所有有关网络接口的参数,你想到的想

不到都有,但是我经常只用到了一个,如下:

-p nic.name

让指定名字的网口指示灯闪烁

示例:

1 )让指定名字的网口指示灯闪烁

ethtool -p enp0s3

这是一个非常有用的命令,尤其是在多网络接口的计算设备上。执行完这个命

令后程序一直在运行,直到管理员按“ Ctrl + C 结束。首先要确定网线接在正确

的接口上,地址和网关等配置操作的是正确的网络接口文件,余下的工作才有意 义。

3.2 ifconfig

查看本机网络配置参数。在 RHEL 6 以后版本默认已经不再提供这个命令。

-a

显示本机所有网络的配置信息,其实没有这个参数显示出来的内容也

一样。

-s

显示网络接口的流量统计信息。

add

添加网络地址。

del

删除网络地址。

示例:

1 )查看本机网络配置

ifconfig -a

打印出来的信息如果会超出一屏,我们可以将打印出来的信息通过管道传递给

less more 等,两个都可以达到分屏显示的效果,但是 less 使用起来更加灵活。

如下:

ifconfig -a | less

ifconfig -a | more

也可以通过 grep 过滤,只显示 IP 地址或 MAC 地址。如下:

ifconfig -a | grep inet

ifconfig -a | grep ether

2 )显示本机网络接口的流量统计信息

ifconfig -s

3.3 ifup

启用网络某个网络连接。

示例: 1 )启用“ eth0” 网口

ifup eth0

3.4 ifdown

停用网络某个网络连接。

示例:

1 )启用 eth0 网口

ifdown eth0

3.5 ip

Linux 下对网络接口的操作都可以通过 IP 来实现, RHEL 甚至在7及后面的发

生版本中逐渐替代了 ifconfig 。常用参数如下:

address address show 显示本机网络地址。

route route show

显示本机路由表。

route add

为本机添加路由条目。

link 或  link show

显示本机网络连接状态。

neighbor 或  neighbor show

查看 ARP 表。

link set < 网卡名 >  up

启用某个网卡。

link set < 网卡名 >  down 停用某个网卡。

示例:

1 )查看本机网络配置

ip address show

ip addr show

ip add

2)查看本机路由表

ip route show

ip route show

ip rout

2)为本机添加路由条目

ip route add

niuhai

3 )查看网络连接状态

ip link show

ip lin show

ip lin

4 )查看本机 ARP

ip neighbor show

ip nei show

ip nei

5 )启用网卡“ ens33”

ip link set up ens33

6 )禁用网卡 ens33

ip link set down ens33 3.6 arp

对本机 ARP 表的操作。常用参数及简要说明如下:

-a

显示本机 ARP 表。

-v

显示本机 ARP 表。

-s

创建静态 ARP 条目。

示例:

1 )查看本机 ARP

arp

arp -a

arp -v

arp -e

2 )创建一条静态 ARP 条目

比如:创建 IP 地址为 10.0.0.1 MAC 地址为 e4-72-e2-b5-d4-ba 的静

态条目。

arp -i eth0 -s 10.0.0.1 e4:72:e2:b5:d4:ba

3.7 netstat

Windows 下的 netstat 功能一样,都是查看本机网络连接的命令,不过参数

的用法有所不同。常用参数及简要说明如下:

-a

显示所有的 socket

-n

以数字形式显示。

-t

TCP 协议。

-l

显示处于 Listening 状态的 socket -u

UDP 协议。

-p

显示 socket PID 和进程名。

-r

打印本机路由表。

示例:

1 )以数字的方式查看本机 socket 状态和使用 socket 的进程。

netstat -antlup

3.8 ss

netstat 功能一样,在新一些的版本里已经不在支持 netstat ,仅可用 ss 。常用

参数及简要说明如下:

-a

显示所有的 socket

-n

以数字形式显示。

-t

TCP 协议。

-l

显示处于 Listening 状态的 socket

-u

UDP 协议。

-p

显示 socket PID 和进程名。

-r

打印本机路由表。

示例:

1 )以数字的方式查看本机 socket 状态和使用 socket 的进程。

netstat -antlup

3.9 ps

打印本机当前进程。常用参数及简要说明如下:

-e

显示所有进程。

-A

显示所有进程,同参数“ -e”

-a

显示终端上所有用户进程,包括其他用户进程。 -x

显示没有终端的进程。

-f

全格式输出。

--forest ASCII 树型结构显示。

示例:

1 )打印当前用户所有活动进程

ps -e

ps -A

2 )以全格式形式打印当前用户所有活动进程

ps -ef

3 )以 ASCII 树形打印当前用户所有活动进程

ps -e –forest

3 )以 ASCII 树形打印所有进程

这一个我比较喜欢使用的命令及参数组合。

ps -auxf

以上会显示内容太多经常让我无所适从,只得通过管道传递给 less 分布查看或

使用 grep 进行筛选。

ps -auxf | less

ps -auxf | grep http

3.10

pstree

以树状形式显示当前用户的进程。常用参数及简要说明如下:

-p

显示进程 PID

示例:

1 )以进程树的形式显示当前用户正在运行的进程,并显示进程 ID

pstree -p 3.11

top

动态显示用户当前运行进程的资源占用情况,并做汇总统计。系统资源包括内

存和 CPU 周期等。默认5秒钟更新一次,按回车可马上更新,按“ q” 退出。常用

参数及简要说明如下:

-p

显示进程 ID

示例:

1 )以系统资源占用多少动态显示系统进程运行情况

top

2 )以系统资源占用多少动态显示系统进程运行情况,并显示进程 ID

top -p

3.12

kill

结束一个系统进程。常用参数及简要说明如下:

-9

信号 9 ,如来结束一个进程。

示例:

1 )指定 PID 结束一个进程

kill -9 PID

3.13

pkill

结束一个系统进程。常用参数及简要说明如下:

示例:

1 )指定进程名结束一个进程

pkill ImageName

3.14

ping

Windows 下的 ping 功能一样,也是利用 ICMP 协议的经典应用,不同的是

在缺省情况下就是一直 ping ,直到用户手动结束。常用参数及简要说明如下:

-n

不解析主机名。 -c

指定发送 ping 包的数量。

-s

指定发送数据大小,以字节计,缺省大小是 64Bytes

-t

指定 TTL 值大小,在不同的目标系统, TTL 值不同,如 Windows 缺省

128 Unix 系都是 64 ,对于网络设备来说,一般都是 255

-b

broadcast ping ping 广播,可用来检测网络中的活动主机。

-f

flood ping ,可做性能测试。

示例:

1 )检查远程主机是连通状态,满意后手工结束

ping <IP 地址或主机名 >

2 )正常 ping 100 个包,检查返回结果

ping -c 100 <IP 地址或主机名 >

3 )指定数据包大小测试目标主机响应能力

ping -s 1460 -f <IP 地址或主机名 >

4 )查看网络中的活动主机

ping -b 目标网络广播地址

3.15

traceroute

检查从本机到目标主机的路由。常用参数及简要说明如下:

-s

指定源地址。

示例:

1 )追踪到达某台主机的经过的路由

traceroute <IP 地址或主机名 >

2 )指定从本机的某个接口地址到某台主机经过的路径

traceroute -s < 本机接口地址 > <IP 地址或主机名 > 3.16

nslookup

Windows 下的 nslookup 功能基本一样,用法也基本一样。可用来检查域名

的能否正确解析或 DNS Server 服务是否正常。使用这个命令基本不用带什么特别

参数。

示例:

1 )解析主机名 www.ietf.org 对应的 IP 地址

执行这个命令之前应确保执行这个命令的电脑网络连接正常。如果试图解析几

个知名大厂的域名都有问题,那就是 DNS 服务器有问题,因为几个大厂的网站同

时出问题的几乎不可能;如果已经确定 DNS 服务器正常工作,但是自己的域名还

是不能解析,就有可能是域名的问题。需要进一步排查。

nslookup www.ietf.org

3.17

host

也是一个检查域名能否正确解析的命令。使用这个命令基本不用带什么特别参

数。同样可以用于验证域名与域名服务的正常与否。

示例:

1 )解析主机名 www.ietf.org 对应的 IP 地址

host www.ietf.org

3.18

dig

也是一个检查域名能否正确解析的命令。使用这个命令基本不用带什么特别参

数。同样可以用于验证域名与域名服务的正常与否。

示例:

1 )解析主机名 www.ietf.org 对应的 IP 地址

dig www.ietf.org

3.19

telnet

Windows 下的 telnet 命令作用基本一样,既可以用于远程登录,也可以测试

TCP 端口的开放状态。使用这个命令时基本不需要什么特别的参数。

示例:

1 )远程管理连接 192.168.6.1

telnet 192.168.6.1

2 )测试远程主机 www.ietf.org TCP 端口 80 是否开放

telnet www.ietf.org 80

3.20

ssh

SSH 全称是 Security Shell ,可实现安全的远程登录。可用来远程登录网络设备

Linux 主机。 SSH 有两层含义,一个是指安全的远程连接协议,另一个是指

SSH 安全登录客户端。生产中我们说的 SSH 多指后一个。

示例:

1 )安全地远程登录到主机 192.168.6.1

ssh 192.168.6.1

2 )以用户 niuhai 安全地远程登录主机 192.168.1.1

ssh niuhai@192.168.1.1

3.21

lftp

Linux 下的 FTP 客户端。用来上传下下载文件。对于网络工程师来说,经常用

在网络设备软件和配置文件的备份和升级。

示例:

远程连接到 FTP Server 192.168.6.6 上传或下载文件

lftp 192.168.6.6

举报

相关推荐

0 条评论