基于UDP的活跃主机发现技术
Kubrnete 608 4

UDP的基础概念

UDP全称是用户数据协议,在网络中它与TCP一样用于处理数据包,是一种无法连接的协议。在OSI模型中位于第4层——传输层,处于IP的上一层。

但基于UDP的或与主机发现技术和TCP不同,UDP没有三次握手。当想主机发送以个UDP数据包之后,目标是不会发出任何UDP数据包的。

不过,如果目标主机是处于活跃状态的,但是目标端口是关闭的时候,可以返回一个ICMP数据包,这个数据包的含义为:“unreachable”, 基于UDP的活跃主机发现技术 如果目标主机不处于活跃状态,这时收不到任何回应的。 基于UDP的活跃主机发现技术 接下来构造一个发往192.168.43.1的445端口的UDP数据包并将其发送出去。

data = IP(dst="192.168.43.1") / UDP(dport=445)
ans, unans = sr(data)
ans.summary()

运行结果: 基于UDP的活跃主机发现技术 这里是有回应的,就证明目标是处于活跃状态的,但是我们仔细看返回的包。

IP / UDP 192.168.43.156:domain > 192.168.43.1:microsoft_ds ==> IP / ICMP 192.168.43.1 > 192.168.43.156 dest-unreach port-unreachable / IPerror / UDPerror

其中有“port-unreachable”关键字样,而且返回的是ICMP类型的数据包,这就验证了目标端口是关闭的时候返回“unreachable”。

UDP探测目标是否存活

接下来我们可以按照我们前面的ICMP,ARP,TCP的写法进行编写UDP的探测工具。

from scapy.all import *

data = IP(dst="192.168.43.1") / UDP(dport=445)
ans, unans = sr(data, timeout=3)
if unans:
    print("[*] 目标处于非活跃状态!")
for s, r in ans:
    ip_s = s[IP].dst
    ip_r = r[IP].src
    if ip_s == ip_r:
        print("[*] 目标%s" % ip_s)
        print("[*] 存活!")

运行结果: 基于UDP的活跃主机发现技术 学习了这么多探测目标主机是否存活的文章,相信大家已经对此非常熟练了。

评论区

索引目录