乐趣区

四层发现

发现的目的是扫描出可能存活的 IP 地址,四层发现虽然涉及端口扫描,但是并不对端口的状态进行识别,其本质是利用四层协议的一些通信来识别主机 ip 是否存在

TCP 探测

传统 TCP 连接是通过三次握手建立通信过程,然后可以向目标发送资源申请的请求,本机再发送 ack 进行确认,这是一种基于连接的可靠的通信协议。如果我们之前没有建立 TCP 连接,而是直接向目标发送 ack,这时目标服务器回想本机发送一个 RST 包进行拒绝,因此,当目标服务器拒绝时,便可以基于次探测目标主机是否存在了!也可以通过三次握手建立通信连接,通过发送的 SYN 包来确定目标主机是否在线。

UDP 探测

UDP 不同于 TCP,UDP 没有通过握手建立连接的过程,UDP 只是尽力而为而已,它是一种非连接的不可靠传输协议,因此基于 UDP 来探测主机,难度和发现的准确率都高于 TCP。同样是基于 UDP 的一些特征信息来探测。

如果目标 IP 不在线,那我们对其发送的 UDP 包不会有任何的回应,但假如目标 IP 在线,而且发送到 UDP 的目标端口处于开放状态,一般说来,这时目标主机接受到我的 UDP 包时也不会有任何回应,但有一种列外,即是目标端口没有开放时,会向我们发送一个 ICMP 不可达的包(但是到这里我们并不对其端口进行扫描)

Scapy 构造四层 TCP 探测数据包

将 TCP 包头的 flag 位设定为 ACK,然后发送给一个目标 / 端口,最后判断是否收到 RST 响应包,以此确定目标 IP 是否在线。无论是基于几层的探测扫描,得到结果也只不过是一种极大可能的参考,一切都可能不是真实的

先构造三层 ip 包,再构成四层 tcp,然后将三层 / 四层组合起来构成一个 TCP 包

root@:~# scapy
 
>>> i=IP()
>>> t=TCP()
>>> r=(i/t)
>>> r.display()
###[IP]### 
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= tcp
  chksum= None
  src= 127.0.0.1
  dst= 127.0.0.1
  \options\
###[TCP]### 
     sport= ftp_data
     dport= http
     seq= 0
     ack= 0
     dataofs= None
     reserved= 0
     flags= S
     window= 8192
     chksum= None
     urgptr= 0
     options= []
 
>>> r[IP].dst="192.168.1.1"
>>> r[IP].dst="19
>>> r[IP].dst="192.168.1.1"
>>> r[TCP].flags="A"
>>> r.display()
###[IP]### 
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= tcp
  chksum= None
  src= 192.168.0.108
  dst= 192.168.1.1
  \options\
###[TCP]### 
     sport= ftp_data
     dport= http
     seq= 0
     ack= 0
     dataofs= None
     reserved= 0
     flags= A
     window= 8192
     chksum= None
     urgptr= 0
     options= []
>>> 

发包:

a=sr1(r)

上述过程用一行命令实现:

a=sr1(IP(dst="192.168.0.1")/TCP(dport=80,flags="A"),timeout=1)

Scapy 构造四层 UDP 探测数据包

a=sr1(IP(dst="192.168.0.102")/UDP(dport=7345),timeout=1)

使用 nmap 进行四层发现

nmap 不仅可以用于端口扫描,还可以用于四层发现
参数 -PU:基于 UDP

nmap  -PU -sn 221.22.0.1-50

-PA:基于 TCP 的 ACK,-PS:基于 TCP 的 SYN

nmap -PA80 -sn 221.22.0.1-50

hping3

–udp:基于 UDP 模式

hping3 --udp -c 1 211.144.145.1


如果我选择一个内网中不存在的 IP,会显示端口不可达

基于这个提示,至少可以确定主机是存在的
不加参数 –udp,默认使用 TCP 模式,凡是 hping 发送的 tcp 所有的 flags 位都是 not set 的,即都是 0 的状态,它不同于 udp 的扫描,它通过返回的 ack+rst 包来判断主机存活

hping3 -c 1 211.144.145.1
退出移动版