文章目录

  • 实现目标
  • 服务端分析
  • 客户端分析
  • 远程执行结果

本篇是用tcp套接字实现的一个远程执行命令的小案例,tcp套接字是一种面向连接的Socekt,针对面向连接的TCP服务应用,安全,但是效率低

实现目标

首先客户端输入命令,然后从客户端发送命令,服务端接收客户端发来的命令,并且执行命令,然后返回执行结果给客户端

服务端分析

1、首先是少不了的socket模块;然后考虑到服务端需要执行命令,所以服务端要导入subprocess模块,该模块相当于在shell中输入命令并且执行命令,这里就是用来在windows系统中执行命令的

from socket import *
import subprocess
#导入subprocess模块,以达到通过命令来执行程序,类似一个shell

2、然后我们需要一个记录服务端ip地址,服务端端口和传输形式的变量

#定义ip地址、端口数、传输形式的变量
ip_port = ('192.168.43.247',8080)
back_log = 5
buffer_size = 1024

3、接着我们要创建一个socket对象,并且绑定上ip地址(自己试验的话就绑定自己电脑的ip地址),然后监听端口

#创建socket对象并且绑定ip地址,然后监听端口
tcp_server = socket(AF_INET,SOCK_STREAM)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)

4、最后就是核心部分了,实现功能的地方。先要接收客户端链接,之后客户端循环遍历收消息,然后执行收到的消息,该消息就是一个命令;
把该命令在服务端的计算机上执行,再将执行结果返回给客户端,就是发消息;
执行完之后就关闭链接,回到循环,继续接收客户端链接,再发消息…

#遍历循环收发消息
while True:conn,addr = tcp_server.accept()  #接收客户端链接print('客户端链接为:',addr)#实现远程执行命令while True:try:  #异常处理,主要针对收到空或者其他非法输入#收取对方发来的命令cmd = conn.recv(buffer_size)print('客户端发来的命令是:',cmd)#服务端执行命令res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr = subprocess.PIPE,stdout = subprocess.PIPE,stdin = subprocess.PIPE)#先解码收到的命令,再将命令的执行结果(错误信息、输出信息、输入信息)放到PIPE管道里err = res.stderr.read()  #读取错误信息if err:  #判断是否有错误信息,如果有就不进行读取操作(从管道读取到屏幕上)cmd_res = errelse:cmd_res = res.stdout.read()#发送消息,即发送远程执行结果conn.send(cmd_res)except Exception as e:print(e)  #输出异常信息break  #并且退出命令的执行conn.close()#命令执行结束后关闭链接,进入外层循环继续收发消息(链接)

客户端分析

1、首先导入模块,并且定义好链接、端口和发送形式的变量

from socket import *#定义ip地址、端口数、传输形式的变量
ip_port = ('192.168.43.247',8080)
back_log = 5
buffer_size = 1024

2、然后就是建立一个socket对象,并且通过服务端的ip连接上服务端

#建立一个socket对象
tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)  #链接服务端的ip

3、之后就可以进入主要功能了,就是循环收发消息;
要先让用户输入命令,再将命令发送到服务端,最后接收服务端传回来的消息,也就是命令在服务端执行的结果

#进入循环收发消息
while True:cmd = input('请输入您的命令>>>').strip()  #输入命令,并将命令去掉空格if not cmd:continue  #如果输入的命令为空,就继续下次循环if cmd == 'quit': break  #如果输入quit就退出循环#将命令发送到服务端tcp_client.send(cmd.encode('utf-8'))#接收远程执行结果cmd_res = tcp_client.recv(buffer_size)print('命令的执行结果是:',cmd_res.decode('gbk'))#打印执行结果,因为是在win系统下,所以结果的默认编码是gbk编码

4、最后,就是关闭客户端与服务端的链接

tcp_client.close()  #关闭链接

远程执行结果


可以看到,程序运行正常,需要的功能也实现了。客户端输入dir,该命令的意思是“显示文件列表”,显示程序所在文件夹内的文件信息。可以看到客户端上成功显示出了程序所在文件夹的文件信息

