中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中socket套接字如何實現C/S模式遠程命令執行功能

發布時間:2021-07-10 11:38:51 來源:億速云 閱讀:163 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Python中socket套接字如何實現C/S模式遠程命令執行功能”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Python中socket套接字如何實現C/S模式遠程命令執行功能”這篇文章吧。

具體如下:

一. 前言

要求:

使用python的socket套接字編寫服務器/客戶機模式的遠程命令執行腳本。

serverCmd.py 遠程機器上用來執行客戶端發送命令的腳本
clientCmd.py 本地機器上,向遠程服務器發送命令的腳本
servers.txt  本地機器上,存放所有的遠程服務器IP地址文件(僅支持第一個IP)

發送:cmd [command]形式消息,讓遠程主機執行命令(本地主機無回顯)

發送:close session消息,雙方關閉會話。

二. 源碼

下載地址: 點擊此處本站下載

注:

1. 代碼注釋較少,建議有一定套接字編程基礎。
2. 或者直接簡單部分修改IP使用。
3. clientCmd.py和servers.txt(修改IP地址后)放在同一目錄。
4.程序為簡單Demo,僅為學習記錄。

serverCmd.py

#!/usr/bin/env python
# coding:utf-8
# Build by LandGrey
#
import time
import socket
import threading
import traceback
import subprocess
def parsecmd(strings):
  midsplit = str(strings).split(" ")
  if len(midsplit) >= 2 and midsplit[0] == "cmd":
    try:
      command = subprocess.Popen(strings[4:], shell=True)
      command.communicate()
      print "\n"
    except Exception, e:
      print e.message
      traceback.print_exc()
def recvdata(port):
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  s.bind(('', port))
  s.listen(1)
  print "[+] Server is running on port:%s at %s" % (str(port), time.strftime("%Y%m%d %H:%M:%S", time.localtime()))
  while True:
    mainsocket, mainhost = s.accept()
    print "[+] Connect success -> %s at %s" % (str(mainhost), time.strftime("%Y%m%d %H:%M:%S", time.localtime()))
    if mainhost:
      while True:
        data = mainsocket.recv(1024)
        if data:
          print "[+] Receive:%s" % data
          mainsocket.sendall("[Server]success")
          parsecmd(data)
        if data == "close session":
          mainsocket.close()
          print "[+] Quit success"
          break
      break
if __name__ == "__main__":
  # some public variable
  connPort = 47091
  onethreads = threading.Thread(target=recvdata, args=(connPort,))
  onethreads.start()

clientCmd.py

#!/usr/bin/env python
# coding:utf-8
# Build by LandGrey
#
import time
import socket
def readtarget():
  global server_list
  with open(r"servers.txt") as f:
    for line in f.readlines():
      if line[0:1] != "#" and len(line.split(".")) == 4:
        server_list.append(line)
def connserver(host, port):
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.connect((host, port))
  while True:
    print "\n[*] Please input command:"
    data = raw_input()
    if not data:
      break
    s.sendall(data)
    recvdata = s.recv(1024)
    print "[+] Send %s:%s -> %s" % (host, str(connPort), data)
    time.sleep(0)
    if recvdata:
      print "[+] Receive :%s" % recvdata
    if data == "close session":
      s.close()
      break
if __name__ == "__main__":
  server_list = []
  connPort = 47091
  readtarget()
  if server_list != []:
    for host in server_list:
      connserver(host, connPort)

servers.txt

# server ip list
192.168.0.139

三. 運行效果

python serverCmd.py

[+] Server is running on port:47091 at 20161013 17:50:19
[+] Connect success -> ('192.168.0.241', 4255) at 20161013 17:50:32
[+] Receive:hello
[+] Receive:你好
[+] Receive:cmd ip
'ip' 不是內部或外部命令,也不是可運行的程序
或批處理文件。

[+] Receive:cmd ipconfig

Windows IP 配置

以太網適配器 本地連接:

   連接特定的 DNS 后綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : ****::****:****:****:*******
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.139
   子網掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網關. . . . . . . . . . . . . : 192.168.0.1

隧道適配器 isatap.{****-6122-4F83-8828-****}:

   媒體狀態  . . . . . . . . . . . . : 媒體已斷開
   連接特定的 DNS 后綴 . . . . . . . :

[+] Receive:cmd ping www.baidu.com

正在 Ping www.a.shifen.com [180.97.33.108] 具有 32 字節的數據:
來自 180.97.33.108 的回復: 字節=32 時間=66ms TTL=36
來自 180.97.33.108 的回復: 字節=32 時間=66ms TTL=36
來自 180.97.33.108 的回復: 字節=32 時間=64ms TTL=36
來自 180.97.33.108 的回復: 字節=32 時間=65ms TTL=36

180.97.33.108 的 Ping 統計信息:
    數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 64ms,最長 = 66ms,平均 = 65ms

[+] Receive:要結束了
[+] Receive:close session
[+] Quit success

python clientCmd.py

[*] Please input command:
hello
[+] Send 192.168.0.139:47091 -> hello
[+] Receive :[Server]success

[*] Please input command:
你好
[+] Send 192.168.0.139:47091 -> 你好
[+] Receive :[Server]success

[*] Please input command:
cmd ip
[+] Send 192.168.0.139:47091 -> cmd ip
[+] Receive :[Server]success

[*] Please input command:
cmd ipconfig
[+] Send 192.168.0.139:47091 -> cmd ipconfig
[+] Receive :[Server]success

[*] Please input command:
cmd ping www.baidu.com
[+] Send 192.168.0.139:47091 -> cmd ping www.baidu.com
[+] Receive :[Server]success

[*] Please input command:
要結束了
[+] Send 192.168.0.139:47091 -> 要結束了
[+] Receive :[Server]success

[*] Please input command:
close session
[+] Send 192.168.0.139:47091 -> close session
[+] Receive :[Server]success

以上是“Python中socket套接字如何實現C/S模式遠程命令執行功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赫章县| 温泉县| 东丽区| 北安市| 长泰县| 屏山县| 额济纳旗| 博白县| 曲麻莱县| 城口县| 邯郸县| 胶南市| 新沂市| 大渡口区| 温泉县| 肇州县| 宁陵县| 华阴市| 和平区| 青冈县| 兖州市| 龙里县| 本溪| 湟源县| 甘德县| 重庆市| 泸西县| 格尔木市| 永仁县| 海口市| 安仁县| 黎川县| 长丰县| 礼泉县| 和政县| 高青县| 新昌县| 体育| 句容市| 梅州市| 泾阳县|