python---pexpect用户操作linux系统命令,命令信息保存到日志

python—pexpect用户操作linux系统命令,命令信息保存到日志

1、在kali linux 中配置如下

root@kali:~/python/anquangongji# pwd
/root/python/anquangongji
root@kali:~/python/anquangongji# ls
checkfile.py      dictionary.txt    pexpectcreaksshpassword.py  pexpectshhnocommand.py   scanmultports.py
cmd.log           openfiletest.py   pexpectftplogin.py          pexpectshhusecommand.py  vulnbanners.txt
crarkpassword.py  passwordunix.txt  pexpectlog.py               scanerftpbanner.py       vulnftpbanner.txt
root@kali:~/python/anquangongji#

2、脚本:

root@kali:~/python/anquangongji# 
root@kali:~/python/anquangongji# cat pexpectlog.py 
#!/usr/bin/python
#--*-- coding:utf-8 --*--

import os,sys,getopt
import traceback
import pexpect

#使用方法:python pexpectlog.py -a -c pwd cmd.log中的pwd为命令,存储的日志文件为cmd.log文件,存储的日志会自动累加保存cmd.log文件中
#使用方法:python pexpectlog.py -c pwd cmd.log中的pwd为命令,存储的日志文件为cmd.log文件,只存储最后一条的命令运行日志信息

def exit_with_usage():
    print globals()["__doc__"]
    os._exit(1)

def main():
    try:
        optlist,args = getopt.getopt(sys.argv[1:],"h?ac:",["help","h","?"])
        #如果指定的参数不是"-a",-h",-c",-?",--help","--h"或"--?"时,会抛出exception,这里catch住,然后打印出,exception的信息,并输出usage提示信息
    except Exception,e:
        print str(e)
        exit_with_usage()

    options = dict(optlist)
    if len(args) > 1:#最多只能指定一个logfile,否则出错
        exit_with_usage()
        if [elem for elem in options if elem in ["-a","-h","-c","-?","--help"]]:#如果指定的是'-h','--h','-?','--?'或'--help',只输出usage提示信息
            print "Help:"
            exit_with_usage()
    if len(args) == 1:#获取logfile的名字
        script_filename = args[0]
    else:#如果用户没指定,默认logfile的名字是command.log
        script_filename = "command.log"

    if "-a" in options:#如果用户指定了参数-a,如果之前该logfile存在,那么接下来的内容会附加在原先内容之后,如果之前没有该logfile新建一个文件,并且接下来将内容写入到该文件中
        fout = open(script_filename,"ab")
    else:#如果用户没指定参数-a,默认按照用户指定logfile文件名新建一个文件,然后将接下来将内容写入到该文件中
        fout = open(script_filename,"wb")
    if "-c" in options:#如果用户指定了-c参数,那么运行用户指定的命令
        command = options["-c"]
    else:#如果用户没有指定-c参数,那么默认运行命令'ls -la'
        command = "ls -la"

    fout.write("===============Log Title: wuwuheihei================")
    fout.write("\n")
    fout.write("你输入的命令是:")
    fout.write(command)
    fout.write("\n")

    p = pexpect.spawn(command)#为接下来的运行命令生成一个pexpect的spawn类子程序的对象
    p.logfile = fout#将之前open的file对象指定为spawn类子程序对象的log文件
    p.expect(pexpect.EOF)#命令运行完后,expect EOF出现,这时会将spawn类子程序对象的输出写入到log文件
    fout.close()#open完文件,使用完毕后,需关闭该文件
    return 0

if __name__ == "__main__":
    try:
        main()
    except SystemExit,e:
        raise e
    except Exception,e:
        print "ERROR"
        print str(e)
        traceback.print_exc()
        os._exit(1)

root@kali:~/python/anquangongji# 

3、脚本运行情况:

root@kali:~/python/anquangongji# vi cmd.log 
root@kali:~/python/anquangongji# cat cmd.log 
root@kali:~/python/anquangongji# clear
root@kali:~/python/anquangongji# python pexpectlog.py -a -c ifconfig cmd.log
root@kali:~/python/anquangongji# python pexpectlog.py -a -c pwd cmd.log
root@kali:~/python/anquangongji# python pexpectlog.py -a -c ls cmd.log
root@kali:~/python/anquangongji# cat cmd.log 
===============Log Title: wuwuheihei================
你输入的命令是:ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:ad:34:08  
          inet addr:192.168.100.139  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fead:3408/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2104610 errors:0 dropped:1370 overruns:0 frame:0
          TX packets:266409 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:299484980 (285.6 MiB)  TX bytes:26903598 (25.6 MiB)
          Interrupt:19 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:52636 errors:0 dropped:0 overruns:0 frame:0
          TX packets:52636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5058696 (4.8 MiB)  TX bytes:5058696 (4.8 MiB)

===============Log Title: wuwuheihei================
你输入的命令是:pwd
/root/python/anquangongji
===============Log Title: wuwuheihei================
你输入的命令是:ls
checkfile.py      passwordunix.txt        pexpectshhusecommand.py
cmd.log       pexpectcreaksshpassword.py  scanerftpbanner.py
crarkpassword.py  pexpectftplogin.py          scanmultports.py
dictionary.txt    pexpectlog.py           vulnbanners.txt
openfiletest.py   pexpectshhnocommand.py      vulnftpbanner.txt
root@kali:~/python/anquangongji# 

参考:https://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐为波

看着给就好了,学习写作有点累!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值