• 基于TCP_socket套接字实现远程执行命令


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

    ——客户端敲命令,服务端执行

    #服务端
     
    import socket
    import subprocess
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ip_port=("127.0.0.1",8080)
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    phone.bind(ip_port)
    phone.listen(5)
     
    while True:
        conn,addr=phone.accept()
        print(addr)
        while True:
            try:
                cmd=conn.recv(1024)
                res=subprocess.Popen(cmd.decode("utf8"),
                                     shell=True,
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE)
     
    #注释掉的这么多行,是因为在linux系统下同时执行多条命令,命令中如果有对有错的话res.stderr.read()和res.stdout.read()都会有返回值。
                #err=res.stderr.read()       
                #if err:
                #   cmd_res=err
                #else:
                #    cmd_res=res.stdout.read()
                #conn.send(cmd_res)
    #修改为:
                conn.send(res.stdout.read())
                conn.send(res.stderr.read())
     
            except Exception:
                break
        conn.close()
    phone.close()
    #客户端
     
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(("192.168.85.129",8080))
    while True:
        cmd=input(">>:").strip()
        if not cmd:continue
        phone.send(cmd.encode("utf8"))
        data=phone.recv(8192)        #当命令行打印的东西太长时,接收超过1024,所以这里修改为8192
        print(data.decode("utf8"))        #当服务端运行在linux系统下,为utf8;服务端在windows下运行时,为gbk
     
    phone.close()

    当服务端运行在Windows系统下,若客户端发送给服务端识别window系统的命令,服务端将执行windows系统命令的结果发送给客户端显示,不能识别的则发送错误信息给客户端。

    同样当服务端在linux系统下运行,若客户端发送给服务端识别linux系统的命令,服务端将执行windows系统命令的结果发送给客户端显示,不能识别的则发送错误信息给客户端。

  • 相关阅读:
    Go语言学习资源
    优秀编程学习网站
    我对架构的理解
    【转】TCP协议中的三次握手和四次挥手(图解)
    【转】asp.net c# 网上搜集面试题目大全(附答案)
    spring framework 4 源码阅读
    浮点类型
    把二元查找树转变成排序的双向链表
    用模板写快速排序-链表
    用模板写快速排序-数组
  • 原文地址:https://www.cnblogs.com/bigtreei/p/7929750.html
Copyright © 2020-2023  润新知