學習筆記(09):Python網絡編程并發編程-模擬ssh遠程執行命令-代碼實現

立即學習:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu

1.服務器端:接收客戶端發送的命令,subprocess.POPE()函數可用于產生一個子進程,并且返回子進程的結果

import socket
import subprocessphone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))
phone.listen(5)
while True:#1)接收客戶端發送過來的命令res = phone.accept()conn,client_addr = reswhile True:try:cmd = conn.recv(1024)#2)處理命令,執行命令并且獲得命令得到的結果obj = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,#將正確運行命令得到的結果傳給管道stdout中stderr=subprocess.PIPE)#將沒有正確運行命令得到的返回信息存放在stderr管道中stdout = obj.stdout.read()stderr = obj.stderr.read()data = stdout + stderr#3)將結果進行發送給客戶端conn.send(data)except ConnectionResetError:breakconn.close()
phone.close()

?

2.客戶端:向服務器端發送一個命令,并且獲取由服務器執行命令后的結果,并且打印出來,主要知識點:subprocess/Popen/stdout=subprocess.PIPE/stderr=subprocess.PIPE

import socket
#1、設置phone套接字
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2、連接服務器(打電話),本地地址:127.0.0.1
phone.connect(('127.0.0.1',8080))
#3、向服務器發送請求send(),發送的數據不能直接發送字符串,因為要傳送到物理層底層,因此需要轉換成二進制的bytes類型進行發送,只需:發送的數據.encode('utf-8')即可
while True:'''實現在客戶端輸入一個命令,然后命令發送給服務器端,服務器端進行命令的執行,然后再服務器端執行的命令的結果返回給客戶端'''#1)、向服務器端發送命令cmd = input("請輸入命名:")#修復客戶端發送空字符串而服務器卡在接收信息處的bug,continue表示跳出本次循環,重新開始下一次的循環if not cmd:continuephone.send(cmd.encode('utf-8'))#2)、接收服務器端執行命令后的結果res = phone.recv(1024)#接收小于1024bytes的數據print('服務器返回來的數據:',res.decode('gbk'))#5、關閉套接字phone
phone.close()

?

3.注:客戶端發送給服務器的數據必須是bytes類型,使用encode('utf-8'),客戶端接收到的數據也是bytes類型,如果需要在客戶端打印出接收到服務器的bytes類型數據,那就需要解碼,window系統默認的解碼方式‘gbk’,Linux系統默認的解碼方式是“utf-8”,需要打印則用語句:

#data是客戶端接收到的由服務器傳回來的bytes類型數據,此處是windows系統,默認的解碼方式是gbkprint(data.decode('gbk'))

?

4.補充:windows命令

1)dir:返回子文件名和子文件夾名

2)ipconfig:返回本地網關ip地址

3)tasklist:返回正在運行的進程的相關信息

?

5.上述程序運行的結果,下面的結果出現了粘包現象,具體粘包的含義以及出現的原因和結果方法見下一篇學習筆記

請輸入命名:dir /
服務器返回來的數據: 無效開關 - ""。請輸入命名:dir
服務器返回來的數據:  驅動器 C 中的卷是 本地磁盤卷的序列號是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket編程\模擬ssh遠程操作命令 的目錄2020/03/07  14:01    <DIR>          .
2020/03/07  14:01    <DIR>          ..
2020/03/07  13:35                 0 __init__.py
2020/03/07  10:02               895 客戶端_.py
2020/03/07  14:01             1,055 服務器端_.py3 個文件          1,950 字節2 個目錄 125,989,347,328 可用字節請輸入命名:dir e
服務器返回來的數據:  驅動器 C 中的卷是 本地磁盤卷的序列號是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket編程\模擬ssh遠程操作命令 的目錄找不到文件請輸入命名:dir /e
服務器返回來的數據: 無效開關 - "e"。請輸入命名:tasklist
服務器返回來的數據: 
映像名稱                       PID 會話名              會話#       內存使用 
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          4 K
System                           4 Services                   0        584 K
smss.exe                       324 Services                   0        804 K
csrss.exe                      524 Services                   0      9,040 K
csrss.exe                      620 Console                    1     30,284 K
wininit.exe                    628 Services                   0      4,144 K
winlogon.exe                   656 Console                    1      6,512 K
services.exe                   724 Services                   0      8,284 K
lsass.exe                      732 Services                   0     11,456 K
svchost.exe                    804 Services                   0     11,364 K
svchost.exe                    844 Services                   0      8,864 K
dwm.exe 
請輸入命名:ipconfig
服務器返回來的數據:                        948 Console                    1     24,472 K
nvvsvc.exe                     956 Services                   0          4 K
nvxdsync.exe                  1000 Console                    1        824 K
nvvsvc.exe                    1008 Console                    1        200 K
svchost.exe                    276 Services                   0     30,968 K
svchost.exe                    392 Services                   0     43,000 K
svchost.exe                    412 Services                   0     24,864 K
svchost.exe                    736 Services                   0     49,704 K
RtkAudioService64.exe         1056 Services                   0          4 K
RAVBg64.exe                   1076 Console                    1        352 K
RAVBg64.exe                   1084 Console                    1        344 K
ZhuDongFangYu.exe             1128 Services                   0      3,320 K
svchost.exe                   1280 Services                   0     16,404 K
spoolsv.exe       

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257096.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257096.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中兩個數交換不引進中間變量的方法

