版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 
之前博客的云主机到期了没续费,被删啦最重要的是没有备份!此处省略几个字。。。。。
       从这篇文章开始我的博客便开启了新的分类:NetDevops,希望在这里记录并分享我与网络及网络安全自动化运维平台的故事。原则是:有时间多撸代码,定期通过博客总结
本文主要记录通过Python实现获取用户基本信息(IP地址、客户端angent等信息),搞这个功能我是这样想的:运维平台的使用者主要有管理员、运维人员、普通用户,每当有用户登录或访问平台时我们记录该用户的基本信息并保存至数据库。或许将来我们针对自己的平台做审计功能时会用到这些数据。
言归正传,本次开发环境为:Python 3.7.4 、Django 2.2.4、Mysql 8.0.15、Docker 18.09.2 ;编译工具使用Pycharm;操作环境为Debian 4.19.0-kali5-amd64、VMware® Workstation 15 Pro

一、我们创建名为NetDevOps的Django工程

可以通过Pycharm创建也可以在终端通过命令创建,习惯CLI界面的我当然使用命令创建了命令如下:
  a.django-admin startproject NetDevops       #创建工程
  b.python manage.py startapp Users       #创建APP(需切换到工程目录下)
 

二、修改settings文件(连接数据库)

a.找见settings文件中有关DATABASES的配置,并将默认的连接方式sqllite3替换为mysql
 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'netdevops',
'USER': 'forgeek',
'PASSWORD': 'xxxxxx',
'HOST': '172.16.127.128',
'PORT': '',
'OPTIONS': {},
'init_command': 'SET storage_engine=INNODB,'
'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, autocommit=1, names "utf8";',
}
}
b.修改init文件
  Python3中无法通过pip直接安装mysqlclient,所以我们使用pymysql来代替它。通过pip安装好pymysql后我们要修改MySQLdb()的引擎,我们仅需要修改工程目录下init.py文件即可,添加如下代码:
  import pymysql
  pymysql.install_as_MySQLdb()

三、简单介绍一下本功能模型原理

用户通过浏览器输入地址访问平台--->urls路由转发--->接口获取信息--->view视图--->数据库--->view视图通过Httpresponse给浏览器
 

四、开始撸代码:

  • Mysql配置
# 创建mysql帐号(这里的帐号信息要与settings配置文件中连接数据库的配置信息保持一致)
mysql> alter user 'forgeek'@'%' identified with mysql_native_password by 'xxxx';
# 设置forgeek帐号密码永不过期
mysql> alter user 'forgeek'@'%' identified by 'xxxx' password expire never;
# 授权(这里由于测试环境我这边分配权限比较大,大家可以根据自己情况设置)
grant all privileges on *.* to 'forgeek'@'%';
# 刷新权限
mysql> flush privileges;
# 验证用户的创建是否成功
mysql>  select host,user,authentication_string from mysql.user;
# 创建名为netdevops的数据库
mysql> create database netdevops;
  • models模型类
      在我们创建的Users这个app中有个models.py文件,在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。通常,一个模型(model)映射到一个数据库表。

定义简介:

  • 每个模型都是一个python类,它是django.db.models.Model的子类
  • 模型的每个属性都代表一个数据库字段
  • 综上所述,Django为您提供了一个自动生成的数据库访问API,详细见官方文档

model与数据库结构对应关系图如下:

  这个小功能中我们需要建立两张表,一个保存用户信息另一个保存浏览器信息。考虑到一个用户可能会有多个浏览器,因此需要建立一个一对多的关系。我这里直接贴源码好了,有不懂的直接留言好了。

 # coding=utf-8
from django.db import models class UserIpInfo(models.Model):
ip = models.CharField(max_length=40, default='', verbose_name=u'IP地址', null=True)
time = models.DateTimeField(verbose_name=u'更新时间', auto_now=True) class Meta:
verbose_name = u"用户访问IP地址表"
verbose_name_plural = verbose_name
db_table = "useripinfo" class BrowseInfo(models.Model):
useragent = models.CharField(max_length=200, default='', verbose_name=u'用户浏览器信息', null=True)
models.CharField(max_length=256, verbose_name=u'设备唯一ID', default='')
user_ip = models.ForeignKey("UserIpInfo", on_delete=models.CASCADE) class Meta:
verbose_name = u"用户浏览器信息表"
verbose_name_plural = verbose_name
db_table = "browseinfo"
  • views视图
  Django 的视图层,主要是负责处理用户的请求并返回响应。视图函数只是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像或者其他什么。视图本身包含返回该响应所需的任意逻辑。只要在Python路径上,此代码就可以存在于您想要的任何地方。没有其他要求 - 没有“魔术”,可以这么说。为了将代码放在某处,惯例是将视图放在名为views.py的文件中,放在项目或应用程序目录中。
这里同样,我将整个源码贴出来。有问题就留言吧
 # from django.shortcuts import render
