zoukankan      html  css  js  c++  java
  • 作业

    基于TCP开发一款远程CMD程序
    客户端连接服务器后,可以向服务器发送命令
    服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端

    方法一:通过os模块

    服务端:

    import socket,os
    
    
    serve = socket.socket()
    serve.bind(('127.0.0.1',9527))
    serve.listen(5)
    #conn相当于服务端往客户端的的管道
    
    while True:
        conn, addr = serve.accept()
        print(f'{addr}successful connection')
        while True:
    
            try:
                cmd = conn.recv(1024)
                print(cmd.decode('utf-8'))
                if cmd == 'q':
                    break
                if not cmd:
                    print('Client is not connected')
                    break
                print(f'The command is {cmd}')
                data = os.popen(cmd.decode('utf-8')).read()
                #os.popen() 方法用于从一个命令打开一个管道
    
                conn.send(data.encode('utf-8'))
    
                # send_msg = input('server:').encode('utf-8')
                # conn.send(send_msg)
            except Exception as e:
                print(e)
                break
        conn.close()
    
    

    客户端:

    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9527))
    
    
    while True:
        msg = input('client:').strip()
        client.send(msg.encode('utf-8'))
        if msg == 'q':
            break
        data = client.recv(1024).decode('utf8')
        print(data)
    client.close()
    

    方法二:通过subprocess模块

    服务端

    import socket
    import subprocess
    
    # cmd_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    cmd_obj = socket.socket()
    cmd_obj.bind(('127.0.0.1',9527))
    cmd_obj.listen(5)
    while True:
        client,client_ip = cmd_obj.accept()
        print(client_ip)
    
        while True:
    
            cmd_script = client.recv(1024).decode('utf-8')
            if not cmd_script:
                continue
    
            if cmd_script == 'exit':
                break
    
            data = subprocess.Popen(cmd_script,shell = True,
                                   stdout = subprocess.PIPE,
                                   # stdin = subprocess.PIPE,
                                   stderr=subprocess.PIPE)
            stdout = data.stdout.read()
            stderr = data.stderr.read()
            res = stdout + stderr
            print(res)#这里得到的是二进制需要通过解码所以要在客户端以gbk进行解码,另外windows系统识别的是gbk格式的编码所以这个二进制是gbk转过来的
            client.send(res)
        client.close()
        break
    cmd_obj.close()
    

    客户端

    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9527))
    
    
    while True:
        msg = input('client:').strip()
        client.send(msg.encode('utf-8'))
        if msg == 'q':
            break
        data = client.recv(1024).decode('gbk')
        #data = bytes(data,encoding='utf-8')
        print(data)
    client.close()
    
    
  • 相关阅读:
    关于PHP写的投票网站之刷票风云
    《暗战强人:黑客及反黑客工具快速精通》学习笔记
    《Linux信息安全实用教程》学习笔记
    MySql的入侵测试以及防范
    基于Sql Server 2008的分布式数据库的实践(终结)
    Sql Server的弱口令入侵测试以及防范
    IPC$ 测试与防范
    基于Sql Server 2008的分布式数据库的实践(五)
    基于Sql Server 2008的分布式数据库的实践(四)
    基于Sql Server 2008的分布式数据库的实践(三)
  • 原文地址:https://www.cnblogs.com/ghylpb/p/11694282.html
Copyright © 2011-2022 走看看