1. 程式人生 > >python---pexpect使用者操作linux系統命令,命令資訊儲存到日誌

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#