需求:基于tcp的套接字实现远程执行命令的操作

代码示例:

 # 编辑者:闫龙
#Client端部分
import socket #导入骚凯特模块
CmdObj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#实例化骚凯特对象
#基于网络类型(AF_INET)的套接字,基于TCP协议(SOCK_STREAM)
CmdObj.connect(("127.0.0.1",5741))#建立与服务端的通信
print(CmdObj.recv(1024).decode("utf8"))#显示服务端的欢迎信息
while True:
CmdScript = input(">>>:")#写入想要执行的cmd命令
if not CmdScript: continue #判断是否为空,避免服务端出现循环错误
if(CmdScript == "exit"):#先判断是否退出,如果不退出则继续执行
print("感谢使用,再见!")
break
CmdObj.send(CmdScript.encode("utf8"))#将cmd命令转为bytes传输给服务端
Recv = CmdObj.recv(1024)#接收服务端传来的bytes信息
try:
print(Recv.decode("gbk"))
#尝试将bytes信息使用gbk方式编码,在windows下的编码是gbk,不过如果编码错误的话还可以通过捕获异常来重新编码
except UnicodeDecodeError as ude:#判断异常为转码异常
print(Recv.decode("utf8"))#使用utf8编码bytes信息(这里其实就是为了返回服务端对egon进行处理的那条信息)

客户端代码

 # 编辑者:闫龙
import socket,subprocess#导入骚凯特模块和命令行交互模块
CmdObj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#实例化骚凯特对象,基于网络类型(AF_INET)的TCP流传输(SOCK_STREAM)
CmdObj.bind(("127.0.0.1",5741))#建立服务端的绑定信息服务IP是127.0.0.1,端口号是5741
CmdObj.listen(5)#建立监听,后备链接最大值为5
while True:
Clients,ClientIP = CmdObj.accept()#等待客户端的连接.........
#并获得连接句柄Clients,和连接地址信息ClientIP
Clients.send(("您当前的登陆IP地址为:%s"%(ClientIP[0])).encode("utf8"))
#发送给客户端欢迎信息
while True:
try:
CmdScript = Clients.recv(1024)#接收客户端传来的bytes数据
if not CmdScript : continue#如果为空跳出本次循环,避免服务端和粗线死循环情况
if(CmdScript.decode("utf8") == "egon"):#这里是个趣味性代码,认真学习者可忽略
Clients.send("SomeBody不是一个有效的dos命令!".encode("utf8"))
continue
Res = subprocess.Popen(CmdScript.decode("utf8"),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#实例化subprocess对象,获得由客户端发来的命令执行后的结果
ResData = Res.stdout.read()#读取命令执行成功的结果
if not ResData:#如果读取命令执行成功的结果失败
ResData = Res.stderr.read()#则读取命令执行失败的结果
Clients.send(ResData)#将结果返回给客户端,这里由于是在windows下所以默认的bytes编码格式是gbk
except Exception as e:
print(e)
break
Clients.close()
CmdObj.close()

服务器端代码

以上,仅供参考,还是希望大家可以写出属于自己的完美代码

python练习-Socket实现远程cmd命令的更多相关文章

  1. Python之路 - Socket实现远程执行命令

    Python之路 - Socket实现远程执行命令 os模块实现

  2. python之实现批量远程执行命令(堡垒机)

    python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...

  3. python安装后无法用cmd命令pip 装包

    出现问题: 原因:没有添加环境变量. 解决方法:将python安装目录下的Script目录添加进环境变量,其中有pip.exe,在cmd中输入pip install命令时要运行pip.exe. win ...

  4. 【python】用python脚本Paramiko实现远程执行命令、下载、推送/上传文件功能

    Paramiko: paramiko模块,基于SSH用于连接远程服务器并执行相关操作. SSHClient: 用于连接远程服务器并执行基本命令 SFTPClient: 用于连接远程服务器并执行上传下载 ...

  5. python之socket运用之执行命令

    服务端的代码 import socket import subprocess HOST = "127.0.0.1" PORT = 5001 ip_bind = (HOST,PORT ...

  6. python 过滤 b'及提取 cmd命令返回值

    #!/usr/bin/env python # -*- coding:utf-8 -*- import subprocess import datetime plist = [] p = subpro ...

  7. opencv3+python+pycharm报错问题(cmd命令正常)

    2018-03-0223:58:59 首先在你已成功安装python的情况下运行cmd命令,下载安装opencv插件 如果在命令行可以使用 import cv2 但是在IDE上面只输入import c ...

  8. python的socket的学习

    一.Socket相关知识 1.socket是什么: socket是应用层与TCP/IP协议族通信的中间软件抽象层,他是一组接口.在设计模式中,Socket其实就是一个门面模式. 它把复杂的TCP/IP ...

  9. python开发socket套接字:套接字&通信循环&链接循环&模拟远程命令

    一,套接字 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Socket ...

随机推荐

  1. java中为什么要进行对象序列化?

    序列化其实很好理解,假如你现在做一个项目,项目是分工合作的,并且你喝其他小组成员不在同一个城市,那么你要如何把你写的那些类给其他小组成员呢?这个时候就要用到序列化了,简单的说:序列化就是将内存中的类或 ...

  2. MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题

    问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下: 1 2 3 4 5 6 7 +-------+----------+------+-----+ ...

  3. SGU438_The Glorious Karlutka River =)

    好题,有一些人在河的一边,想通过河里的某些点跳到对岸去.每个点最多只能承受一定数量的人,每人跳跃一次需要消耗一个时间.求所有人都过河的最短时间. 看网上说是用了什么动态流的神奇东东.其实就是最大流吧, ...

  4. OpenSSL 自签名证书

    通过下面9步,可以轻松生成自签名证书. 1.安装.部署OpenSSL 略 2.创建文件夹(下面通常root文件夹).用来放即将创建的各种证书等.如:I:\Key10.167.219.64 3.在roo ...

  5. BZOJ3173 TJOI2013最长上升子序列(splay)

    容易发现如果求出最后的序列,只要算一下LIS就好了.序列用平衡树随便搞一下,这里种一棵splay. #include<iostream> #include<cstdio> #i ...

  6. logstash5生成init脚本后台启动

    默认情况使用rpm包安装完logstash之后没有启动脚本,这一点我觉得算是开发不够彻底.官网给了一个脚本,需要根据不同的系统版本生成对应的启动脚本,而且官网没有给明使用方法,对于新用户来说算是个坑, ...

  7. android与H5互相调用

    市面上很多android软件都有内嵌H5的,主要是为了节约成本,提高开发效率,其实现原理主要是通过Java代码和JavaScript代码的互相调用来实现. Java调用Js 1,webview初始化: ...

  8. echarts彩虹柱状图 每个bar显示不同颜色, 标题在不同位置 ,工具中有可以直接保存为图片下载,平均线的添加

    可以参考: https://echarts.baidu.com/echarts2/doc/example.html https://echarts.baidu.com/echarts2/doc/doc ...

  9. shopt

    本文出自 “Mr_Computer” 博客,请务必保留此出处 Bash Shell有个extglob选项,开启之后Shell可以另外识别出5个模式匹配操作符,能使文件匹配更加方便. 开启方法很简单,使 ...

  10. python基础3--字符串

    字符串 1.大小写转换 >>> name 'bigberg' >>> name.capitalize() # 首字母大写 'Bigberg' >>> ...