python---pexpect使用者操作linux系統命令,命令資訊儲存到日誌
阿新 • • 發佈:2019-01-30
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#