基于Django的CMDB自动化资产扫描
文章目录
- 前言
- 一、本地Django项目搭建
- 二、虚拟机的安装(windows环境下)
- 三、在pycharm中远程部署
- 1.克隆项目到远程主机
- 2.本地pycharm配置远程部署信息
- 3.远程代码调试
- 远程服务器安装虚拟环境
- 配置pycharm的解释器为远程服务器解释器
- 运行远程服务器项目
- 看到如下页面表示部署成功
- 4.配置项目数据库为mysql
- 安装mysql
- 修改settings配置信息
- 关闭远程服务器防火墙和selinux
- 四、远程主机资产管理探测
- 1.主机存活探测
- 2.SSH端口存活扫描
- 3.主机登录探测
- 基于paramiko实现ssh客户端密码远程登录
- 基于paramiko实现ssh客户端密钥远程登录
- 五、远程系统信息获取
- 1.数据库模型设计
- 2.配置文件更改
- 3.视图函数更改
- 4.路由配置与后台admin管理
- gitee项目地址:[https://gitee.com/lrl-debug/cmdb](https://www.csdn.net/).
前言
本项目主要目标是为了实现通过本地的pycharm实现在远程服务器上搭建项目并能够进行远程调试,同时实现主机存活探测、SSH端口存活扫描、主机登录探测等资产管理探测任务
一、本地Django项目搭建
1、创建本地Django项目cmdb2、创建子应用scanhost
python manage.py startapp scanhost3、设置本地化(语言,时区, 安装的应用)
# cmdb/settings.py
INSTALLED_APPS = [
# ......省略已有的应用
'scanhost', # 激活创建的app
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False4、应用数据库并创建超级用户
python manage.py migrate
python manage.py createsuperuser5、启动项目浏览器访问测试
python manage.py runserver
访问:
https://127.0.0.1:8000
https://127.0.0.1:8000/admin6、项目代码的管理(requirements.txt, .gitignore文件和README.md文件)
(1)pip freeze > requirements.txt %生成基本环境配置信息
(2)利用ignore插件生成.ignore文件
(3)编辑README.md文件7、git的管理
git init %初始化本地仓库
git add * %添加所有更改到本地仓库
git commit -m "django project init" %提交更改到本地仓库
git remote add origin 远程仓库的网址 %和远程仓库进行关联
git push %提交到远程仓库
二、虚拟机的安装(windows环境下)
安装vmware并创建新的虚拟机(需要提前下载好iso镜像):
三、在pycharm中远程部署
1.克隆项目到远程主机
git clone project_url %git clone项目到远程主机
2.本地pycharm配置远程部署信息
进入pycharm进行图形化设置:
3.远程代码调试
远程服务器安装虚拟环境
注意:执行下述指令前要现在远程服务器上配置好软件仓库(可以指定阿里源)
yum install python3 -y
pip3 install virtualenv
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate %激活虚拟环境
pip install -r requirements.txt
配置pycharm的解释器为远程服务器解释器
运行远程服务器项目
看到如下页面表示部署成功
4.配置项目数据库为mysql
安装mysql
yum install mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql
> create database cmdb default charset='utf8';
> create user cmdb@'%' identified by "cmdb";
> grant all on cmdb.* to cmdb@'%';
mysql_secure_installation
mysql -ucmdb -pcmdb -h192.168.42.130 %测试是否配置成功
yum install mariadb-devel.x86_64 -y
yum install python3-devel -y
pip3 install mysqlclient
修改settings配置信息
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'cmdb','USER': 'cmdb','PASSWORD': 'cmdb','HOST': '192.168.42.130','PORT': '3306',}
}
关闭远程服务器防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
四、远程主机资产管理探测
1.主机存活探测
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。是一款用于网络发现和安
全审计的网络安全工具。
Nmap的Python操作接口: python-nmap
python-nmap是一个使用nmap进行端口扫描的python库,它可以很轻易的生成nmap扫描报告,并且
可以帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。
注意:需要在远程主机上yum install nmap安装nmap软件,并且pip install python-nmap安装python-nmap模块(需要安装的时nmap软件和python-nmap模块,因此不能用pip安装nmap)
测试代码如下:
import nmap
def scan_active_hosts(subnet):# 实例化对象, portScanner()类用于实现对指定主机进行端口扫描nm = nmap.PortScanner()# 以指定方式扫描指定主机或网段的指定端口result = nm.scan(hosts=subnet, arguments='-n -sP')# print("扫描结果: ", result)# 返回的扫描具体的nmap命令行# print("nmap命令行: ", nm.command_line())# 返回nmap扫描的主机清单,格式为列表类型 print("主机清单: ", nm.all_hosts())# 查看指定主机信息# print('172.25.254.197的主机信息: ', nm['172.25.254.197'])return nm.all_hosts()
if __name__ == '__main__':hosts = scan_active_hosts('192.168.42.0/24')print(hosts)
2.SSH端口存活扫描
使用telnet命令探测主机列表是否属于Linux服务器
测试代码如下:
import telnetlib
import re
def is_ssh_open(ip):"""判断ssh的22端口是否打开"""try:# 实例化对象tn = telnetlib.Telnet(host=ip, port=22, timeout=5)# read_until读取直到遇到了换行符或超时秒数。默认返回bytes类型,通过decode方法解码为字符 串。tn_result = tn.read_until(b"\n", timeout=5).decode('utf-8').lower()except Exception as e:tn_result = ''return True if re.findall('ssh', tn_result) else Falseif __name__ == '__main__':for host in hosts:if is_ssh_open(host):print(f'{host}的22端口打开')
3.主机登录探测
SSH常用来远程登录到远程机器,有两种常用的方法:
第一种便是账号密码登录。
第二种就是公钥私钥无密码登录。
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操
作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远
程服务器的连接。
指定豆瓣源安装该模块:pip install -i https://pypi.douban.com/simple paramiko
基于paramiko实现ssh客户端密码远程登录
测试代码如下:
import paramiko
def login_ssh(host, user, passwd=None, pkey=None, cmd='hostname'):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(host, 22, user, passwd)stdin, stdout, stderr = client.exec_command(cmd)return stdout.read().decode('utf-8')if __name__ == '__main__':res = login_ssh('server1', 'root', 'westos', cmd='free -m')print(res)
基于paramiko实现ssh客户端密钥远程登录
注意:要提前在远程服务器中做好生成密钥并做好本地的免密连接;要将私钥放置在指定项目目录下
测试代码如下:
import paramiko
def login_ssh(host, user, passwd=None, pkey=None, cmd='hostname'):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())if pkey:private = paramiko.RSAKey.from_private_key_file(pkey)client.connect(host, 22, user, pkey=private)if passwd:client.connect(host, 22, user, passwd)stdin, stdout, stderr = client.exec_command(cmd)return stdout.read().decode('utf-8')if __name__ == '__main__':pkey = '/root/cmdb/scanhost/id_rsa'res = login_ssh('server1', 'root', pkey=pkey, cmd='free -m')print(res)
五、远程系统信息获取
1.数据库模型设计
from django.db import models# Create your models here.
class Server(models.Model):"""服务器设备"""sub_asset_type_choice = ((0, 'PC服务器'),(1, '刀片机'),(2, '小型机'),)created_by_choice = (('auto', '自动添加'),('manual', '手工录入'),)sub_asset_type = models.SmallIntegerField(choices=sub_asset_type_choice, default=0, verbose_name="服务器类型")created_by = models.CharField(choices=created_by_choice, max_length=32, default='auto', verbose_name="添加方式")IP = models.CharField('IP地址', max_length=30, default='')MAC = models.CharField('Mac地址', max_length=200, default='')model = models.CharField(max_length=128, null=True, blank=True, verbose_name='服务器型号')hostname = models.CharField(max_length=128, null=True, blank=True, verbose_name="主机名")os_type = models.CharField('操作系统类型', max_length=64, blank=True, null=True)os_distribution = models.CharField('发行商', max_length=64, blank=True, null=True)os_release = models.CharField('操作系统版本', max_length=64, blank=True, null=True)def __str__(self):return '%s-%s' % (self.id, self.hostname)class Meta:verbose_name = '服务器'verbose_name_plural = "服务器"
注意:更改数据库模型后一定要记得生成迁移脚本并写入数据库
2.配置文件更改
scanhosts = ['192.168.42.0/24']
commands = {'hostname': 'hostname','os_type': 'uname','os_distribution': 'dmidecode -s system-manufacturer','os_release': 'cat /etc/redhat-release','MAC': 'cat /sys/class/net/`[^vtlsb]`*/address',
}
3.视图函数更改
from cmdb.settings import *
from utils import *
from models import Server# 定时任务,定时扫描
def scan_hosts():# 访问所有要扫描的网段/IPfor host in scanhosts:print("正在扫描%s......" %(host))# 获取所有可以ping通的主机IPactive_hosts = scan_active_hosts(host)# 一次遍历判断ssh服务是否开启for active_host in active_hosts:if is_ssh_open(active_host):server = Server()# 设置IP地址server.IP = active_host# 执行指令for attr, command in commands.items():# attr ='hostname' , command = 'hostname'# 存储主机名、操作系统.....指令执行的结果result = login_ssh(active_host, 'root', 'westos', cmd =command)setattr(server, attr, result)server.save()
4.路由配置与后台admin管理
路由配置:
urlpatterns = [path('admin/', admin.site.urls),
]后台管理:
from scanhost.models import Server
admin.site.register(Server)
配置好远程运行项目测试页面如下所示:
gitee项目地址:https://gitee.com/lrl-debug/cmdb.
基于Django的CMDB自动化资产扫描相关推荐
- Django项目实战:CMDB资产扫描和DevOPS自动化运维
文章目录 项目实战:CMDB自动化资产扫描和自动化运维 1.项目介绍 2.项目技术分析 运维自动化难点和痛点 项目技术难点 整体工程设计 3.项目环境搭建 项目环境要求 项目环境的搭建 项目目录的配置 ...
- Python+Django+Ansible Playbook自动化运维项目实战(二)
Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...
- Python+Django+Ansible Playbook自动化运维项目实战:资产管理
Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...
- 企业安全建设之自动化代码扫描(代码审计)
一.代码扫描的目标 网上关于代码扫描的介绍无一不是在推荐基于语法语义分析的代码扫描工具,典型的代表就是fortify.Checkmarx.总结起来观点无非是, 目前市面上有基于正则表达式和基于语义分析 ...
- 基于Django实现Linux运维管理平台的整个实现过程和各种API接口调用以及Echarts绘图项目介绍(一)记录点滴生活
基于Django实现Linux运维管理平台整个实现过程和各种API接口调用以及Echarts绘图的使用介绍 项目内容涉及技术直通车: 我的项目仓库:MyGitHub https://github.co ...
- 自动化漏洞扫描工具使用指南
作为企业的IT安全管理员,您的重要任务之一,一定离不开全面的漏洞管理.即,全方位地评估.报告和缓解企业内部技术栈中,存在的各项安全弱点和网络威胁.而面对此类繁杂复杂的工作时,我们往往需要借助自动化的漏 ...
- 基于django和vue的xdh官网设计
前言 本项目是使用三段分离的设计 前台 使用materialize框架搭建的前台页面,后端使用的django写的接口 后台 使用Amazon UI 模板搭建的界面,管理各个部分的内容 项目环境 pyt ...
- 4款基于Django框架的开源软件推荐
Django是一款高性能的Python web框架,鼓励快速开发和干净.务实的设计.Django项目是一个定制框架,它源自一个在线新闻Web站点,于2005年以开源的形式被释放出来.Django的重点 ...
- 基于Armitage的MSF自动化集成攻击实践
基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...
最新文章
- C#温故而知新学习系列之面向对象编程—构造函数(七)
- 从指定URL中提取文件名
- sprintf用法详解
- shell find命令 文件夹查询关键字 查询结果输出新文件
- The Breakpoint will not currently be hit. No executable code associated with this line
- 当synchronized遇上integer
- MAC编译OpenJDK8:error: ‘‘ within ‘||‘ [-Werror,-Wlogical-op-parentheses]
- 用java怎么实现多语言翻译_快速实现中文翻译多国语言
- AUTOCAD——坐标引线标注
- [R语言] R语言快速入门教程
- linux下设置定时器,linux定时器设置.
- 让debug apk可以发送给别人安装,并且解决通过微信发给别人apk名字被改为xx.apk.1 导致无法安装
- 高数 | 【重积分】线面积分880例题
- java使用jbarcode生成条形码
- SpringMVC的工作原理图
- 计算机网络并行传输和串行传输,并行传输和串行传输的区别是什么
- Object.assign()用法小结
- 20个高级java开发面试题(带答案)
- 数据库(Mysql)----mysql建表中的约束
- 总算 明白了晾衣杆的原理