linux-tutorial/docs/linux/commands/网络管理/网络测试.md
2018-02-28 16:48:00 +08:00

18 KiB
Raw Blame History

title date categories tags
linux 常用命令-网络应用 2018/02/28
linux
linux
command

linux 常用命令-网络应用

host

常用的分析域名查询工具

补充说明

host命令 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。

语法

host(选项)(参数)

选项

-a显示详细的DNS信息
-c<类型>指定查询类型默认值为“IN“
-C查询指定主机的完整的SOA记录
-r在查询域名时不使用递归的查询方式
-t<类型>:指定查询的域名信息类型;
-v显示指令执行的详细信息
-w如果域名服务器没有给出应答信息则总是等待直到域名服务器给出应答
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4使用IPv4
-6使用IPv6.

参数

主机:指定要查询信息的主机信息。

实例

[root@localhost ~]# host www.jsdig.com 
www.jsdig.com is an alias for host.1.jsdig.com.
host.1.jsdig.com has address 100.42.212.8

[root@localhost ~]# host -a www.jsdig.com
Trying "www.jsdig.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.jsdig.com.               IN      ANY

;; ANSWER SECTION:
www.jsdig.com.        463     IN      CNAME   host.1.jsdig.com.

Received 54 bytes from 202.96.104.15#53 in 0 ms

nslookup

查询域名DNS信息的工具

补充说明

nslookup命令 是常用域名查询工具就是查DNS信息用的命令。

nslookup4有两种工作模式即“交互模式”和“非交互模式”。在“交互模式”下用户可以向域名服务器查询各类主机、域名的信息或者输出域名中的主机列表。而在“非交互模式”下用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。

进入交互模式直接输入nslookup命令不加任何参数则直接进入交互模式此时nslookup会连接到默认的域名服务器/etc/resolv.conf的第一个dns地址。或者输入nslookup -nameserver/ip。进入非交互模式,就直接输入nslookup 域名就可以了。

语法

nslookup(选项)(参数)

选项

-sil不显示任何警告信息。

参数

域名:指定要查询域名。

实例

[root@localhost ~]# nslookup www.jsdig.com
Server:         202.96.104.15
Address:        202.96.104.15#53

Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name:   host.1.jsdig.com
Address: 100.42.212.8

nc/netcat

命令用于设置路由器。

补充说明

nc命令 用于设置路由器。执行本指令可设置路由器的相关参数。

语法

nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

选项

-g<网关> 设置路由器跃程通信网关最丢哦可设置8个。
-G<指向器数目> 设置来源路由指向器其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址而不通过域名服务器。
-o<输出文件> 指定文件名称把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

实例

TCP端口扫描

