1 fping

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

  1. ~ yum install -y fping
  2. ~ fping 10.0.0.22
  3. 10.0.0.22 is alive
  4. ~ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  5. ~ fping 10.0.0.22
  6. 10.0.0.22 is unreachable
  7. #fping可以多个地址
  8. ~ fping 10.0.0.22 139.198.105.99
  9. 139.198.105.99 is alive
  10. 10.0.0.22 is unreachable
  11. #-g 选项可以指定网段或者地址范围
  12. ~ fping -g 10.0.0.0/24
  13. ~ fping -g 10.0.0.5 10.0.0.10
  14. #对文件中的主机进行测试
  15. ~ tee hosts.txt <<-'EOF'
  16. 10.0.0.7
  17. 10.0.0.6
  18. EOF
  19. ~ fping < hosts.txt
  20. ~ fping -s < hosts.txt

2 tcpudmp

:::info tcpdump详细教程 ::: tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供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 不把主机的网络地址转换成名字。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。

-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。

-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-vvv:产生比-vv更详细的输出。
-x 用十六进制字码列出数据包资料。

-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-w<数据包文件> 把数据包数据写入指定的文件。

范例:

#查看网卡
~ tcpdump -D
1.virbr0
2.bluetooth0 (Bluetooth adapter number 0)
3.nflog (Linux netfilter log (NFLOG) interface)
4.nfqueue (Linux netfilter queue (NFQUEUE) interface)
5.usbmon1 (USB bus number 1)
6.usbmon2 (USB bus number 2)
7.ens33
8.any (Pseudo-device that captures on all interfaces)
9.lo [Loopback]

#不指定任何参数,监听第一块网卡上经过的数据包,主机可能有不止一块网卡,所以经常需要指定网卡
tcpdump

#监听特定网卡
tcpdump -i eth0

#监听10.0.0.100的通信包,注意:出、入的包都会被监听
tcpdump host 10.0.0.100

#特定来源、目标地址的通信
#特定来源
tcpdump src host hostname

#特定目标地址
tcpdump dst host hostname

#如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
tcpdump host hostname

#面试题:
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 -g 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

范例:tcpdump示例

#默认情况下,直接启动tcpdump将监视第一个网络接口(非lo口)上所有流通的数据包。这样抓取的结果会非常多,滚动非常快。
tcpdump

#监视指定网络接口的数据包
tcpdump -i eth0

#监视指定主机的数据包,例如所有进入或离开node1的数据包
tcpdump -i eth0 host node1

#打印node1<-->node2或node1<-->node3之间通信的数据包
tcpdump -i eth0 host node1 and \(node2 or node3\)

#打印node1与任何其他主机之间通信的IP数据包,但不包括与node4之间的数据包
tcpdump -i eth0 host node1 and not node4

#截获主机node1 发送的所有数据
tcpdump -i eth0 src host node1

#监视所有发送到主机node1 的数据包
tcpdump -i eth0 dst host node1

#监视指定主机和端口的数据包
tcpdump -i eth0 port 8080 and host node1

#监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包
tcpdump -i eth0 -c 10 net 192.168

#打印所有通过网关snup的ftp数据包
tcpdump 'gateway snup and (port ftp or ftp-data)'
##注意,表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析

#抓取ping包
tcpdump -i eth0 -nn icmp -c 5
#指定主机抓ping包
tcpdump -i eth0 -nn icmp -c 10 host 192.168.100.10

#抓取到本机22端口包
tcpdump -i eth0 tcp dst port 22 -nn -c 10 

#解析包数据
tcpdump -i eth0 tcp dst port 22 -nn -c 2 -q -XX -vvv 
tcpdump -i eth0 tcp dst port 22 -nn -c 2 -q -XX -vvv -w /tmp/test_tcpdump.cap

3 nmap

扫描远程主机工具,功能远超越用世人皆知的Ping工具发送简单的ICMP回声请求报文。探测主机是否存活的工具
官方帮助:https://nmap.org/book/man.html
格式:

nmap [scan Type(s)][options] {target specification}

