python -- TCP "远程控制"

python -- TCP "远程控制"  指:先建立连接,再通过命令进行远程控制服务器。

在虚拟机的代码程序

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
import os

HOST = "192.168.1.185"
POST = 5000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
addr = (HOST,POST)
s.bind(addr)
s.listen(1)
conn,addr = s.accept()
def getwinfile():
    conn.send("我准备好接收了")
    filename = conn.recv(1024)
    fdata = conn.recv(20480)
    with open(filename,"wb") as f:
        f.write(fdata)
    conn.send("finsh")

def putlinuxfile():
    conn.send("我准备好传输了")
    file = conn.recv(1024)
    with open(file,"rb") as f:
        fdata = f.read()
    conn.send(fdata)
    conn.send("finsh")
def main(addr):
    print(addr)
    while True:
        data = conn.recv(1024)
        print(data)
        if data == "byebye":
            break
        if data == "wycf":
            getwinfile()
            continue
        if data == "wysf":
            putlinuxfile()
            continue
        f = os.popen(data)
        ret = f.read()
        if ret:
            conn.send(ret)
        else:
            conn.send("finish")
    conn.close()
    s.close()

if __name__ =="__main__":
    main(addr)

在真实机里面的代码程序

import socket

HOST = "192.168.1.185"
PORT = 5000
addr = (HOST,PORT)
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.connect(addr) #连接服务器
def putfile():
    data = c.recv(1024)
    print(str(data,encoding="utf8"))
    file = input("请输入文件和路径:")
    filename = file.split("\\")[-1]
    c.send(bytes(filename,encoding="gbk"))
    with open(file,"rb") as f:
        fdata = f.read()
    c.send(fdata)
    data2 = c.recv(1024)
    print(str(data2,encoding="utf8"))

def getfile():
    data = c.recv(1024) #接收对方的准备信息
    print(str(data,encoding="utf8")) #打印
    file = input("请输入对方的文件和路径:")
    c.send(bytes(file,encoding="gbk")) #发送文件名和路径
    filename = file.split("/")[-1] #获取文件名
    fdata = c.recv(20480) #准备接收文件数据
    with open(filename,"wb") as f:
        f.write(fdata) #建立文件
    data2 = c.recv(1024) #接收完成回应消息
    print(str(data2,encoding="utf8"))

def main(addr):
    while True:
        cmd = input("请输入命令:")
        c.send(bytes(cmd,encoding="gbk")) #将命令转换后发送
        if cmd == "byebye": #如果发送byby就退出连接
            break
        if cmd == "wycf":
            putfile()
            continue
        if cmd == "wysf":
            getfile()
            continue
        ret = c.recv(20480)
        #print(str(ret,encoding="gbk"))
        print(str(ret,encoding="utf8")) #收到的信息显示
    c.close()
    
if __name__ == "__main__":
    main(addr)

猜你喜欢

转载自blog.csdn.net/thj_1995/article/details/83443454