Django 项目实战 —— CMDB自动化资产扫描

项目实战: CMDB自动化资产扫描

目录

项目实战: CMDB自动化资产扫描

Django项目搭建

django项目创建cmdb

配置项目数据库为mysql

Django工程多配置文件

资产管理

主机存活探测模块和工具——Nmap探测工具

Python的SSH登录模块paramiko

测试



Django项目搭建

django项目创建cmdb

  • 子应用的创建scanhost
python manage.py startapp scanhost
  •  设置本地化(语言,时区, 安装的应用)
# cmdb/settings.py
INSTALLED_APPS = [
# ......省略已有的应用
'scanhost', # 激活创建的app
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
  • 应用数据库并创建超级用户
python manage.py migrate
python manage.py createsuperuser
  • 启动项目浏览器访问测试一下
python manage.py runserver
  • 测试

https://127.0.0.1:8000

https://127.0.0.1:8000/admin

项目代码的管理(requirements.txt, .gittignore文件和README.md文件)

pip freeze > requirements.txt

 

  •  git的管理
$ git init
$ git add *
$ git commit -m "django project init"
$ git remote add origin 远程仓库的网址
$ git push
  • 本地pycharm配置远程部署信息

Django 项目实战 —— CMDB自动化资产扫描_第1张图片

Django 项目实战 —— CMDB自动化资产扫描_第2张图片

Django 项目实战 —— CMDB自动化资产扫描_第3张图片

Django 项目实战 —— CMDB自动化资产扫描_第4张图片

Django 项目实战 —— CMDB自动化资产扫描_第5张图片

  • 远程服务器安装虚拟环境
yum install python3 -y
pip3 install virtualenv
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
pip install -r requirements.txt
  • 配置pycharm的解释器为远程服务器解释器

Django 项目实战 —— CMDB自动化资产扫描_第6张图片

Django 项目实战 —— CMDB自动化资产扫描_第7张图片

 


配置项目数据库为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.63.130
yum install mariadb-devel.x86_64 -y
yum install python3-devel -y
pip3 install mysqlclient
  • 预先配置

修改settings配置信息

关闭远程服务器防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
  • 配置settings.py:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'cmdb',  # 数据库名称
        'USER': 'cmdb',  # 用户名
        'PASSWORD': 'cmdb',  # 用户密码
        'HOST': '8.141.57.46',  # 数据库服务器所在主机名
        'PORT': '3306',  # 数据库端口
}
}

关于数据库的配置结束。


 

  • 数据库报错处理

运行项目时,出现报错如下,是因为缺少mysqlclient安装包.

Django 项目实战 —— CMDB自动化资产扫描_第8张图片

  • 解决方法:
pip install mysqlclient
  • 安装失败,报错如下是缺少开发包的缘故。

解决方法:

yum install mariab-devel -y
yum install python-devel -y
  • 项目开发步骤

创建Django工程

创建Django APP应用

python manage.py startapp scanhosts
  • 数据库模型建模models

详细代码请访问:该gitee的仓库  :https://gitee.com/mr-xun/cmdb

  • 安装数据库开发软件
yum install mariadb-devel -y
  • 安装数据库连接模块(必须先安装mariadb-devel, 否则会报错)
pip install mysqlclient
  • 编辑数据库模型文件

根据ORM(对象关系映射)将面向对象形式的模型进行迁移, 生成中间代码

python manage.py makemigrations

将生成的迁移文件转成SQL语句并执行SQL语句, 创建对应的数据库及数据库表

 python manage.py migrate

Django后台管理界面 创建后台管理的超级用户

python manage.py createsuperuser

访问项目后台管理界面, 输入超级用户名称和密码即可进入后台界面.

 


Django工程多配置文件

Django 项目实战 —— CMDB自动化资产扫描_第9张图片

base.py文件: 基本的配置文件,将原先seetings.py文件的内容拷贝进来.(参考第一个scanhost项目)

  • 配置相关

配置数据库

配置时区和语言

# 主要代码

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = False
  • dev.py文件: 开发环境的配置文件
from .base import  *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
  • prod.py文件:生产环境的配置文件:
from .base import  *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'cmdb',
        # 'USER': 'devops',
        # 'PASSWORD': 'devopspassword',
        # 'HOST': '127.0.0.1',
        'USER': 'cmdb',
        'PASSWORD': 'cmdb',
        'HOST': '8.141.57.46',
        'PORT': '3306',
    }
}
DEBUG = False  # debug调试在生产环境一定要关闭
# ALLOWED_HOSTS = ['192.168.0.0/16']  # 允许访问服务器的客户端网段信息
ALLOWED_HOSTS = ['*']  # 允许访问服务器的客户端网段信息
  • 修改__init__.py文件, 默认寻找的设置文件是当前项目中的settings文件, 如果是开发环境, 修改如下:
import os

# env = os.environ.get('PROJECT_ENV', 'dev')
env = os.environ.get('PROJECT_ENV', 'prod')
if env == 'dev':
    from .dev import *
elif env == 'prod':
    from .prod import *
else:
    from .dev import *