命令选项
-sT TCP connect() 扫描,这是最基本的 TCP扫描方式。这种扫描很容易该检测到,在目标主机的日志中会记录大批的连接请求以及错误信息
-ss TCP 同步扫描(TCP SYR),因为不必全部打开一个TP连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志
-sF,sX,-sN 秘密FIN数据包扫描、圣诞树(xmas Tree)、空(Nu11)扫描模式。这些扫描方式的理论依据是:关闭的嫌口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包
-sping     扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞工CP 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包来对目标主机进行扫描。
-I            设置这个选项,让nmap使用真正的 ping(IcMp echo 请求〉来扫描目标主机是否正在运行。
-PB            这是默认的ping 扫描选项。它使用 AK(-PT)和IONP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穷过防M箭⑤:

-O        这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型
-I        打开nmap的反向标志扫描功能。
-f        使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图
-v        冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。
-5 <IP>        在一些情况下,nmap可能无法确定你的源地址。在这种情况使用这个选项给出指定IP地址
-g port        设置扫描的源端口
-oN     把扫描结果重定向到一个可读的文件logfilename中
-oS        扫描结果输出到标准输出。
--host_timeout            设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制
--max_rtt_timeout        设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约9000毫秒
--min_rtt_timeout        设置nmap对每次探测至少等待你指定的时间,以毫秒为单位
-M count    只进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描

##设置时间模板
简单来说就是调整你的扫描时间等级,数字越大时间越快,但是相应就要牺牲一些别的东西。
-T0:paranoid,可以避免IDS报警,速度最慢,一个时间扫描一个端口,每个探测报文的发送间隔为5分钟。
-T1:sneaky,可以避免IDS报警,速度很慢,探测报文发送间隔为15s。
-T2:polite,降低了扫描速度从而可以使用更少的带宽和目标主机资源,速度较慢,探测报文发送间隔为0.4s。
-T3:normal,正常模式,未作任何改变和优化。
-T4:aggressive,假设用户具有合适及可靠的网络从而加速扫描,针对TCP端口禁止动态扫描延迟超过10ms,一般如果扫描可靠的网络使用这个较好。
-T5:insane,假设用户拥有特别快的网络或者为了速度可以牺牲准确性等其他因素,可能会使目标主机崩溃。
##扫描目标的选择相关选项
-iL :从一个文件中输入你的扫描目标信息(IP地址,主机名,CIDR,IPv6,或者八位字节范围),文件中的每一项必须以一个或多个空格,制表符或换行符分开。比如你创建了一个文件test.txt,里面输入了用换行符分开的一些IP地址,那么你就可以输入nmap命令nmap -iL test.txt来扫描文件中的目标。
-iR :随机生成个的目标进行扫描,如果hostnum是0,则代表永无止尽的随机扫描,慎用慎用!!。
--exclude <host1[,host2][,host3],...>:排除主机/网络,如果在你扫描过程中有一些网络/主机不是你想扫描的,那么就使用这个命令进行排除,举个例子,比如我的test.txt有3个IP地址,现在我不想对其中的192.168.1.121进行扫描,那么我就可以输入nmap命令nmap -iL test.txt --exclude 192.168.1.121。
--excludefile :排除文件中的主机/网络列表,原理和上面类似,如果我现在在test.txt中有一些IP地址不想扫描,那么我们可以把它们放在exclude.txt中并用适当的分隔符进行分割,举个例子就是nmap -iL test.txt --excludefile exclude.txt。
##主机/网络的发现和探测
可以理解为平时我们的ping命令,但是这里nmap有更多别的五花八门的方法来实现我们的“ping”。
-sL:列出指定网络上的每台主机,不发送任何报文到目标主机,例如nmap -sL 192.168.1.1,当然很多网络都对这个做了防护措施,或许你并扫不出来什么。
-sn:无端口扫描,也就是ping扫描,仅仅可以探测出目标是否可达,例如nmap -sn 192.168.1.112,早一些的版本这个命令叫-sP,在局域网内,该扫描可能并不会发送ICMP报文,而是会广播ARP报文。
--dns-servers:指定DNS服务器来进行端口扫描,指定一个或者多个dns服务器可以让你的扫描更快,例如nmap --dns-servers xxx.xxx.xxx.xxx -sn 192.168.1.112。
##扫描方式
-sT:TCP全连接扫描,主机会与目标端口进行三次握手,建立完整的TCP连接,这种方式扫描速度慢,网络流量大,容易被发现,例如nmap -sT 192.168.1.112。
-sS:TCP SYN扫描,主机向目标端口发送SYN报文,如果目标端口返回了[ACK,SYN],主机发送RST直接断开,这种扫描方式速度较快,被广泛使用,例如nmap -sS 192.168.1.112。
-sA:TCP ACK扫描,主机向目标端口发送ACK报文,如果目标端口返回了RST,则说明目标端口开放,该方式可以用来绕过防火墙,例如nmap -sA 192.168.1.112。
-sU:UDP扫描,通过向端口发送UDP数据包来判断开启了哪些UDP服务,UDP扫描通常比TCP扫描要慢,你可以将UDP扫描与TCP扫描同时进行,例如nmap -sS -sU 192.168.1.112。
-sN-sF-sX:这是三种秘密扫描方式,分别为NULL扫描,FIN扫描和Xmas扫描扫描,它们相对比较隐蔽,除了探测报文的标志位不同,这三种扫描在行为上完全一致。如果收到一个RST报文,该端口被认为是关闭的,而没有响应则意味着端口是开放或者被过滤的,这些扫描可以结合--scanflags进行使用,它的参数可以是URG,ACK,PSH,RST,SYN等。
##扫描端口设置
-p:设置扫描端口范围,设置扫描端口范围有多种方式,比如nmap -sS -p 1-65535 192.168.1.112代表扫描1到65535这些端口。当然你也可以根据不同的协议指定的更细一点,比如nmap -sS -p U:53,111,137,T:21-25,80,139,8080 192.168.1.112代表扫描UDP的53,111,137端口和TCP的21到25,80。。。等端口,其中T代表TCP, U代表UDP, S代表SCTP, P代表IP协议。\
--exclude-ports :设置扫描要排除的端口,用法和上面类似,例如nmap -sS -p 1-65535 --exclude-ports 3306 192.168.1.112。
-F:快速扫描,这里按照nmap内置的最常用端口表进行扫描,扫描数量比默认的更少,时间也会更短一些,例如nmap -sS -F 192.168.1.112。
-r:正常情况下,为了扫描效率,端口扫描的顺序是随机的,这个参数可以让扫描顺序按照由低到高的顺序进行扫描,例如nmap -sS -r 192.168.1.112。
--top-ports :扫描nmap的端口表里最常见的前n个端口,例如nmap -sS --top-ports 10 192.168.1.105。
##版本与操作系统探测
-sV:检测目标运行的服务版本,例如nmap -sV 192.168.1.105,它会检测出目标主机端口号所运行的服务或软件的版本
-O:检测目标操作系统,例如nmap -O 192.168.1.105
##扫描时间设置
--host-timeout :由于性能较差或不可靠的网络硬件或软件、带宽限制、严格的防火墙等原因,一些主机需要很长的时间扫描。这些极少数的主机扫描往往占据了大部分的扫描时间。因此,最好的办法是减少时间消耗并且忽略这些主机,使用--host-timeout选项来说明等待的时间(毫秒)。
--scan-delay :调整探测报文的时间间隔,将它设置小可以用来躲避防火墙。
##其他常用设置
-v:提高输出信息的详细程度
-A:启动强力扫描模式,该模式下会默认启动操作系统检测(-O) 和版本扫描(-sV)
-6:启用IPv6扫描

范例:

#TCP ack扫描,并发2000,速度快
~ nmap -n -pA --min-parallelism 2000 172.16.0.0/16

#仅列出指定网段的每台主机,不发送任何报文到目标主机
~ nmap -sL 10.0.0.0/24

#可以指定一个IP地址范围
~ nmap -sP 10.0.0.1-10

#批量扫描一个网段的主机存活数
~ 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地址>

#一次性扫描多台目标主机
~ nmap 10.0.0.6 10.0.0.7

#从一个文件中导入IP地址,并进行扫描
~ cat hosts.txt
10.0.0.6
10.0.0.7
58.87.87.99

~ nmap -iL hosts.txt

#探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,443,80)
~ nmap -PS22,443,80 10.0.0.1

#使用SYN半开放扫描
~ nmap -sS 10.0.0.1

#扫描开放了TCP端口的设备
~ nmap -sT 10.0.0.1

#扫描开放了UDP端口的设备
~ nmap -sU 10.0.0.1

#只扫描UDP端口
~ nmap -e eth1 -sU -O 10.0.0.1

#扫描了TCP和UDP的端口
~ nmap -e eth1 -sU -sT -O 10.0.0.1
~ nmap -sU -sT -p0-65535 10.0.0.1