python練習 Socket實現遠端cmd命令

2022-04-06 00:07:44 字數 2846 閱讀 6820

需求:基於tcp的套接字實現遠端執行命令的操作

**示例:

1#2

#client端部分

3import socket #

匯入騷凱特模組

4 cmdobj = socket.socket(socket.af_inet,socket.sock_stream)#

例項化騷凱特物件5#

基於網路型別(af_inet)的套接字,基於tcp協議(sock_stream)

6 cmdobj.connect(("

127.0.0.1

",5741))#

建立與服務端的通訊

7print(cmdobj.recv(1024).decode("

utf8

"))#

顯示服務端的歡迎資訊

8while

true:

9 cmdscript = input("

>>>:

")#寫入想要執行的cmd命令

10if

not cmdscript: continue

#判斷是否為空,避免服務端出現迴圈錯誤

11if(cmdscript == "

exit

"):#

先判斷是否退出,如果不退出則繼續執行

12print("

感謝使用,再見!")

13break

14 cmdobj.send(cmdscript.encode("

utf8

"))#

將cmd命令轉為bytes傳輸給服務端

15 recv = cmdobj.recv(1024)#

接收服務端傳來的bytes資訊

16try:17

print(recv.decode("

gbk"

))18

#嘗試將bytes資訊使用gbk方式編碼,在windows下的編碼是gbk,不過如果編碼錯誤的話還可以通過捕獲異常來重新編碼

19except unicodedecodeerror as ude:#

判斷異常為轉碼異常

20print(recv.decode("

utf8

"))#

使用utf8編碼bytes資訊(這裡其實就是為了返回服務端對egon進行處理的那條資訊)

客戶端**

1#2

import socket,subprocess#

匯入騷凱特模組和命令列互動模組

3 cmdobj =socket.socket(socket.af_inet,socket.sock_stream)4#

例項化騷凱特物件,基於網路型別(af_inet)的tcp流傳輸(sock_stream)

5 cmdobj.bind(("

127.0.0.1

",5741))#

建立服務端的繫結資訊服務ip是127.0.0.1,埠號是5741

6 cmdobj.listen(5)#

建立監聽,後備鏈結最大值為5

7while

true:

8 clients,clientip = cmdobj.accept()#

等待客戶端的連線.........9#

並獲得連線控制代碼clients,和連線位址資訊clientip

10 clients.send(("

您當前的登陸ip位址為:%s

"%(clientip[0])).encode("

utf8"))

11#傳送給客戶端歡迎資訊

12while

true:

13try

:14 cmdscript = clients.recv(1024)#

接收客戶端傳來的bytes資料

15if

not cmdscript : continue

#如果為空跳出本次迴圈,避免服務端和粗線死迴圈情況

16if(cmdscript.decode("

utf8

") == "

egon

"):#

這裡是個趣味性**,認真學習者可忽略

17 clients.send("

somebody不是乙個有效的dos命令!

".encode("

utf8"))

18continue

19 res = subprocess.popen(cmdscript.decode("

utf8

"),shell=true,stdout=subprocess.pipe,stderr=subprocess.pipe)20#

例項化subprocess物件,獲得由客戶端發來的命令執行後的結果

21 resdata = res.stdout.read()#

讀取命令執行成功的結果

22if

not resdata:#

如果讀取命令執行成功的結果失敗

23 resdata = res.stderr.read()#

則讀取命令執行失敗的結果

24 clients.send(resdata)#

將結果返回給客戶端,這裡由於是在windows下所以預設的bytes編碼格式是gbk

25except

exception as e:

26print

(e)27

break

28clients.close()

29 cmdobj.close()

伺服器端**

python實現socket收發資料的實現

1.建立套接字 2.使用套接字收 發資料 3.關閉套接字 import socket def main 建立套接字 udp socket socket.socket socket.af inet,socket.sock dgram 繫結資訊 這裡繫結的資料是乙個元組 udp socket.bind ...

leetcode練習 686 python實現

題目要求 給定兩個string字串a和b,判斷是否a通過重複,b能變成a中的乙個子集,如果能,返回重複的次數,如果不能,返回 1。我的思路是 1.當b not in a時,就讓a a 注意這裡用a的淺拷貝,只要加上a最初的值就行 count 1 2.如果a的長度已經大於b的三倍,還沒找到b,說明b是...

socket 使用select 非阻塞方式實現

select函式原型如下 int select int maxfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select系統呼叫是用來讓我們的程式監視多個檔案控制代碼 socket 控制代碼 的狀...