初学Python-搞了一个linux用户登录监测小工具
这几天突发奇想,想学习一下Python。看了点基础,觉得有点枯燥,所以想搞点什么。想了想,就随便弄个检测Linux用户登录的小工具吧~
首先,明确一下功能:
1、能够捕获 linux 用户登录的信息。(这个很容易,方法比较多)
2、能够将捕捉的信息记录下来。(不然要这信息干嘛……)
3、最好能够一发现有人登陆,就给管理员发个邮件。(这个功能比较实用~)
4、没想好。(功能可以不断完善嘛)
嗯,那现在就要着手解决技术难点了(对我来说可能是难点吧,毕竟才看了几天书……)。
1、捕获linux登录信息。
这个可以去查日志啊,/var/log/ 目录下面日志很详细的。不过我选择使用linux的命令——lastlog。

这个命令输出的信息,比较易读,也比较好筛选。
Python 执行Linux命令可以用 os.popen() 这个函数。当然也有其他方法,不过我们需要捕获回显,所以os.popen()比较合适,这个函数会把回显以文件指针(不知道这说法对不……)的形式返回回来。如下所示:
lastLogList = os.popen('lastlog').readlines()。#这样就能得到命令输出的每一行
具体流程就是:每过一定的时间(我觉得60秒不错~毕竟不需要多么高的时效性),就查询一次登录记录,与程序备份的登录记录做对比,给出差异部分,这就是在60秒内登录的用户信息咯。然后再次备份登录信息等待下次查询。
2、记录信息。
这个比较随意啦。把捕获到的信息,直接追加方式写入文件就行。(不过在登录比较密集的系统上,要适当优化,或者定期清理。我懒得弄,就直接写了)。如下代码(就是写文件嘛):
f = open('test.log', 'a')
f.write(''.join(lastLogList)) #获得的信息是集合(list)形式,所以都弄成一个字符串,再写到文件里。就是偷懒,你奈我何~
3、捕获到信息后,经邮件发给管理员。
这个就有点蛋疼了(并不麻烦,只是我在做的过程中遇到点麻烦)。
首先要承认的是,Python 已经提供了比较完备的关于邮件操作库供我们使用。我用的是 smtplib 和 email 两个。细节就不说了,网上教程一大把(就是突出一个字:懒)。
但是我要提醒一句,如果使用 starttls() 函数对服务器进行加密连接的话。在 Python 的较早版本中(可能是2.6之前)需要在 starttls() 函数之前调用 ehlo() 函数。否则会报错:SMTP AUTH extension not supported by server。
比较棘手的问题都解决了~。
其实代码我已经垒好了,鉴于初学,代码太丑,就不放出来了。给大家看看截图吧~
这是程序记录下来的登录信息的一部分:

这是程序发给我的邮件其中的一封:

如果有什么问题欢迎留言,大家共同学习。如果有什么建议或者意见,也请留言或私信,各位的善言,就是我指引我进步的明灯,先谢谢大家了~ 么么哒(づ ̄ 3 ̄)づ。
初学Python-搞了一个linux用户登录监测小工具的更多相关文章
- Linux用户登录记录日志和相关查看命令汇总
# 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记 ...
- Linux用户登录日志查询
# 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记 ...
- Linux用户登录记录日志和相关查看命令汇总(转)
# 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记 ...
- linux用户登录
一.linux用户登录过程访问的文件 /etc/passwd---用户登录时,linux会先到这里查看用户Id.组Id.登录后的shell.用户工作目录 /etc/shadow(影)---linux在 ...
- (转)Linux用户登录记录日志和相关查看命令汇总
原文地址:http://www.cnblogs.com/lizhaoxian/p/5981029.html # 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /va ...
- 多人共用一个Linux用户, 实现Bash配置文件独立
本文中提到的 账户, 用户 均表示同一概念. 例如 ssh wbourne@192.168.xxx.101, 账户, 用户 指的均是 wbourne. 背景 在工作中, 我们经常会连接Linux服务器 ...
- 如何修改linux 用户登录后默认目录
1.linux用户登录后默认目录是在/etc/passwd文件设置的.如下图所示,一共显示了四行数据,其中第一行的/root即为root用户登录后的默认目录,第二行daemon用户的默认目录是/usr ...
- Linux用户登录查看命令总结 - w,who,last,lastlog
Linux用户登录查看命令总结 - w,who,last,lastlog linux shell 747 次阅读 · 读完需要 15 分钟 0 1. 查看登录用户信息 who -H 命令输出 NA ...
- VC++:制作一个控件注册的小工具
在平时的工作中,时常需要注册与反注册ActiveX控件,有时需要判断控件是否已经注册. 所以通过查找资料编写了一个控件注册的小工具,欢迎学习交流,不当之处请多多交流. 先直接上图: 主要代码: ...
随机推荐
- [CF1007B]Pave the Parallelepiped[组合计数+状态压缩]
题意 \(t\) 组询问,给你 \(A, B, C\) ,问有多少组三元组 \((a, b, c)\) 满足他们任意排列后有: \(a|A,\ b|B,\ c|C\) . \(A,B,C,t\leq ...
- .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...
- Unity Inspector添加自定义按钮(Button)
在Unity开发游戏的时候,为了有一个更快更方便的工作流,我们往往会在Editor下开发一些方便实用的工具.在工具中,用到最多,最关键的就是按钮,它是工具的首席执行官.下面就用最简单的代码来演示添加一 ...
- CentOS7使用winbind加入AD
https://ishm.idv.tw/?p=336 CentOS 7 使用 winbind 加入 AD 需求:已經熟悉 CentOS 6 的 AD 加入方式,CentOS 7 已將 winbind ...
- yocto-sumo源码解析(三):oe-setup-builddir
该脚本的主要功能就是创建构建目录并准备一些配置文件,比如conf/local.conf,conf/bblayer.conf 1. 检测BUILDDIR环境变量是否设置好(在本系列分享第二节已经知道:B ...
- Tomcat源码学习(1)
Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...
- DRF02
1. 视图 Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据) 控制数据库查询的执行 1.1. 请求与响应 1.1.1 Request RES ...
- 《Linux内核分析》 第五节 扒开系统调用的三层皮(下)
<Linux内核分析> 第五节 扒开系统调用的三层皮(下) 20135307 一.给MenusOS增加time和time-asm命令 给MenuOS增加time和time-asm命令需要 ...
- Github: 团队账号:https://github.com/ChenRuTing
Github: 团队账号:https://github.com/ChenRuTing 以后我们做好的代码会随时更新上传到这里,请老师届时帮我们看看.谢谢老师.
- Android实现Service永久驻留
说实话,这是一种流氓行为.但有些时候又是不得不需要的.比如微信的NotifyReceiver.现在抛开这些伦理的东西不讲,我们只是来看看技术上怎么实现.在后台运行的service有几个途径可以将其停止 ...