三层发现:发送ICMP/IP数据包探测;
优点:可路由,速度比较快
缺点:速度比二层慢,经常被边界防火墙过滤
协议:IP、icmp(二层发现主要是利用arp协议)
一、ping
第一种方式:就是很简单的Ping命令
root@kali:~# ping 10.14.4.132
不过linux的ping命令和windows的ping命令不一样,它会默认不停止地发数据包;
我们可以通过-c参数来设置;
二、traceroute
第二种方式:traceroute命令:
root@kali:~# traceroute www.cnblogs.com
这里会显示所有路由跳过的IP,***说明被防火墙阻挡了(通常防火墙默认阻挡ICMP数据包)。
实现原理是基于TTL值的改变;
我们发现基本无法获得有用的信息,所以这种方式不推荐。
Linux的ping命令还有参数-R可以设置:可以实现路由追踪;
接下来我们可以写一个脚本来做三层发现:
#!/bin/bash
if [ "$#" -ne 1 ];then
echo "Usage - ./ping [interface]"
echo "Excample - ./ping 192.168.1.0"
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 &
done
如果是从windows系统复制过来的脚本
注意:
vi ping
:set fileformat=unix
赋予执行权限:
chmod u+x ping
效果不错,找到了我局域网中存活的ip!
Scapy工具
接下来利用强大的Scapy工具:这种方式通常没有任何效果。
原因:防火墙阻挡ICMP数据包,这里基本不会有所发现。
脚本:pinger1.py
#!/usr/bin/python
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
if len( sys.argv ) !=2:
print "Usage - ./pingger.py [/24 network address]"
print "Example - ./pinger.py 172.16.36.0"
print "Example will perform an ICMP scan of the 192.168.1.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)
脚本:pinger2.py,扫描已存在文件中的ip
#!/usr/bin/python
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
if len( sys.argv ) !=2:
print "Usage - ./pingger.py [/24 network address]"
print "Example - ./pinger.py 172.16.36.0"
print "Example will perform an ICMP scan of the 192.168.1.0/24 range"
sys.exit()
filename = str(sys.argv[1])
file=open(filename,"r")
for addr in file:
answer=sr1(IP(dst=addr.strip())/ICMP(),timeout=0.1,verbose=0)
if answer ==None:
pass;
else:
print addr.strip()
三、nmap
第三种方式:Nmap(推荐,这个工具很强大)
nmap中-sn参数可以探测目标ip是否活着?
root@kali:~# nmap 10.14.4.129 -sn
四、fping
第四种方式:fping命令(ping命令的加强版)
可以对地址段Ping:
root@kali:~# fping -g 10.14.4.0/24
后边输出的是一堆unreachable的报告,原因是防火墙阻挡ICMP数据包:
五、hping
第五种方式:hping命令,hping命令很强大,这里只用其中一部分功能:
我分别给存在的ip和不存在的ip发送:结果不同
root@kali:~# hping3 10.14.4.146 --icmp -c 2
当然,也可以写成hping脚本!