一.subprocess模塊shell
在學習這個模塊前,咱們先用Python的help()函數查看一下subprocess模塊是幹嗎的:服務器
即容許你去建立一個新的進程讓其執行另外的程序,並與它進行通訊,獲取標準的輸入、標準輸出、標準錯誤以及返回碼等。socket
subprocess模塊中定義了一個Popen類,經過它能夠來建立進程,並與其進行復雜的交互。ide
應用:函數
1 import subprocess 2 3 res=subprocess.Popen("ipconfig", 4 shell=True, 5 stderr=subprocess.PIPE, 6 stdout=subprocess.PIPE) 7 8 print(res.stdout.read().decode("gbk"))
簡單應用學習
1 import socket 2 import subprocess 3 4 sever=socket.socket() 5 6 sever.bind(('192.168.13.137',8016)) 7 8 sever.listen(10) 9 10 while True: 11 print('服務器準備好了') 12 conn,addr=sever.accept() 13 14 while True: 15 try: 16 cmd=conn.recv(1024).decode('utf-8') 17 if cmd=='exit': 18 break 19 res=subprocess.Popen(cmd, 20 shell=True, 21 stderr=subprocess.PIPE, 22 stdout=subprocess.PIPE, 23 ) 24 out=res.stdout.read() 25 err = res.stderr.read() 26 if out: 27 conn.send(out) 28 29 else: 30 conn.send(err) 31 32 except Exception as e: 33 break 34 conn.close()
1 import socket 2 client=socket.socket() 3 client.connect(('192.168.13.137',8016)) 4 while True: 5 cmd=input('請輸入命令:') 6 if cmd=='exit': 7 client.send(cmd.encode('utf-8')) 8 break 9 client.send(cmd.encode('utf-8')) 10 ret=client.recv(1024) 11 print(ret.decode('gbk'))
二.黏包加密
1..struct模塊
1 import struct 2 res=struct.pack('i',12535353) #壓包 3 print(res) 4 print(len(res)) 5 ret=struct.unpack('i',res) #解包 6 print(ret[0])
實例:spa
1 import socket 2 import subprocess 3 4 sever=socket.socket() 5 6 sever.bind(('192.168.13.137',8016)) 7 8 sever.listen(10) 9 10 while True: 11 print('服務器準備好了') 12 conn,addr=sever.accept() 13 14 while True: 15 try: 16 cmd=conn.recv(1024).decode('utf-8') 17 if cmd=='exit': 18 break 19 res=subprocess.Popen(cmd, 20 shell=True, 21 stderr=subprocess.PIPE, 22 stdout=subprocess.PIPE, 23 ) 24 out=res.stdout.read() 25 err = res.stderr.read() 26 if out: 27 import struct 28 header_pack = struct.pack('i', len(out)) 29 # 發送報頭 30 conn.send(header_pack) 31 # 發送數據 32 conn.send(out) 33 34 else: 35 # 構建報頭數據 36 import struct 37 header_pack=struct.pack('i',len(err)) 38 # 發送報頭 39 conn.send(header_pack) 40 # 發送數據 41 conn.send(err) 42 43 except Exception as e: 44 break 45 conn.close()
1 import socket 2 import struct 3 client=socket.socket() 4 client.connect(('192.168.13.137',8016)) 5 while True: 6 cmd=input('請輸入命令:') 7 if cmd=='exit': 8 client.send(cmd.encode('utf-8')) 9 break 10 client.send(cmd.encode('utf-8')) 11 header_pack=client.recv(4) 12 data_length=struct.unpack('i',header_pack) 13 14 recv_data_length=0 15 total_size=b'' 16 while recv_data_length<data_length[0]: 17 data=client.recv(1024) 18 recv_data_length+=len(data) 19 total_size+=data 20 print(total_size.decode('gbk'))
2.hashlib模塊3d
1 import hashlib 2 md5=hashlib.md5() 3 md5.update(b'sd') 4 md5.update(b'ghjk') #追加上傳,不是覆蓋 5 print(md5.hexdigest())
1 import hashlib 2 md5=hashlib.sha3_512() #加密效果更好 3 md5.update(b'sd') 4 md5.update(b'ghjk') 5 print(md5.hexdigest()) 6 7 import hashlib 8 md5=hashlib.sha3_256() #加密效果更好 9 md5.update(b'sd') 10 md5.update(b'ghjk') 11 print(md5.hexdigest())