udp发现要注意选择一个不常用的端口,如果目标ip在up时目标端口是开放状态,那么不管目标ip是否为up状态,都不会收到任何回应,只有在目标ip为down状态且目标端口为关闭状态,才会返回一个目标不可达的icmp数据包。
为了理解UDP发现的过程,还是使用scapy进行手动发包。
先定义好UDP数据包结构:
定义及发送:
在图中可以看到icmp端口不可达的信息,这足以证明目标ip是up状态。
同样,为了实现一个网段的自动扫描,可以使用python脚本的方式:
1 #!/usr/bin/python 2 from scapy.all import * 3 4 if len(sys.argv) != 2: 5 print "this script need a arg" 6 sys.exit() 7 8 address = str(sys.argv[1]) 9 prefix = address.split(".")[0] + "." + address.split(".")[1] + "." + address.split(".")[2] + "." 10 11 for addr in range(100, 254): 12 response = sr1(IP(dst = prefix + str(addr)) / UDP(dport = 45454), timeout = 0.1,verbose = 0) 13 try: 14 if int(response[IP].proto) == 1: 15 print prefix + str(addr) 16 except: 17 pass