zoukankan      html  css  js  c++  java
  • day46——使用 Socket 执行远程命令

    编写一个程序,实现客户端能在服务端远程执行命令,并把命令结果在客户端打印出来

    服务端:192.168.5.131
    客户端:192.168.5.134

     1 [root@localhost ~]# cat client.py 
     2 #!/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 
     5 import sys
     6 import tab        # tab模块用于让客户端支持命令tab补齐,需要自己编写该模块,参考:tab.py
     7 import socket
     8 
     9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   
    10 s.connect(('192.168.5.131', 1234))
    11 
    12 while True:
    13     cmd = raw_input('Please input command: ').strip()
    14     if cmd == 'exit' or cmd == 'quit':
    15         sys.exit()
    16     if cmd:
    17         s.sendall(cmd)
    18         data = s.recv(1024)
    19         print data
    20 
    21 s.close()
     1 [root@localhost ~]# cat server.py 
     2 #!/usr/bin/env python
     3 #-*- coding: utf8 -*-
     4 
     5 import socket
     6 from subprocess import Popen, PIPE
     7 
     8 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     9 s.bind(('192.168.5.131', 1234))
    10 s.listen(5)
    11 connect, address = s.accept()
    12 
    13 while True:
    14     cmd = connect.recv(1024)
    15     p = Popen(cmd, stdout=PIPE, stderr=PIPE)
    16     stdout = p.stdout.read()
    17     stderr = p.stderr.read()
    18     if stdout:
    19         connect.sendall(stdout)
    20     elif stderr:
    21         connect.sendall(stderr)
    22         
    23 s.close()

    先运行 server.py ,然后在客户端执行远程命令:

     1 [root@localhost ~]# python client.py 
     2 Please input command: ls
     3 anaconda-ks.cfg
     4 client.py
     5 install.log
     6 install.log.syslog
     7 server.py
     8 
     9 Please input command: df
    10 Filesystem     1K-blocks    Used Available Use% Mounted on
    11 /dev/sda3       20338948 1352204  17953580   8% /
    12 tmpfs             767420       0    767420   0% /dev/shm
    13 /dev/sda1          99150   27809     66221  30% /boot
    14 
    15 Please input command: exit
  • 相关阅读:
    idea删除module
    使用腾讯云mysql的一下小坑
    docker 从 tomcat 容器连接到 mysql 容器
    数据结构开发(16):选择排序和插入排序
    数据结构开发(15):递归的思想与应用
    数据结构开发(14):KMP 子串查找算法
    数据结构开发(13):字符串类的创建
    数据结构开发(11):双向循环链表的实现
    数据结构开发(10):Linux内核链表
    数据结构开发(9):循环链表与双向链表
  • 原文地址:https://www.cnblogs.com/yangjinbiao/p/8148948.html
Copyright © 2011-2022 走看看