如果项目将来需要上线, 修改启动项目访问的配置文件为生产环境的配置文件即可

 


资产管理

  • 资产管理探测流程

Django 项目实战 —— CMDB自动化资产扫描_第10张图片

 

  • 存活探测: 获取局域网内存活的IP列表
  • 主机探测: 获取系统版本(SN、版本、MAC地址)
  • 主机关系探测: 识别宿主主机和虚拟机的关系
  • 网络设备的探测: 探测网络设备信息(SN、设备名等),使用snmp协议
  • 其他设备的探测:

Django 项目实战 —— CMDB自动化资产扫描_第11张图片

 


主机存活探测模块和工具——Nmap探测工具

Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。是一款用于网络发现和安 全审计的网络安全工具。

主机发现 - 识别网络上的主机。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。

# 使用-sP开关(Arp ping)执行PING命令,与windows / linux ping命令类似。
$ ping -c1 -w1 172.25.254.197

# 探测主机IP是否存活, &>/dev/null并将所有的输入重定向到垃圾箱
# && 如果前面的指令执行成功, 做什么操作(echo ok)
# || 如果前面的指令执行失败, 做什么操作(echo fail)

$ ping -c1 -w1 172.25.254.250 &>/dev/null && echo ok || echo fail
# 使用nmap命令, 如果报错-bash: nmap: command not found, 则yum 安装nmap安装包
$ nmap -n -sP 172.25.254.197
$ nmap -n -sP 172.25.254.0/24
  • 端口扫描 - 枚举目标主机上的开放端口。
# Nmap默认端口的扫描范围1-10000
$ nmap -n -p 172.25.254.197

# 具体指定要扫描的端口为50-80
$ nmap -n -p50-80 172.25.254.197

# 具体指定要扫描的端口为22和80
$ nmap -n -p22,80 172.25.254.197
  • 版本检测 - 询问远程设备上的网络服务以确定应用程序名称和版本号。
  • OS检测 - 确定网络设备的操作系统和硬件特性。
# -O是检测操作系统交换机
$ nmap -O 172.25.254.197
  • Nmap的Python操作接口: python-nmap

python-nmap是一个使用nmap进行端口扫描的python库,它可以很轻易的生成nmap扫描报告,并且 可以帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。

# 安装nmap的第三方模块
$ pip install python-nmap

 


Python的SSH登录模块paramiko

  • 如何安装paramiko?
# 使用豆瓣的镜像源, 安装paramiko模块并指定安装版本为2.6.0.
$ pip install -i https://pypi.douban.com/simple paramiko==2.6.0
  • 项目代码: 基于paramiko实现ssh客户端密钥远程登录

测试之前生成公钥和私钥进行测试:

# 生成公钥和私钥, 默认存储在 ~/.ssh/目录下. id_rsa私钥, id_rsa.pub公钥
ssh-keygen

# 希望我的主机可以无密码连接其他主机(需要将公钥分发给其他主机)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@ip

# 测试无密码连接是否成功
ssh user@ip
ssh -i 私钥位置 user@ip

pyhon‘代码实现公钥和私钥的无密码连接

系统信息获取

通过系统获取哪些信息

Django 项目实战 —— CMDB自动化资产扫描_第12张图片

  • Django数据库模型设计

apps/scanhost/models.py

详细代码请访问:该gitee的仓库  :https://gitee.com/mr-xun/cmdb

  • models.py文件做了修改一定要生成迁移脚本并写入数据库中
python manage.py makemigrations
python manage.py migrate
# 创建超级用户用于后台登录
python manage.py createsuperuser
  • 配置文件配置
STATIC_URL = '/static/'
scanhosts = [
    # '127.0.0.1',
    # '172.25.254.0/24',
    # '192.168.43.0/24'
    '8.141.57.46']
commands = {
    'hostname': 'hostname',
    'os_type': 'uname',
    'os_distribution': 'dmidecode  -s  system-manufacturer',
    'os_release': 'cat /etc/centos-release',
    'MAC': 'cat /sys/class/net/`[^vtlsb]`*/address',
}
  • 视图函数

apps/scanhost/views.py

详细代码请访问:该gitee的仓库  :https://gitee.com/mr-xun/cmdb

  • 路由配置

cmdb/urls.py

详细代码请访问:该gitee的仓库  :https://gitee.com/mr-xun/cmdb

  • 后台Admin管理

apps/scanhost/admin.py

详细代码请访问:该gitee的仓库  :https://gitee.com/mr-xun/cmdb

 

 


测试

运行项目python manage.py runserver 0.0.0.0:800

访问网址http://ip:port/admin

  • 注意点:
# cmdb/settings/prod.py
# DEBUG 是False 是,css等样式表会丢失,DEBUG 是True 时,css就会生效

DEBUG = True 

 

  • 运行远程服务器项目

Django 项目实战 —— CMDB自动化资产扫描_第13张图片

Django 项目实战 —— CMDB自动化资产扫描_第14张图片

Django 项目实战 —— CMDB自动化资产扫描_第15张图片

 

注:

CMDB补充学习资料: https://www.liujiangblog.com/course/django/121

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Django,框架,python,django)