日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

發(fā)布時間:2023/12/10 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

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)接收客戶端發(fā)送過來的命令res = phone.accept()conn,client_addr = reswhile True:try:cmd = conn.recv(1024)#2)處理命令,執(zhí)行命令并且獲得命令得到的結(jié)果obj = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,#將正確運行命令得到的結(jié)果傳給管道stdout中stderr=subprocess.PIPE)#將沒有正確運行命令得到的返回信息存放在stderr管道中stdout = obj.stdout.read()stderr = obj.stderr.read()data = stdout + stderr#3)將結(jié)果進行發(fā)送給客戶端conn.send(data)except ConnectionResetError:breakconn.close() phone.close()

?

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

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

?

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

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

?

4.補充:windows命令

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

2)ipconfig:返回本地網(wǎng)關(guān)ip地址

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

?

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

請輸入命名:dir / 服務器返回來的數(shù)據(jù): 無效開關(guān) - ""。請輸入命名:dir 服務器返回來的數(shù)據(jù): 驅(qū)動器 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 字節(jié)2 個目錄 125,989,347,328 可用字節(jié)請輸入命名:dir e 服務器返回來的數(shù)據(jù): 驅(qū)動器 C 中的卷是 本地磁盤卷的序列號是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket編程\模擬ssh遠程操作命令 的目錄找不到文件請輸入命名:dir /e 服務器返回來的數(shù)據(jù): 無效開關(guān) - "e"。請輸入命名:tasklist 服務器返回來的數(shù)據(jù): 映像名稱 PID 會話名 會話# 內(nèi)存使用 ========================= ======== ================ =========== ============ 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 服務器返回來的數(shù)據(jù): 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

?

總結(jié)

以上是生活随笔為你收集整理的学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。