int a8,b2; 二進制的a1000,b0010; aa方法一&#xff1a;使用異或思想&#xff08;最高級方法&#xff09; aa^b; ba^b; aa^b 方法二&#xff1a;使用加法加法&#xff08;高級方法&#xff09; aab; ba-b; aa-b; 方法三&#xff1a;引進中間變量&#xff08;一般方法&#xff0…

【JUC】JDK1.8源碼分析之ConcurrentLinkedQueue(五)

一、前言 接著前面的分析&#xff0c;接下來分析ConcurrentLinkedQueue&#xff0c;ConcurerntLinkedQueue一個基于鏈接節點的無界線程安全隊列。此隊列按照 FIFO&#xff08;先進先出&#xff09;原則對元素進行排序。隊列的頭部是隊列中時間最長的元素。隊列的尾部 是隊列中時…

學習筆記(10):Python網絡編程并發編程-粘包現象

立即學習:https://edu.csdn.net/course/play/24458/296240?utm_sourceblogtoedu粘包現象&#xff1a;服務器接收到客戶端的命令后&#xff0c;進行執行得到結果后&#xff0c;再發送回給客戶端&#xff0c;在這個過程中如果服務器返回的結果的字節數會大于客戶端所接收最大字節…

某法院HP-P4500存儲數據恢復案例

好久沒出來寫博客了&#xff0c;過年來了一直很忙&#xff0c;尤其是最近&#xff0c;忙著做了好幾個大單子。先是一個醫院50TB的HP-EVA4400&#xff0c;接著是一個法院12TB的HP-P4500&#xff0c;前幾天還有做了一個某游樂城12TB的VMware VMFS虛擬機恢復。雖然忙點&#xff0c…

數組指針與指針數組的區別

1、數組指針 定義&#xff1a;數組指針式一個指向一維數組的指針變量&#xff0c;定義數組指針的格式為&#xff1a; int (*p) [5] 數據類型 &#xff08;*指針名&#xff09; [常量表達式] 數組元素為整形&#xff0c;*p的兩側圓括號不能省略 2、指針數組 定義&#xff1a…

[thinkphp] 是如何輸出一個頁面的

表面上看&#xff0c;TP輸出一個頁面很簡單&#xff1a;$this->display(); 實際上是怎么回事呢&#xff1f;$this->display(); 這個display()方法是定義在ThinkPHP/Library/Think/Controller.class.php這個文件中的 protected function display($templateFile,$charset,$…

關于反射blog

非常好的Java反射例子 瘋狂java 在學習編程的過程中&#xff0c;我覺得不止要獲得課本的知識&#xff0c;更多的是通過學習技術知識提高解決問題的能力&#xff0c;這樣我們才能走在最前方&#xff0c;更多Java學習&#xff0c;請瀏覽瘋狂java官網。Java反射在我們Java學習的…

學習筆記(11):Python網絡編程并發編程-粘包底層原理分析

立即學習:https://edu.csdn.net/course/play/24458/296241?utm_sourceblogtoedu1.send和recv底層分析 1&#xff09;不管是recv還是send都不是直接接收對方數據或者發送給對方數據&#xff0c;而是對自己的操作系統內存進行操作&#xff1b; 2&#xff09;客戶端與服務端并不是…

切面編程(4)

