主机存活检测脚本

原理演示

在命令行下用下面命令安装scap模块:

python -m pip install scapy

scapy与scrapy 有非常大的区别。
scapy 是一个Python 的第三方模块,被称为“网络神器”。scapy 模块能够发送、捕获、分析和铸造网络数据

sr1发送接收函数

如图,安装成功,并加载成功:

主机存活检测脚本_第1张图片

用pkt设置源IP和目标IP,协议为TCP

pkt=IP(src="10.9.75.238",dst="10.9.75.2")/TCP()

然后用sr1发送接收函数探测主机IP是否存活,超时时间设置为5秒:

 res=sr1(pkt,timeout=5)

如下图,接收到1035个数据包,但是没有得到目标主机的回应,这是因为sr1函数在发送数据包的时候会一直处于监听状态,收到的1035个数据包是该局域网所有主机的数据包:

主机存活检测脚本_第2张图片

使用ICMP协议进行主机探测,并查看该pkt的配置:

pkt=IP(src="10.9.75.238",dst="10.9.75.2")/ICMP()

查看pkt的配置:

pkt.show()

如图,源IP和目标IP分别是10.9.75.238和10.9.75.2,ICMP的类型是request请求包:
主机存活检测脚本_第3张图片

发包后依然没有回应包,说明该主机没有存活:

主机存活检测脚本_第4张图片

脚本编写

verbose= False:隐藏发包过程,上述的点

from scapy.all import *和from scapy.layers.inet import *:载入IP()和ICMP()函数需要的包

import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR):这两个模块可以隐藏warning报错信息,设置只显示最高级的报错ERROR

from termcolor import colored:该模块可以提供文本变色的效果

print(colored(f"\n{ip} is ALINE",“green”))将存活的主机IP颜色变为绿色

ip=f"{netmask}{i}"将10.9.75.与for循环遍历的i拼接

from scapy.all import *
from scapy.layers.inet import *
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from termcolor import colored

netmask="10.9.75."
src="10.9.75.45"
for i in range(1,12):
    ip=f"{netmask}{i}"

    pkt=IP(src=src,dst= ip)/ICMP()
    res = sr1(pkt,timeout= 1,verbose= False)

    if res and res.type == 0:
        print(colored(f"\n{ip} is ALTVE","green"))
    else:
        print(f"\r{ip} is NOT ALTVE")

结果如下,遍历11次,探测出两个存活IP:

主机存活检测脚本_第5张图片

如果将最后一句改为

 print(f"\r{ip} is NOT ALTVE",end="")

输出结果就会原地输出,后面的输出会覆盖前面的,直到输出存活IP:

主机存活检测脚本_第6张图片

你可能感兴趣的:(网络安全,Python,php,网络,开发语言)