Hello,各位小伙伴周末好~
Whatever,让我们一起看看今天的内容吧。
Part.1
二层探测说明
二层主机探测说明
信息收集的一个重要环节就是存活主机探测。
主机探测可以从二层、三层、四层去进行。
二层主机探测主要是发送arp报文,根据arp应答来发现与探测主机在同一网段的存活主机。
利用Arp进行主机探测的优点是速度快、可靠性高。缺点是只能探测到与探测主机在同一网段内的存活主机。
今天我们来利用scapy模块编写一个二层主机探测脚本。之前有写过一篇scapy模块的使用方法,今天的脚本需要在这篇文章的基础上进行编写。
忘记的小伙伴先去复习一下哦:
Part.2
脚本编写
需求说明
现在我们来通过python编写一个ARP扫描脚本,要求能够实现二层存活主机探测。
脚本需要能够传入参数:
模块引入
首先引入我们需要的模块,如下:
具体调用模块的什么功能,我们在后面用到的时候说明。
sweep()函数
首先我们来定义一个sweep()函数,来向指定IP地址发送ARP请求。
通过scapy模块,我们来定义以下arp报文:
使用srp1进行发包,仅接收1个应答报文,超时时间为1s,且不显示详细信息。
将收包结果赋值给result,通过if判断result是否有值,进而判断是否收到了响应。
如果收到响应,就判断主机存活,打印“IP online”
time.sleep(0.1)用于进行短暂停顿,避免多线程导致输出乱序。
最后再添加try/except异常处理功能,说明如下:
主函数main()
接下来我们来定义主函数main(),如下:
(1)首先通过optparse模块,通过选项向脚本传递所需的参数:
该部分代码如下:
说明如下:
(2)判断用户是否传参
判断filename和address参数是否同时为空:
如果同时为空则打印报错信息,报错后通过sys.exit()函数直接退出程序。
(3)通过 -f 文件名传参
代码如下:
(4)通过 -i IP地址传参
代码如下:
Part.3
脚本测试
脚本测试
接下来我们对脚本进行测试。
(1)查看帮助信息
输入 -h 查看帮助信息:
(2)不传入任何参数
当不传参时,脚本提示报错并退出:
(3)通过 -i 传入IP地址
成功探测到存活主机:
通过wireshark,可以抓到请求和应答报文:
(4)通过 -f 传入文件
创建ip.txt文件如下:
通过 -f 传入ip.txt,成功探测存活主机:
Part.4
结语
好啦,到此我们的代码就全部完成了。
涉及了大量python基础知识,没看明白的小伙伴,可以针对不明白的函数在百度查询获取解答哦。
最后附上完整代码:
Peace!