Skip to content
字数
6656 字
阅读时间
27 分钟

08常用网络排障工具

hai niu

ICT资深从业者

5 人赞同了该文章

概述

不管是排除网络故障,还是验证网络功能,都有工具的协助,这些工具表现在网络管理员手里就是一些形形色色的命令。个人用户多数用的是Windows系统,但随着Linux系统在服务器和专业电脑上的应用,这一趋势正在悄悄发生改变。所以我们的文档理所当然地提供了两大主流操作系统系统平台的常用网络排障工具。聪明的你不管是遇到什么样的平台都不用怕啦!

每一小节的标题就是主命令,下面的每行是最常用的参数,示例部分用来展示常用的命令+参数组合。示例才是读者需要关注的重点。

Windows平台工具

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

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\CurrentVersion\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

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

一般来说打印出来的信息都会超过一屏,不超过两屏,所以我们经常也会用到上面说的分页和重定向等。

tasklist

显示本机的进程列表。严格意义来说它不算不上是网络排障工具,因为它不能直接应用于网络相关的操作,但它可以显示应用网络的进程。如果不使用任何参数执行这个命令,与用户打开的任务管理器显示的进程的条目一样。常用的参数及简要说明如下:

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

示例:

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

tasklist

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

tasklist /fi "pid eq 3816"

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

tasklist /fi "imagename eq svchost.exe"

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

taskkill

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

taskkill /pid 1230

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

taskkill /f /t /im notepad.exe

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 & if errorlevel 1 (echo 192.168.6.i is online >> d:\ping.log & ping -n 500 -l 1460 192.168.6.%%i >> d:\ping.log)

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 & if errorlevel 1 (echo 10.1.40.i is online>> d:\traceroute1.40 .log & tracert -h 10 10.1.40.%%i >> d:\traceroute1.40.log)

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

nslookup

用来查询主机的域名是否能够正常解析,或检查DNS服务器能否正常为用户提供服务。使用这个命令基本不用带什么特别参数。

示例:

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

执行这个命令之前应确保执行这个命令的电脑网络连接正常。如果试图解析几个知名大厂的域名都有问题,那就是DNS服务器有问题,因为几个大厂的网站同时出问题的几乎不可能;如果已经确定DNS服务器正常工作,但是自己的域名还是不能解析,就有可能是域名的问题。需要进一步排查。

nslookup <主机域名>

telnet

这本来只是一个通过网络进行远程登录的应用,因其使用TCP协议进行连接,所以也可以用来测试远程目标主机的端口是否开放,是否正在提供服务。使用这个命令时基本不用带什么特别参数。

示例:

1)远程管理网络设备等

比如我要管理的目标设备的IP地址是192.168.0.1,默认的端口没有修改。就可以使用如下命令实现远程登录。

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

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

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

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

telnet www.ietf.org 80

ssh

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

-p 指定目标主机的端口

示例:

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

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

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

ssh niuhai@192.168.1.1 -p 22222

ftp

登录到远程主机上,进行文件的上传和下载。备份、升级网络设备操作操作系统软件或配置文件时会用到。使用这个命令时基本不用带什么特别参数。

示例:

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

ftp 192.168.6.1

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

Linux平台工具

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

ifup

启用网络某个网络连接。

示例:

1)启用“eth0”网口

ifup eth0

ifdown

停用网络某个网络连接。

示例:

1)启用eth0网口

ifdown eth0

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

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

netstat

与Windows下的netstat功能一样,都是查看本机网络连接的命令,不过参数的用法有所不同。常用参数及简要说明如下:

-a 显示所有的socket。

-n 以数据形式显示。

-t TCP协议。

-l 显示处于Listening状态的socket。

-u UDP协议。

-p 显示socket的PID和进程名。

-r 打印本机路由表。

示例:

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

netstat -antlup

ss

与netstat功能一样,在新一些的版本里已经不在支持netstat,仅可用ss。常用参数及简要说明如下:

-a 显示所有的socket。

-n 以数据形式显示。

-t TCP协议。

-l 显示处于Listening状态的socket。

-u UDP协议。

-p 显示socket的PID和进程名。

-r 打印本机路由表。

示例:

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

netstat -antlup

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

pstree

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

-p 显示进程PID。

示例:

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

pstree -p

top

动态显示用户当前运行进程的资源占用情况,并做汇总统计。系统资源包括内存和CPU周期等。默认5秒钟更新一次,按回车可马上更新,按“q”退出。常用参数及简要说明如下:

-p 显示进程ID

示例:

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

top

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

top -p

kill

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

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

示例:

1)指定PID结束一个进程

kill -9 PID

pkill

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

示例:

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

pkill ImageName

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 目标网络广播地址

traceroute

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

-s 指定源地址。

示例:

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

traceroute <IP地址或主机名>

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

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

nslookup

与Windows下的nslookup功能基本一样,用法也基本一样。可用来检查域名的能否正确解析或DNS Server服务是否正常。使用这个命令基本不用带什么特别参数。

示例:

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

执行这个命令之前应确保执行这个命令的电脑网络连接正常。如果试图解析几个知名大厂的域名都有问题,那就是DNS服务器有问题,因为几个大厂的网站同时出问题的几乎不可能;如果已经确定DNS服务器正常工作,但是自己的域名还是不能解析,就有可能是域名的问题。需要进一步排查。

nslookup http://www.ietf.org

host

也是一个检查域名能否正确解析的命令。使用这个命令基本不用带什么特别参数。同样可以用于验证域名与域名服务的正常与否。

示例:

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

host http://www.ietf.org

dig

也是一个检查域名能否正确解析的命令。使用这个命令基本不用带什么特别参数。同样可以用于验证域名与域名服务的正常与否。

示例:

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

dig http://www.ietf.org

telnet

与Windows下的telnet命令作用基本一样,既可以用于远程登录,也可以测试TCP端口的开放状态。使用这个命令时基本不需要什么特别的参数。

示例:

1)远程管理连接192.168.6.1

telnet 192.168.6.1

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

telnet www.ietf.org 80

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

lftp

Linux下的FTP客户端。用来上传下下载文件。对于网络工程师来说,经常用在网络设备软件和配置文件的备份和升级。

示例:

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

lftp 192.168.6.6

贡献者

The avatar of contributor named as sunchengzhi sunchengzhi

文件历史

撰写