在进行四层扫描前,会进行ARP询问,因此可以得知存活的主机,对于存活的主机进行对应的SYN、ACK等连接,完成端口扫描。因此下表表示的状况为针对所有目标主机为up的情况:
收 | 目标主机 | 目标端口 | 目标响应 | 作用 |
SYN | up | open | SYN/ACK | 主机发现,端口扫描 |
closed | RST/ACK | |||
down |
| ARP无应答 | ||
ACK | up | open | RST | 主机发现 |
closed | RST | |||
SYN/FIN,ACK | up | open | RST | 主机发现 |
closed | RST | |||
FIN | up | open | 无应答 | 主机发现,端口扫描 |
closed | RST/ACK | |||
无flags | up | open(Linux) | 无应答 | windows主机发现,在linux也可用作端口扫描,但是精度较低 |
close(linux) | RST/ACK | |||
open(windows) | RST/ACK | |||
closed(windows) | RST/ACK | |||
Xmas(URG、PSH、FIN置1) | up | open(Linux) | 无应答 | windows主机发现,在linux也可用作端口扫描,但是精度较低 |
close(linux) | RST/ACK | |||
open(windows) | RST/ACK | |||
closed(windows) | RST/ACK | |||
UDP | up | open | 无响应 | 选取基本不使用的端口,根据是否有端口不可达发现主机 |
closed | ICMP 端口不可达 |
关于arp扫描,除了nmap,scapy外,推荐两款单纯的二层扫描工具,arping和netdiscover
Arping(单次扫描,通过arp数据包)
(1)只能单次扫描;
(2)可以以指定的源IP扫描,源MAC,但是指定以后响应的包给发给自己指定的IP、MAC,自己本地无法收到响应的数据包;
通过arp请求检测网络中是否存在指定的主机;优点在于检测方可以任意的设计本机的IP、MAC,包括广播IP地址,可以限定目的MAC和IP;
- -0:指定源地址为0.0.0.0,这个一般是在我们刚刚安装好系统,电脑还没配置好IP的时候,是-S参数的别名
- -a:Audible ping.这个当有reply回来的时候,你的电脑有喇叭的话,就会滴滴的叫
- -A:Only count addresses matching requested address
- -b:类似-0,指定源broadcast为255.255.255.255
- -B:指定这个就相当于 arping 255.255.255.255
- -c count:发送指定数量的arp包后,即停止退出
- -d:这个比较重要,当局域网有IP占用的时候,可以指定这个参数,当有相同的IP的不同MAC地址reply的时候,arping会退出,退出码为1
-D:这个检测是否丢包的,当丢包的时候打印感叹号,正常的时候打印逗号 - -e:和-a相反,当没有reply的时候,会滴滴滴
- -p:打开混杂模式,当前用户对mac无权限时,可以加上这个选
- -r:输出的时候只打印MAC,写脚本的时候用得到,不用自己对结果awk了
- -R:输出的时候只打印IP,和上面一样
- -s MAC:指定源MAC地址
- -S IP:指定源IP,设置了源IP,如果目标主机没有到源IP的route,则有可能收不到answer
- -t MAC:指定目的MAC
- -T IP:指定目的IP,
- -i interface:指定发送arp包的设备。不指定的话,默认为系统的第一块网卡
- -q:表示不打印输出,写脚本不想打印输出的时候,应该用的到
- -u:没啥大用,结果显示的时候,加这个参数和不加,index的显示形式不同
- -v:打印详细的输出,默认打印的好像就是verbose
- -w deadline:指定两个ping直接的时间间隔,单位为毫秒,默认为1秒
通过shell脚本实现整个局域网的扫描:
#!/bin/bash
if [ "$#" -ne 1 ];then
echo "Usage ./arping.sh [interface]"
echo "Example: ./arping.sh eth0"
echo "Example will perform an ARP scan of the loal subnet to while eth0 is assigned"
exit
fi
interface=$1
prefix=$(ifconfig $interface | grep "inet" | grep "broadcast" | cut -d " " -f 10 | cut -d "." -f 1-3)
for addr in $(seq 1 254);do
arping -c 1 $prefix.$addr | grep "Unicast" | cut -d " " -f 4
done
Netdiscover(arp整个网段,可设置被动模式,通过arp请求)
特点
(1)能够指定为被动模式,即将本地网卡设为混杂模式;
(2)能够扫描整个网段,但是不能指定固定的IP区间;
- -i device:您的网络设备
- -r range:扫描给定范围而不是自动扫描。192.168.6.0/24,/16,/8
- -l file:扫描包含在给定文件中的范围列表
- -p被动模式:不发送任何东西,只有嗅探
- -F filter:自定义pcap过滤器表达式(默认值:“arp”)
- -s time:每个arp请求之间的睡眠时间(毫秒)
- -n node:用于扫描的最后一个ip八位字节(从2到253)
- -c count:发送每个arp请求的次数(对于丢包的网络)
- -f启用快速模式扫描,节省大量时间,建议用于自动
- -d忽略自动扫描和快速模式的主配置文件
- -S在每个请求之间启用睡眠时间抑制(硬核模式)
- -P打印产生适合其他程序解析的格式
- -L在可解析输出模式(-P)中,在主动扫描完成后继续侦听
- 如果未启用-r,-l或-p,netdiscover将扫描公共LAN地址。
#Netdiscover –i eth0 –r 192.168.43.0/24 –c 1