工作中总是需要查询btmp日志,但使用lastb命令没有办法指定时间段,所以就看了一下lastb命令的源码,结合utmp结构体写了这个小工具。代码点击这里
目前只用到了btmp.h和generate_logfile.c,有这2个文件即可编译运行。server.c和client.c可以用于传输提取好的文件,采用c/s架构,虽然能用,但不方便,我还需要仔细思考,继续完善。
工具作用
如果需要提取特定时间段的btmp日志,可以使用该工具。
使用方法
- 确认btmp日志的路径,默认为/var/log/btmp,如不为该路径,在generate_logfile.c中自定义路径;
- 编译运行,输入timestamp格式的起止时间
# gcc generate_logfile.c -o generate_logfile
# ./generate_logfile
Please input the starttime(timestamp) :1612165251
Please input the endtime(timestamp) :1612165427
1612165251 6 0 ba 181.48.46.195
1612165292 6 0 root v118-27-6-78.3eg2.static.cnode.io
1612165313 6 0 root 199.195.253.25
1612165383 6 0 jf postfix11.itp.net
1612165385 6 0 jf postfix11.itp.net
1612165401 6 0 pashm 118.25.27.67
1612165403 6 0 pashm 118.25.27.67
1612165424 6 0 db 182.254.168.205
1612165425 6 0 qe 181.48.46.195
1612165426 6 0 db 182.254.168.205
1612165427 6 0 qe 181.48.46.195
1612165251 6 0 ba 181.48.46.195
1612165292 6 0 root v118-27-6-78.3eg2.static.cnode.io
1612165313 6 0 root 199.195.253.25
1612165383 6 0 jf postfix11.itp.net
1612165385 6 0 jf postfix11.itp.net
1612165401 6 0 pashm 118.25.27.67
1612165403 6 0 pashm 118.25.27.67
1612165424 6 0 db 182.254.168.205
1612165425 6 0 qe 181.48.46.195
1612165426 6 0 db 182.254.168.205
1612165427 6 0 qe 181.48.46.195
可以看到,由于btmp的两个函数分别都使用了printf,所以最终结果打印了两遍。
- 生成binlog.txt和filelog.txt。
# cat filelog.txt
1612165251 6 0 ba 181.48.46.195
1612165292 6 0 root v118-27-6-78.3eg2.static.cnode.io
1612165313 6 0 root 199.195.253.25
1612165383 6 0 jf postfix11.itp.net
1612165385 6 0 jf postfix11.itp.net
1612165401 6 0 pashm 118.25.27.67
1612165403 6 0 pashm 118.25.27.67
1612165424 6 0 db 182.254.168.205
1612165425 6 0 qe 181.48.46.195
1612165426 6 0 db 182.254.168.205
1612165427 6 0 qe 181.48.46.195
binlog.txt的内容是二进制数据,跟btmp日志内容一样,filelog.txt的内容便于阅读。第1列表示timestamp时间;第2列表示utmp结构体的类型,其中6表示登录会话,详情参考/usr/include/bits/utmp.h;第3列表示远程主机的Internet地址,我也不知道为什么总是0;第4列表示登陆用户名;第5列表示主机名。