开发UDP主机发现工具
嗅探工具的主要目标是基于UDP发现目标网络中的存活主机。攻击者需要了解网络中所有潜在的目标便于开展侦察和漏洞攻击尝试。
当你发送一个UDP数据包到主机的某个关闭的UDP端口上时,目标主机通常会返回一个ICMP包指示目标端口不可达。这样其实就说明了这个ip是存活的,因为ip是不存在的话,是不会有任何响应的。
接下来还有一点要注意,我们必须选择到一个未被使用的UDP端口才行,因为发送到活动端口也不一定会有响应回复给你,为了达到覆盖的范围,我们可以探查多个端口的响应情况,避免正好将数据发送到活动的UDP服务上。
为啥用UDP?因为UDP很简单,不用分析各种上层协议,就发送+等待。
Windows和Linux上的包嗅探
示例代码:
1 | import socket |
以上代码只是抓一个包,windows可以抓到发送包,而运行在linux上的话,只能抓到ICMP包。
解码IP层
我们接下来要解析一下ip层的报文结构
我们要解析全部IP头,提取其中的协议类型,源IP地址和目的IP地址。
Python中ctypes模块创建类似于C的结构体,我们可以用这种方式对头部成分进行定义。
IP头部在c语言中的定义:
1 | struct ip { |
我们将上面c代码带入到上面python代码中(sniffer_ip_header_decode.py):
1 | # -*- coding: UTF-8 -*- |
1 | # -*- coding: UTF-8 -*- |
计算IP头部长度,直接用报文中的头部长度 乘以 4 个字节。
接下来,我们再把扫描模块给写完:
1 | # -*- coding: UTF-8 -*- |
-----本文结束感谢您的阅读-----