网络测试诊断工具

测试网络连通性
ping
显示正确的路由表
ip route
route
跟踪路由
traceroute
tracepath
mtr
确定名称服务器使用
nslookup
host
dig
抓包工具
tcpdump
wireshark
安全扫描工具
nmap
netcat :网络界的瑞士军刀,即nc
流量控制工具
tc

范例:

tc qdisc add dev eth0 root netem loss 50%
tc qdisc add dev eth0 root netem delay 1000ms
tc qdisc show dev eth0
tc qdisc del

fping

fping是一个程序,用于将ICMP探测发送到网络主机,类似于ping,fping的历史由来已久:Roland
Schemers在1992年确实发布了它的第一个版本,从那时起它就确立了自己的地位,成为网络诊断和统
计的标准工具
相对于ping多个主机时性能要高得多。 fping完全不同于ping,可以在命令行上定义任意数量的主机,
或者指定包含要ping的IP地址或主机列表的文件, 常在shell 脚本中使用
CentOS 中由EPEL源提供

官网:http://www.fping.org/
[root@centos8 ~]#yum -y install fping
[root@centos8 ~]#fping 10.0.0.7
10.0.0.7 is alive
[root@centos7 ~]#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@centos8 ~]#fping 10.0.0.7
10.0.0.7 is unreachable
[root@centos8 ~]#fping 10.0.0.7
10.0.0.7 is unreachable
[root@centos8 ~]#fping 10.0.0.7 10.0.0.8
10.0.0.8 is alive
10.0.0.7 is unreachable
#-g 选项可以指定网段或地址范围
[root@centos8 ~]#fping -g 10.0.0.0/24
10.0.0.1 is alive
10.0.0.2 is alive
10.0.0.8 is alive
10.0.0.100 is alive
ICMP Host Unreachable from 10.0.0.8 for ICMP Echo sent to 10.0.0.3
[root@centos8 ~]#fping -g 10.0.0.5 10.0.0.10
10.0.0.8 is alive
ICMP Host Unreachable from 10.0.0.8 for ICMP Echo sent to 10.0.0.6
ICMP Host Unreachable from 10.0.0.8 for ICMP Echo sent to 10.0.0.6
#对文件中的主机时行测试
[root@centos8 ~]#tee hosts.txt <<EOF
10.0.0.7
10.0.0.6
EOF
10.0.0.7
10.0.0.6
[root@centos8 ~]#fping < hosts.txt
10.0.0.6 is alive
10.0.0.7 is unreachable
[root@centos8 ~]#fping -s < hosts.txt
10.0.0.6 is alive
10.0.0.7 is unreachable
2 targets
1 alive
1 unreachable
0 unknown addresses

tcpdump

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。

语法:

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<
数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络接口> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。

范例:

[root@CentOS-8 ~]# tcpdump -D
1.bond0 [Up, Running]
2.eth1 [Up, Running]
3.lo [Up, Running, Loopback]
4.any (Pseudo-device that captures on all interfaces) [Up, Running]
5.eth0 [Up]
6.virbr0 [Up]
7.bluetooth-monitor (Bluetooth Linux Monitor) [none]
8.nflog (Linux netfilter log (NFLOG) interface) [none]
9.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
10.bluetooth0 (Bluetooth adapter number 0) [none]
11.usbmon0 (All USB buses) [none]
12.usbmon1 (USB bus number 1)
13.usbmon2 (USB bus number 2)
14.virbr0-nic [none]

#不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
tcpdump
#监听特定网卡
tcpdump -i en0
#监听特定主机,监听主机10.0.0.100 的通信包,注意:出、入的包都会被监听。
tcpdump host 10.0.0.100
#特定来源、目标地址的通信
#特定来源
tcpdump src host hostname
#特定目标地址
tcpdump dst host hostname
#如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
tcpdump host hostname
#面试题
[root@centos8 ~]#tcpdump -i eth0 -nn icmp and src host 10.0.0.6 and dst host
10.0.0.7
#特定端口
tcpdump port 3000
#监听TCP/UDP,服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包
tcpdump tcp
#来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100
#监听特定主机之间的通信
tcpdump ip host 10.0.0.101 and 10.0.0.102
#10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.1
#详细示例
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24
-w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数
据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析
#限制抓包的数量,如下,抓到1000个包后,自动退出
tcpdump -c 1000
#保存到本地,tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,
才会将输出写到本地磁盘,可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap

nmap

扫描远程主机工具,功能远超越用世人皆知的 Ping 工具发送简单的 ICMP 回声请求报文

官方帮助:https://nmap.org/book/man.html

格式:

nmap [Scan Type(s)] [Options] {target specification}
命令选项
-sT TCP connect() 扫描,这是最基本的 TCP扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息

