- 三层发现的优点
- 可路由
- 速度快
- 缺点
- 速度比二层慢
- 经常被边界防火墙过滤(还有可能出现宕机状态)
- IP、ICMP、TCP协议
ping
使用ping命令的时候如果可以接发包,使用的是数据包的type8,如果不可以使用的是type0
ping -192.168.0.102 -c 5 在这里linux和Windows的ping包有些不同,使用-c 可以指定发送多少个数据包
进行三层的发现除了进行icmp的探测之外还可以用路由追踪
使用路由追踪命令可能会被边界路由拦截,但是路由追踪和ping有点不同,它先会将TTL值设置为1,在经过第一跳路由以后减一,这个时候就会发送数据包 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 使用traceroute和ping -R命令有点不同,使用traceroute返回的是较近的网卡,而使用ping -R返回的是较远的网卡
- ```ping 192.168.1.103 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1``` 这样使用管道就可以将存在的ip显示出来
- 由于ping命令本身不支持一个网段的并发性扫描,所以通过脚本来实现,三层的发现简单bash脚本:
```bash
#/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage - ./ping.sh [interface]"
echo "Example - ./ping.sh 192.168.1.0"
echo "Example will perform an ICMP"
exit
fi
prefix=$(echo $1 | cut -d '.' -f 1-3)
for addr in $(seq 1 254); do
ping -c 1 $prefix.$addr | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 >> addr.txt
done除了使用bash调用ping命令之外,还可以使用scopy类似于二层发现时的脚本来进行主机发现,使用scopy的时候一定要设置超时,脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv) != 2:
print "Usage - ./pingr 0/24 ICMP"
print "Example - ./pingr 192.168.0.103"
print "Example will perform an ICMP scan of the 192.168.0.0/24 range"
sys.exit()
address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'
for addr in range(1,254):
answer=sr1(IP(dst=prefix+str(addr))/ICMP(),timeout=0.1,verbose=0)
if answer == None:
pass
else:
print prefix+str(addr)
- 使用脚本也可以调用已经存在的IP列表进行扫描,这样将脚本改为加载ip文件,然后调用扫描就可以了
除了使用ping和traceroute之外还可以使用nmap进行三层的发现:
192.168.1.103 -sn``` nmap 使用-sn的时候如果是在本网段的网络会发送arp包,如果不是在本网段会发送icmp的数据包,但由于nmap使用了大量不同的技术手段去探测目标,所以还会发送tcp的数据包。 1
2
3
4
3. fping :比ping的命令强大一点
- ```fping 192.168.1.103 -c 10-g 192.168.1.1 192.168.1.103 -c 10``` fping 与ping命令不同的是将一个ip段进行扫描,也可以使用0/24扫描,只显示ip的话可以使用管道进行分割 1
2
3
4
5
6
7
8
9
10
11
12
13- ```fping -f iplist.txt``` 调用ip列表文件
4. hping :
- 能发送几乎任意TCO/IP的数据包,在一定程度上可以进行压力测试
- 功能强大,但每次只能扫描一个目标
- ```hping3 192.168.1.103 --icmp -c 2``` 也可以进行三层扫描
- 也可以使用一行的方式实现一个ip段的扫描,因为显示的内容太多,所以将扫描结果保存到一个TXT文件中
```for addr in $(seq 1 254);do hping3 192.168.1.$addr --icmp -c 1 >> hping.txt & done