from django.http import HttpResponse
from .models import *
import json def user_ip_info(request):
# print('-----------------test/n', request.META)
ip_addr = request.META['REMOTE_ADDR']
user_ua = request.META['HTTP_USER_AGENT']
print(len(user_ua)) user_obj = UserIpInfo.objects.filter(ip=ip_addr)
if not user_obj:
res = UserIpInfo.objects.create(ip=ip_addr)
ip_addr_id = res.id
else:
ip_addr_id = user_obj[0].id BrowseInfo.objects.create(useragent=user_ua, user_ip=UserIpInfo.objects.get(id=ip_addr_id)) result = {
"状态": "Success!",
"信息": "User info",
"IP": ip_addr,
"浏览器": user_ua
} return HttpResponse(json.dumps(result), content_type="application/json", charset="utf-8") def user_infos(request):
ip_list = UserIpInfo.objects.all()
infos = {}
for item in ip_list:
infos[item.ip] = [b_obj.useragent for b_obj in BrowseInfo.objects.filter(user_ip_id=item.id)] result = {"状态": "Success!", "信息": infos} return HttpResponse(json.dumps(result), content_type="application/json", charset="utf-8")

  • urls路由转发
  对于高质量的Web 应用来说,使用简洁、优雅的URL 模式是一个非常值得重视的细节。Django 允许你自由地设计你的URL,不受框架束缚。
为了给一个应用设计URL,你需要创建一个Python 模块,通常被称为**URLconf**(URL configuration)。这个模块是纯粹的Python 代码,包含URL 模式(简单的正则表达式)到Python 函数(你的视图)的简单映射。映射可短可长,随便你。它可以引用其它的映射。而且,因为它是纯粹的Python 代码,它可以动态构造。
  Django 还提供根据当前语言翻译URL 的一种方法。更多信息参见 国际化文档

----------------该段落引用官方文档-------------------

https://docs.djangoproject.com/zh-hans/2.2/topics/http/urls/

 
我这里还是同样直接贴出源码,有问题留言即可。
 1、NetDevops项目中urls.py
 from django.urls import path
from . import views urlpatterns = [
path('send/', views.user_ip_info),
path('get/', views.user_infos), ]

2、User 应用中urls.py:
 from django.urls import path
from . import views urlpatterns = [
path('send/', views.user_ip_info),
path('get/', views.user_infos), ]

  由于我这里是通过JSON格式反馈到浏览器,所以没有些特殊的HTML文件,等后期其他功能再来完善本次项目的模板。
下面是这个功能的目录结构:

 
打开终端我们通过命令:
1、生成迁移文件: python3 manage.py makemigrations
2、进行迁移:python3 manage.py migrate
3、打开Djang自带调试web服务端:python3 manage.py runserver 0.0.0.0:80
 
最后就是打开浏览器测试了,前提是要确保你的和整个工程是连接好的。

 
 
 
 

【NetDevops】网络自动化运维--1获取用户基本信息的更多相关文章

  1. python网络自动化运维之环境搭建(EVE-NG+pycharm)

    参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...

  2. python网络自动化运维之telnetlib实验(EVE-NG+pycharm)

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.3 ...

  3. python网络自动化运维paramiko实验

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...

  4. Ansible_自动化运维《Ansible之初识-1》

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  5. 自动化运维工具——ansible详解(一)

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  6. 企业级自动化运维工具应用实战-ansible

    背景 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运 ...

  7. 项目实战10.1—企业级自动化运维工具应用实战-ansible

    实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...

  8. ansible自动化运维

    ansible 系统架构 ansible简介 ansible是新出现的自动化运维工具,ansible是一个配置管理和应用部署工具,基于Python开发,集合了众多运维工具(puppet.cfengin ...

  9. 自动化运维工具——ansile详解

    自动化运维工具——ansible详解(一) 目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ...

随机推荐

  1. Image Processing and Analysis_8_Edge Detection:Design of steerable filters for feature detection using canny-like criteria ——2004

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  2. PAT Basic 1050 螺旋矩阵 (25 分)

    本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...

  3. 系统---添加一个相机的IP实现opencv读取rstp视频流

    系统---添加一个相机的IP实现opencv读取视频流 这里: 第一步,添加一个6段的相机IP地址:先ping 一个IP地址,ping通的是再用的IP,不可添加:ping不通的,添加IP到网络. 第二 ...

  4. Window脚本学习笔记之BAT调用设置

    用一句bat脚本调用window的系统设置: rem 调用回收站 explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E} rem 检查Windows ...

  5. python 学习笔记_1 pip安装、卸载、更新包相关操作及数据类型学习

    '''prepare_1 pip安装.卸载.更新组件type 各数据类型''' py -3 -m pip py -3 -m pip listpy -3 -m pip show nosepy -3 -m ...

  6. js 获取扫码枪信息

    ---- js 获取扫码枪不需要记录 lastCode 啊,只需要在时间超出范围的时候重置 lastTime 和 code 就行了.如果 码枪会输入回车,那就在 keyCode === 13 的时候使 ...

  7. .npmrc 实用小技巧

    小技巧 因为每次执行 npm adduser 的时候都需要输入用户名.密码和email 很麻烦,我们都可以配置在.npmrc 文件中,在命令行中执行如下脚本 echo -n 'myuser:mypas ...

  8. springboot2.0入门(七)-- 自定义配置文件+xml配置文件引入

    一.加载自定义配置文件: 1.新建一个family.yam文件,将上application.yml对象复制进入family family: family-name: dad: name: levi a ...

  9. 16、生命周期-BeanPostProcessor原理

    16.生命周期-BeanPostProcessor原理 16.1 打断点运行postProcessBeforeInitialization 可以看到先执行的顺序为: applyBeanPostProc ...

  10. const int* p

    若纠结于const int* p,int const* p,int* const p这三个指针,可以看视频 https://www.icourse163.org/learn/BUPT-10035640 ...