[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100 
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open

扫描192.168.0.3 的端口 范围是 1-100 扫描UDP端口

[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000  # 扫描192.168.0.3 的端口 范围是 1-1000

扫描指定端口

[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口
(UNKNOWN) [192.168.0.1] 80 (?) open
y  //用户输入

dig

域名查询工具

补充说明

dig命令 是常用的域名查询工具,可以用来测试域名系统工作是否正常。

语法

dig(选项)(参数)

选项

@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>当主机具有多个IP地址指定使用本机的哪个IP地址向域名服务器发送域名查询请求
-f<文件名称>指定dig以批处理的方式运行指定的文件中保存着需要批处理查询的DNS任务信息
-P指定域名服务器所使用端口号
-t<类型>指定要查询的DNS数据类型
-x<IP地址>:执行逆向域名查询;
-4使用IPv4
-6使用IPv6
-h显示指令帮助信息。

参数

  • 主机:指定要查询域名主机;
  • 查询类型指定DNS查询的类型
  • 查询类指定查询DNS的class
  • 查询选项:指定查询选项。

实例

[root@localhost ~]# dig www.jsdig.com

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;www.jsdig.com.               IN      A

;; ANSWER SECTION:
www.jsdig.com.        0       IN      CNAME   host.1.jsdig.com.
host.1.jsdig.com.     0       IN      A       100.42.212.8

;; AUTHORITY SECTION:
jsdig.com.            8       IN      NS      f1g1ns2.dnspod.net.
jsdig.com.            8       IN      NS      f1g1ns1.dnspod.net.

;; Query time: 0 msec
;; SERVER: 202.96.104.15#53(202.96.104.15)
;; WHEN: Thu Dec 26 11:14:37 2013
;; MSG SIZE  rcvd: 121

ping

测试主机之间网络的连通性

补充说明

ping命令 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议发出要求回应的信息若远端主机的网络功能没有问题就会回应该信息因而得知该主机运作正常。

语法

ping(选项)(参数)

选项

-d使用Socket的SO_DEBUG功能
-c<完成次数>:设置完成要求回应的次数;
-f极限检测
-i<间隔秒数>:指定收发信息的间隔时间;
-I<网络界面>:使用指定的网络界面送出数据包;
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
-n只输出数值
-p<范本样式>:设置填满数据包的范本样式;
-q不显示指令执行过程开头和结尾的相关信息除外
-r忽略普通的Routing Table直接将数据包送到远端主机上
-R记录路由过程
-s<数据包大小>:设置数据包的大小;
-t<存活数值>设置存活数值TTL的大小
-v详细显示指令的执行过程。

参数

目的主机指定发送ICMP报文的目的主机。

实例

[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms
...按Ctrl+C结束

--- host.1.jsdig.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms

traceroute

显示数据包到主机间的路径

补充说明

traceroute命令 用于追踪数据包在网络上的传输时的全部路径它默认发送的数据包大小是40字节。

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点source到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。

traceroute通过发送小的数据包到目的设备直到其返回来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称如有的话及其ip地址。

语法

traceroute(选项)(参数)

选项

-d使用Socket层级的排错功能
-f<存活数值>设置第一个检测数据包的存活数值TTL的大小
-F设置勿离断位
-g<网关>设置来源路由网关最多可设置8个
-i<网络界面>:使用指定的网络界面送出数据包;
-I使用ICMP回应取代UDP资料信息
-m<存活数值>设置检测数据包的最大存活数值TTL的大小
-n直接使用IP地址而非主机名称
-p<通信端口>设置UDP传输协议的通信端口
-r忽略普通的Routing Table直接将数据包送到远端主机上。
-s<来源地址>设置本地主机送出数据包的IP地址
-t<服务类型>设置检测数据包的TOS数值
-v详细显示指令的执行过程
-w<超时秒数>:设置等待远端主机回报的时间;
-x开启或关闭数据包的正确性检验。

参数

主机指定目的主机IP地址或主机名。

实例

traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
 1  unknown (192.168.2.1)  3.453 ms  3.801 ms  3.937 ms
 2  221.6.45.33 (221.6.45.33)  7.768 ms  7.816 ms  7.840 ms
 3  221.6.0.233 (221.6.0.233)  13.784 ms  13.827 ms 221.6.9.81 (221.6.9.81)  9.758 ms
 4  221.6.2.169 (221.6.2.169)  11.777 ms 122.96.66.13 (122.96.66.13)  34.952 ms 221.6.2.53 (221.6.2.53)  41.372 ms
 5  219.158.96.149 (219.158.96.149)  39.167 ms  39.210 ms  39.238 ms
 6  123.126.0.194 (123.126.0.194)  37.270 ms 123.126.0.66 (123.126.0.66)  37.163 ms  37.441 ms
 7  124.65.57.26 (124.65.57.26)  42.787 ms  42.799 ms  42.809 ms
 8  61.148.146.210 (61.148.146.210)  30.176 ms 61.148.154.98 (61.148.154.98)  32.613 ms  32.675 ms
 9  202.106.42.102 (202.106.42.102)  44.563 ms  44.600 ms  44.627 ms
10  210.77.139.150 (210.77.139.150)  53.302 ms  53.233 ms  53.032 ms
11  211.151.104.6 (211.151.104.6)  39.585 ms  39.502 ms  39.598 ms
12  211.151.111.30 (211.151.111.30)  35.161 ms  35.938 ms  36.005 ms

记录按序列号从1开始每个纪录就是一跳 每跳表示一个网关我们看到每行有三个时间单位是ms其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 www.58.com表示向每个网关发送4个数据包。

有时我们traceroute一台主机时会看到有一些行是以星号表示的。出现这样的情况可能是防火墙封掉了ICMP的返回信息所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长有可能是某台网关比较阻塞也可能是物理设备本身的原因。当然如果某台DNS出现问题时不能解析主机名、域名时也会 有延时长的现象您可以加-n参数来避免DNS解析以IP格式输出数据。

如果在局域网中的不同网段之间我们可以通过traceroute 来排查问题所在是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时我们用到traceroute 追踪数据包所经过的网关提交IDC服务商也有助于解决问题但目前看来在国内解决这样的问题是比较困难的就是我们发现问题所在IDC服务商也不可能帮助我们解决。

跳数设置

[root@localhost ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (61.135.169.105), 10 hops max, 40 byte packets
 1  192.168.74.2 (192.168.74.2)  1.534 ms  1.775 ms  1.961 ms
 2  211.151.56.1 (211.151.56.1)  0.508 ms  0.514 ms  0.507 ms
 3  211.151.227.206 (211.151.227.206)  0.571 ms  0.558 ms  0.550 ms
 4  210.77.139.145 (210.77.139.145)  0.708 ms  0.729 ms  0.785 ms
 5  202.106.42.101 (202.106.42.101)  7.978 ms  8.155 ms  8.311 ms
 6  bt-228-037.bta.net.cn (202.106.228.37)  772.460 ms bt-228-025.bta.net.cn (202.106.228.25)  2.152 ms 61.148.154.97 (61.148.154.97)  772.107 ms
 7  124.65.58.221 (124.65.58.221)  4.875 ms 61.148.146.29 (61.148.146.29)  2.124 ms 124.65.58.221 (124.65.58.221)  4.854 ms
 8  123.126.6.198 (123.126.6.198)  2.944 ms 61.148.156.6 (61.148.156.6)  3.505 ms 123.126.6.198 (123.126.6.198)  2.885 ms
 9  * * *
10  * * *

其它一些实例

traceroute -m 10 www.baidu.com # 跳数设置
traceroute -n www.baidu.com    # 显示IP地址不查主机名
traceroute -p 6888 www.baidu.com  # 探测包使用的基本UDP端口设置6888
traceroute -q 4 www.baidu.com  # 把探测包的个数设置为值4
traceroute -r www.baidu.com    # 绕过正常的路由表,直接发送到网络相连的主机
traceroute -w 3 www.baidu.com  # 把对外发探测包的等待响应时间设置为3秒

netstat

查看Linux中网络系统状态信息

补充说明

netstat命令 用来打印Linux中网络系统的状态信息可让你得知整个Linux系统的网络情况。

语法

netstat(选项)

选项

-a或--all显示所有连线中的Socket
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous持续列出网络状态
-C或--cache显示路由器配置的快取信息
-e或--extend显示网络其他相关信息
-F或--fib显示FIB
-g或--groups显示多重广播功能群组组员名单
-h或--help在线帮助
-i或--interfaces显示网络界面信息表单
-l或--listening显示监控中的服务器的Socket
-M或--masquerade显示伪装的网络连线
-n或--numeric直接使用ip地址而不通过域名服务器
-N或--netlink或--symbolic显示网络硬件外围设备的符号连接名称
-o或--timers显示计时器
-p或--programs显示正在使用Socket的程序识别码和程序名称
-r或--route显示Routing Table
-s或--statistice显示网络工作信息统计表
-t或--tcp显示TCP传输协议的连线状况
-u或--udp显示UDP传输协议的连线状况
-v或--verbose显示指令执行过程
-V或--version显示版本信息
-w或--raw显示RAW传输协议的连线状况
-x或--unix此参数的效果和指定"-A unix"参数相同;
--ip或--inet此参数的效果和指定"-A inet"参数相同。

实例

列出所有端口 (包括监听和未监听的)

netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口                             

列出所有处于监听状态的 Sockets

netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

显示每个协议的统计信息

netstat -s   显示所有端口的统计信息
netstat -st   显示TCP端口的统计信息
netstat -su   显示UDP端口的统计信息

在netstat输出中显示 PID 和进程名称

netstat -pt

netstat -p可以与其它开关一起使用就可以添加“PID/进程名称”到netstat输出中这样debugging的时候可以很方便的发现特定端口运行的程序。

在netstat输出中不显示主机端口和用户名(host, port or user)

当你不想让主机,端口和用户名显示,使用netstat -n。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。

netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令:

netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users

持续输出netstat信息

netstat -c   #每隔一秒输出网络信息

显示系统不支持的地址族(Address Families)

netstat --verbose

在输出的末尾,会有如下的信息:

netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

显示核心路由信息

netstat -r

使用netstat -rn显示数字格式,不查询主机名称。

找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

netstat -ap | grep ssh

找出运行在指定端口的进程:

netstat -an | grep ':80'

显示网络接口列表

netstat -i

显示详细信息像是ifconfig使用netstat -ie

IP和TCP分析

查看连接某服务端口最多的的IP地址

netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr

TCP各种状态列表

netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'

查看phpcgi进程数如果接近预设值说明不够用需要增加

netstat -anpo | grep "php-cgi" | wc -l