-sS TCP 同步扫描 (TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志

-sF,-sX,-sN 秘密 FIN 数据包扫描、圣诞树 (Xmas Tree)、空 (Null) 扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应 RST 包,而打开的端口必需忽略有问题的包

-sP ping 扫描,用 ping 方式检查网络上哪些主机正在运行。当主机阻塞 ICMP echo 请求包是ping 扫描是无效的。nmap 在任何情况下都会进行 ping 扫描,只有目标主机处于运行状态,才会进行后续的扫描

-sU UDP 的数据包进行扫描,想知道在某台主机上提供哪些 UDP 服务,可以使用此选项

-sA ACK 扫描,这项高级的扫描方法通常可以用来穿过防火墙。

-sW 滑动窗口扫描,非常类似于 ACK 的扫描

-sR RPC 扫描,和其它不同的端口扫描方法结合使用。

-b FTP 反弹攻击 (bounce attack),连接到防火墙后面的一台
FTP 服务器做代理,接着进行端口扫描。

-P0 在扫描之前,不 ping 主机。

-PT 扫描之前,使用 TCP ping 确定哪些主机正在运行

-PS 对于 root 用户,这个选项让 nmap 使用 SYN 包而不是 ACK 包来对目标主机进行扫描。

-PI 设置这个选项,让 nmap 使用真正的 ping(ICMP echo 请求)来扫描目标主机是否正在运行。

-PB 这是默认的 ping 扫描选项。它使用 ACK(-PT) 和 ICMP(-PI) 两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。

-O 这个选项激活对 TCP/IP 指纹特征 (fingerprinting) 的扫描,获得远程主机的标志,也就是操作系统类型

-I 打开 nmap 的反向标志扫描功能。

-f 使用碎片 IP 数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图

-v 冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。

-S <IP> 在一些情况下,nmap 可能无法确定你的源地址。在这种情况使用这个选项给出指定 IP 地址

-g port 设置扫描的源端口

-oN 把扫描结果重定向到一个可读的文件 logfilename 中

-oS 扫描结果输出到标准输出。

--host_timeout 设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制

--max_rtt_timeout 设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约 9000 毫秒

--min_rtt_timeout 设置 nmap对每次探测至少等待你指定的时间,以毫秒为单位

-M count 置进行 TCP connect() 扫描时,最多使用多少个套接字进行并行的扫描

范例:

#Tcp ack 扫描,并发2000,速度快
nmap -n -PA --min-parallelism 2000 172.16.0.0/16
#仅列出指定网段上的每台主机,不发送任何报文到目标主机.
[root@centos8 ~]#nmap -sL 10.0.0.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:28 CST
Nmap scan report for 10.0.0.0
Nmap scan report for 10.0.0.1
......
Nmap scan report for 10.0.0.254
Nmap scan report for 10.0.0.255
Nmap done: 256 IP addresses (0 hosts up) scanned in 1.04 seconds
#可以指定一个IP地址范围
[root@centos8 ~]#nmap -sP 10.0.0.1-10
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:30 CST
Nmap scan report for 10.0.0.1
Host is up (0.000081s latency).
#批量扫描一个网段的主机存活数
nmap -sP -v 192.168.1.0/24
nmap –v –sn ip/24
#有些主机关闭了ping检测,所以可以使用-P0跳过ping的探测,可以加快扫描速度.
nmap -P0 192.168.1.100
#扫描主机
nmap –v –A IP
#一次性扫描多台目标主机
[root@centos8 ~]#nmap 10.0.0.6 10.0.0.7
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:39 CST
Nmap scan report for 10.0.0.6
Host is up (0.00055s latency).

#探测目标主机开放的端口,可指定一个以逗号分隔的端口列表(如-PS22,443,80)
[root@centos8 ~]#nmap -PS22,80,443 10.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:31 CST
Nmap scan report for 10.0.0.1
#使用SYN半开放扫描
[root@centos8 ~]#nmap -sS 10.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:33 CST
#扫描开放了TCP端口的设备
[root@centos8 ~]#nmap -sT 10.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:34 CST
#扫描开放了UDP端口的设备
[root@centos8 ~]#nmap -sU 10.0.0.1
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:34 CST
#只扫描UDP端口
nmap –e eth1 -sU -O 10.0.0.1
#扫描TCP和UDP端口
nmap -sTU -O 10.0.0.1
#用于扫描目标主机服务版本号
[root@centos8 ~]#nmap -sV 10.0.0.7
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 12:37 CST
#查看主机当前开放的端口
nmap localhost
#查看主机端口(1024-65535)中开放的端口
nmap -p 1024-65535 localhost
#探测目标主机开放的端口
nmap -PS 10.0.0.1
#探测所列出的目标主机端口
nmap -PS22,80,3306 10.0.0.1
#探测目标主机操作系统类型
nmap -O 10.0.0.1
#探测目标主机操作系统类型
nmap -A 10.0.0.1
posted @ 2021-04-17 21:27  空白的旋律  阅读(427)  评论(0编辑  收藏  举报