用python编写主机存活检测脚本


一、检测原理

scapy模块

scapy是python的第三方模块,被称为”网络神器“。scapy模块能发送、捕获、分析和铸造网络数据包。检测原理是通过向目标主机发送数据包,查看是否有返回包,有则主机存活,无则主机不存活。

①安装

windows下安装scapy。

pip install scapy
python -m pip install scapy

安装成功后可在命令提示符中输入scapy进行使用

image-20230918202020579

②构造数据包

构造数据包基于两个协议:tcp/ip协议

构造数据包
pkt= IP(src="",dst="")/TCP()
或
pkt= IP(src="",dst="")/ICMP()
查看数据包内容
pkt.show()

image-20230918203046650

③发送数据包
res = 发送函数
发送数据包的函数说明
sr(pkt)发送数据包,接收所有返回包
sr1(pkt)发送数据包,接受一个返回包
send(pkt)发送数据包,不等待返回包
srp(pkt)发送2层数据包,等待回应
sendp(pkt)发送2层数据包,不等待返回包
实例
pkt =IP(src="10.9.75.143",dst="10.9.75.254")/TCP()	//构造数据包,由本机向254发包
pkt.show()		//查看数据包
res=sr1(pkt)	//发送数据包

image-20230919150227837

④ICMP消息类型和编码类型
Type类型Code编码描述
00
30/1/2/3网络/主机/协议/端口不可达
50重定向
80echo request

二、代码编写

"""
导包
"""
from scapy.layers.inet import *  # scapy相关模块
from scapy.all import *  # scapy相关模块
from sqlmap.thirdparty.termcolor.termcolor import colored  # 颜色模块
import logging  # 日志模块

"""
使用logging模块过滤除error外其他级别的日志消息
"""
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
"""
使用变量接收源ip,目的ip,目标网段,本机,起始,结束主机位
"""
netmask = input("请输入目标网段+. 例如10.9.75.\n")  # 定义网段,并由用户输入
src = input("请输入本机主机位\n")  # 定义本机主机位
src = f"{netmask}{src}"  # 定义源ip,由网段.本机主机位拼接
i = int(input("输入扫描起始主机位\n"))  # 定义起始主机位,由用户输入
j = int(input("输入扫描结束主机位\n"))  # 定义结束主机位,由用户输入
print(f"在主机范围{i}-{j}中,以下主机存活\n")  # 打印信息
j += 1  # 由于range函数左闭右开,所以j需要+1
"""
功能实现
"""
for i in range(i, j):  # 在range范围内循环
    dst = f"{netmask}{i}"  # 拼接目的ip
    if dst == src:  # 如果目的ip等于源ip则输出,并跳出本次循环
        print(f"{dst}为本机ip")
        continue

    pkt = IP(src=src, dst=dst) / ICMP()  # 构建数据包
    res = sr1(pkt, timeout=0.2, verbose=False)  # 发送数据包
    if res and res.type == 0:  # 如果类型为0,则主机存在
        print(colored(f"{dst}存在", "green"))
        # print(f"{dst}存在")
print("扫描结束\n")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值