目录
项目实战: CMDB自动化资产扫描
Django项目搭建
django项目创建cmdb
配置项目数据库为mysql
Django工程多配置文件
资产管理
主机存活探测模块和工具——Nmap探测工具
Python的SSH登录模块paramiko
测试
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 init
$ git add *
$ git commit -m "django project init"
$ git remote add origin 远程仓库的网址
$ git push
yum install python3 -y
pip3 install virtualenv
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
pip install -r requirements.txt
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
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cmdb', # 数据库名称
'USER': 'cmdb', # 用户名
'PASSWORD': 'cmdb', # 用户密码
'HOST': '8.141.57.46', # 数据库服务器所在主机名
'PORT': '3306', # 数据库端口
}
}
关于数据库的配置结束。
运行项目时,出现报错如下,是因为缺少mysqlclient安装包.
pip install mysqlclient
解决方法:
yum install mariab-devel -y
yum install python-devel -y
创建Django工程
创建Django APP应用
python manage.py startapp scanhosts
详细代码请访问:该gitee的仓库 :https://gitee.com/mr-xun/cmdb
yum install mariadb-devel -y
pip install mysqlclient
根据ORM(对象关系映射)将面向对象形式的模型进行迁移, 生成中间代码
python manage.py makemigrations
将生成的迁移文件转成SQL语句并执行SQL语句, 创建对应的数据库及数据库表
python manage.py migrate
Django后台管理界面 创建后台管理的超级用户
python manage.py createsuperuser
访问项目后台管理界面, 输入超级用户名称和密码即可进入后台界面.
base.py文件: 基本的配置文件,将原先seetings.py文件的内容拷贝进来.(参考第一个scanhost项目)
配置数据库
配置时区和语言
# 主要代码
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
from .base import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
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 = ['*'] # 允许访问服务器的客户端网段信息
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 *
如果项目将来需要上线, 修改启动项目访问的配置文件为生产环境的配置文件即可
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
# -O是检测操作系统交换机
$ nmap -O 172.25.254.197
python-nmap是一个使用nmap进行端口扫描的python库,它可以很轻易的生成nmap扫描报告,并且 可以帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。
# 安装nmap的第三方模块
$ pip install python-nmap
# 使用豆瓣的镜像源, 安装paramiko模块并指定安装版本为2.6.0.
$ pip install -i https://pypi.douban.com/simple paramiko==2.6.0
测试之前生成公钥和私钥进行测试:
# 生成公钥和私钥, 默认存储在 ~/.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‘代码实现公钥和私钥的无密码连接
系统信息获取
通过系统获取哪些信息
apps/scanhost/models.py
详细代码请访问:该gitee的仓库 :https://gitee.com/mr-xun/cmdb
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
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
注:
CMDB补充学习资料: https://www.liujiangblog.com/course/django/121