遠端執行命令,補充subprocess模組,粘包現象及解決辦法
遠端執行命令,補充subprocess模組,粘包現象及解決辦法
1.subprocess模組
shell引數:
如果把shell設定成True,指定的命令會在shell裡解釋執行。
subprocess.PIPE
一個可以被用於Popen的stdin 、stdout 和stderr 3個引數的特輸值,表示需要建立一個新的管道。
例:
#author: wylkjj
#date:2019/4/18
import subprocess
# b=subprocess.Popen('dir',shell=True)
# print(b)
#stdout=subprocess.PIPE把子程式封裝到a裡面去了
a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
# print(a)#多程式,子程式,父程式同時進行,誰快誰先列印
print(str(a.stdout.read(),'gbk'))#把執行結果從子程式裡面取出來
2.遠端執行命令
#author: wylkjj
#date:2019/4/18
#服務端
import subprocess
import socket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.bind(address)
sk.listen(2)
print('waiting')
while 1:
conn,addr=sk.accept()
print(addr)
while 1:
data=conn.recv(4024)
print('......'+str(data, 'utf8'))
if not data:break
obj = subprocess.Popen(str(data,'utf8'), shell=True, stdout=subprocess.PIPE)
cmd_result = obj.stdout.read()
# 獲取傳送資料的大小 為int型別,int型別無法與bytes型別相互轉換,所以int要先轉換成str然後再轉換為bytes型別
result_len=bytes(str(len(cmd_result)),'utf8')
conn.sendall(result_len)
conn.send(cmd_result)
sk.close()
#author: wylkjj
#date:2019/4/18
#客戶端
import subprocess
import socket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp=='exit':
break
sk.send(bytes(inp,'utf8'))
result_len=int(str(sk.recv(1024),'utf8'))
print(result_len)
# 接收資料,是bytes型別,資料量超過8k就不會接收,所以可以設定多次接收
data = bytes()
while len(data) != result_len: #判斷data的長度是否與server端傳來的長度相符
recv = sk.recv(1024)
data += recv
print(str(data,'gbk'))
sk.close()
3.粘包現象及解決辦法
#author: wylkjj
#date:2019/4/18
#服務端
import subprocess
import socket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.bind(address)
sk.listen(2)
print('waiting')
while 1:
conn,addr=sk.accept()
print(addr)
while 1:
data=conn.recv(4024)
print('......'+str(data, 'utf8'))
if not data:break 鄭州人流價格
obj = subprocess.Popen(str(data,'utf8'), shell=True, stdout=subprocess.PIPE)
cmd_result = obj.stdout.read()
# 獲取傳送資料的大小 為int型別,int型別無法與bytes型別相互轉換,所以int要先轉換成str然後再轉換為bytes型別
result_len=bytes(str(len(cmd_result)),'utf8')
conn.sendall(result_len)
conn.recv(1024) #因為兩個sand連一起傳送會出現粘包現象,所以recv一下(利用recv的阻塞原理)
conn.send(cmd_result)
sk.close()
#author: wylkjj
#date:2019/4/18
#客戶端
import subprocess
import socket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp=='exit':
break
sk.send(bytes(inp,'utf8'))
result_len=int(str(sk.recv(1024),'utf8'))
sk.sendall("ok")
print(result_len)
# 接收資料,是bytes型別,資料量超過8k就不會接收,所以可以設定多次接收
data = bytes()
while len(data) != result_len: #判斷data的長度是否與server端傳來的長度相符
recv = sk.recv(1024)
data += recv
print(str(data,'gbk'))
sk.close()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2668213/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python常用模組補充hashlib configparser logging,subprocess模組Python
- Go實現ssh執行遠端命令及遠端終端Go
- 粘包拆包及解決方案
- Laravel 執行 Gulp 命令出錯解決辦法Laravel
- python如何呼叫subprocess模組實現外部命令?Python
- Laravel 擴充套件包安利系列:《spatie/laravel-remote》遠端執行 Artisan 命令Laravel套件REM
- PHPMailer遠端命令執行漏洞復現PHPAI
- 服務端模板注入:現代WEB遠端程式碼執行(補充翻譯和擴充套件)服務端Web套件
- TCP 粘包 - 拆包問題及解決方案TCP
- python模組paramiko的上傳下載和遠端執行命令方法Python
- 粘包問題、socketserver模組實現併發Server
- php安裝擴充套件模組後,重啟不生效的原因及解決辦法PHP套件
- python Subprocess 模組Python
- 命令列執行python時找不到模組怎麼解決命令列Python
- mysql拒絕遠端連結,解決辦法MySql
- Windows連線遠端桌面時出現黑屏的解決辦法Windows
- Apache SSI 遠端命令執行漏洞Apache
- CVE-2017-8464遠端命令執行漏洞復現
- Netty粘包&半包解決方案Netty
- 解決SSH遠端執行命令找不到環境變數的問題變數
- 解決binwalk執行提示缺少LZMA模組
- python中使用subprocess批量執行linux下命令PythonLinux
- python中使用subprocess批次執行linux下命令PythonLinux
- 阿里雲MySQL及Redis靈異斷連現象:安全組靜默丟包解決方法阿里MySqlRedis
- Steam客戶端發現遠端程式碼執行漏洞:已放補丁客戶端
- Saltstack系列2:Saltstack遠端執行命令
- 用CMD執行時Java,出現亂碼的解決辦法Java
- pycharm 安裝包總失敗原因及解決辦法PyCharm
- ThinkPHP 5.x 遠端命令執行漏洞分析與復現PHP
- IDEA 找不到包解決辦法Idea
- Windows更新+中間人=遠端命令執行Windows
- Go語言:crypto/ssh執行遠端命令Go
- 序列化模組,subprocess模組,re模組,常用正則
- iPhone突然無法充電的解決辦法 iPhone無法充電怎麼辦iPhone
- java nio解決半包 粘包問題Java
- Laravel Mix - 執行 NPM install 報錯解決辦法LaravelNPM
- 遠端連線關閉,專案就停止的解決辦法
- 靶機練習---通達OA,遠端命令執行漏洞復現