Python之网络编程(基于tcp实现远程执行命令)相关推荐

  1. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  2. Python之网络编程(TCP套接字与UDP套接字)

    文章目录 基于tcp的套接字 实现目标 tcp服务端源码 tcp客户端源码 tcp效果实现 基于udp的套接字 udp作用介绍 udp服务端源码 udp客户端源码 udp效果实现 用udp实现一个时间 ...

  3. Linux网络编程——基于tcp/ip的模拟聊天(文件传输)工具

    开发平台:Linux 开发工具:Ubuntu, sourceInsight4.0 项目介绍: 本项目基于TCP/IP协议创建一个网络通信系统,可以实现客户之间的聊天通信以及文件传输,同时利用进程实现多 ...

  4. step5 . day6 网络编程 基于TCP协议的多并发模式(使用多进程、多线程、select函数分别实现)...

    实现TCP服务器端多路并发的方法有①多进程②多线程③IO多路复用(select poll epoll函数) 1.多进程实现并发模式(仅在服务器端更改之前代码实现) 服务器端 #include < ...

  5. python利用paramiko实现ssh连接及远程执行命令

    python3.6, windows下 1,安装paramiko模块 依赖cryptography:使用命令easy_install安装该模块时,如果报错"...microsoft visu ...

  6. linux 带环境变量 远程执行,SSH远程执行命令环境变量问题

    SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...

  7. python网络编程自学_五分钟搞定Python网络编程实现TCP和UDP连接

    Python网络编程实现TCP和UDP连接, 使用socket模块, 所有代码在python3下测试通过. 实现TCP#!/usr/bin/env python3 # -*- coding: utf- ...

  8. c++网络编程——用TCP实现文件传输(windows下基于VS2017)

    c++网络编程--用TCP实现文件传输 定义文件传输协议 服务端代码 客户端代码 测试 文件传输协议FTP是基于TCP协议实现的,为了体验这个过程,本文自定义一个简单的文件传输协议,并基于TCP协议编 ...

  9. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

最新文章

  1. 文件的记录c语言程序,计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示...
  2. 知识图谱前沿跟进,看这篇就够了,Philip S. Yu 团队发布权威综述,六大开放问题函待解决!...
  3. SAP战略中的机器学习
  4. 十大成长性人工智能技术!
  5. php手机接口购物车怎么实现,php购物车的实现原理
  6. win8编程c语言,Win8系统怎么运行C语言 win8系统运行C语言的方法
  7. .NET 设计规范--.NET约定、惯用法与模式--5.成员设计
  8. 图像欧拉数计算 matlab实现
  9. scopt解析参数实例
  10. CSS border dashed 虚线调整
  11. “21 天好习惯”第一期-2 2021牛客暑期多校训练营10 F、Train Wreck
  12. 龙卷风路径_ae龙卷风路径
  13. 课程体系包括哪些要素_大数据课程体系和课程内容建设研究
  14. 华为路由器负载均衡_华为 AR路由 策略路由 多WAN环境下指定出口
  15. MySQL时间序列分表分区_干货丨时序数据库分区教程
  16. 6360. 【NOIP2019模拟2019.9.18】最大菱形和(rhombus)
  17. python小波包分解_小波包获得某个节点信号的几个细节问题
  18. csv文件缺失值和空值的填充和删除
  19. 经典VU仪表的混音效果工具
  20. Web3.0时代来临。企业该如何无痛接轨、加值商模?

热门文章

  1. SQL语句操作优先级顺序
  2. 项目中查询数据和模糊查询
  3. 我的世界中国版服务器无限夜视,我的世界中国版怎么无限夜视_我的世界夜视药水怎么合成_我的世界怎么永久夜视...
  4. 我的世界服务器启动后自动关闭,求解,服务器老师莫名其妙自动关闭,为什么会这样呢?...
  5. 计算仰角_41页最新全站仪测量方法及计算+图文解说,助你轻松掌握测量
  6. 角速度求积分能得到欧拉角吗_高中物理竞赛典型例题精讲——中垂平面内电荷圆周运动角速度...
  7. dos命令窗口光标闪烁_10 分钟上手 Vim,常用命令大盘点
  8. 计算机教师自检自查报告,信息技术教学工作自查报告
  9. c语言 抽奖算法,腾讯2018校招笔试!抽奖算法思路c++实现!进入鹅厂真的简单!...
  10. 细胞增殖曲线_两种月龄近交系五指山小型猪脂肪间充质干细胞生物学特性的比较...