這篇介紹的是最為常見的切面編程首先介紹的是通過注解Aspect來配置AOP類Component Aspect public class Acsep {//定義切入點Pointcut("execution(* com.test.*.*(..))")//切面公式public void aspect(){ }//執行方法之前Before("aspect()")public void be…

c++存儲類型

1、c中的存儲類型一般有靜態存儲、棧、和自動類型三種&#xff0c;一般默認值是為自動類型auto

多線程編程 (1) -NSThread

多線程編程 (1) -NSThread 每個iOS應用程序都有個專門用來更新顯示UI界面、處理用戶觸摸事件的主線程&#xff0c;因此不能將其他太耗時的操作放在主線程中執行&#xff0c;不然會造成主線程堵塞(出現卡機現象)&#xff0c;帶來極壞的用戶體驗。一般的解決方案就是將那些耗時的…

交叉工具鏈的搭建方法(測試成功)

之前安裝了一個rehat6的linux系統&#xff0c;把交叉編譯搭建給忽視了&#xff0c;結果在編譯uboot的時候出現問題&#xff0c;顯示找不到arm-linux-gcc。于是自己來搭建交 叉編譯環境。出現好多錯。先是解壓時沒在后邊加 -C/&#xff0c;后是直接自己創建了個目錄&#xff0c…

VMware內存回收與分配機質

VMware內存回收與分配機質 整理了下學習過的東西&#xff0c;為了防止以后忘記。^_^VMware內存回收按照內存回收先后順充&#xff0c;依次為&#xff1a;1.TPS 透明頁共享2.Ballooning 氣球回收3.Compressiong 內存壓縮4.Swapping 內存交換網上對這個的解釋也挺多&#xff…

學習筆記(12):Python網絡編程并發編程-解決粘包問題-簡單版本

立即學習:https://edu.csdn.net/course/play/24458/296243?utm_sourceblogtoedu 粘包現象的解決&#xff1a;簡單版 1.思路&#xff1a; 在服務器端計算出執行命令后結果的字節長度&#xff0c;然后再將字節數長度send即通知給客戶端&#xff0c;客戶端根據這個字節數的長度一…

關于for循環中的變量int i 如果跳出了這個for循環后,i的值是繼續保留還是被釋放掉了

#include<iostream> using namespace std;int main() {char a[10]; //定義一個一維數組用來存放字符串int i,j; //定義變量cout<<"請輸入字符&#xff1a;“;for(i0;i<10;i) //接收用戶的輸入{ ci…

keil優化等級設置

優化級別說明&#xff08;僅供參考&#xff09;&#xff1a;則其中的 Code Optimization 欄就是用來設置C51的優化級別。共有9個優化級別&#xff08;書上這么寫的&#xff09;&#xff0c;高優化級別中包含了前面所有的優化級別。現將各個級別說明如下&#xff1a;0級優化&…

SVN命令使用詳解

1、檢出svn co http://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 --password 密碼svn co svn://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 --password 密碼svn checkout http://路徑(目錄或文件的全路徑) [本地目錄全路徑]…

服務器排障 之 nginx 499 錯誤的解決

問題描述&#xff1a; Nginx 服務器大量499報錯 220.181.165.136 - - [18/May/2015:10:31:02 0800] "POST /v1/jobsHTTP/1.1" 499 0 "" "bdHttpRequest/1.0.0"115.239.212.7 - - [18/May/2015:10:31:03 0800] "GET /v1/job/643309e3-dc73-4…

二叉查找樹的先序遍歷,中序遍歷,后序遍歷

1、有一個二叉查找樹&#xff0c;存儲者字符A,B,C,D,E,F,G,H,下面哪個結果是后序樹遍歷結果 A. ADBCEGFH B. BCAGEHFD C. BCAEFDHG D. BDACEFHG 我的結題思路是將每個答案按照后序的遍歷方法把二叉樹存儲數據的結構還原&#xff0c;看是否滿足二叉樹的性質。 二叉樹的性…

學習筆記(13):Python網絡編程并發編程-解決粘包問題-終極版本

立即學習:https://edu.csdn.net/course/play/24458/296244?utm_sourceblogtoedu 粘包現象解決&#xff08;終極版&#xff09; 1.簡單版的問題所在 1&#xff09;報頭信息不一定只是包含著命令執行結果的字節數長度&#xff0c;在文件傳輸的時候也可能包含文件名等&#xff0c…