Python:通过Socket让远程电脑执行某些命令
2017-09-02 16:00
459 查看
注意,本文是py2。py3可能略有不同。
没得办法,公司用的是py2……
需求。
电脑A想向电脑B、C、D发送指令,然后B、C、D响应指令,执行一些操作。
想法:写一个socket server端,部署在B、C、D上。
然后控制机A,利用socket client向B、C、D发指令,
之后,B、C、D接收响应并执行。
但是,当被控制的机器开启socket server以后,
任意一台机器都可以向它发指令让它响应,
很恐怖啊……
想法:加个白名单,凡是不在白名单列表中的IP,就过滤掉它们的指令。
最后,被控制的电脑还要打开端口,因为有个防火墙!!!!!!!!!
当控制机A发送quit的时候,受控机B、C、D退出socket server。
注意1:'quit' == msg 还是 '"quit"' == msg,到时候可以测试一下。可能不会成功。
注意2:绑定IP一定要绑定cmd中查询到的IP,不要绑定localhost,否则不会成功。
注意3:一定要开启防火墙的端口。不然,无法访问。
注意4:cmd的ping,只能ping IP,不能ping端口。ping是网络层的,port是传输层的。
Socket Server
Socket Client
防火墙
控制面板\系统和安全\Windows 防火墙
点击高级设置
入站规则
添加一个入站规则。开启一个端口,TCP。
开机自动启动
写一个bat文件,然后把bat文件扔到“启动”文件夹里面,就可以开机启动了。
在我的电脑上,这个“启动”文件夹的位置是:
C:\Users\qcy\AppData\Documents and Settings\All Users\「开始」菜单\程序\启动
BAT文件这样写。
先进到某个路径,然后启动xxx
@echo off
F:
F:\source_files\quant\remote_pc_control
start C:\ProgramData\Anaconda3\envs\py2\python.exe sock_server.py
exit
隐藏窗口
最后,如果想让被控制机没有cmd那个黑窗口,可参考以前的文章,
Review:Python:运行时隐藏窗口
没得办法,公司用的是py2……
需求。
电脑A想向电脑B、C、D发送指令,然后B、C、D响应指令,执行一些操作。
想法:写一个socket server端,部署在B、C、D上。
然后控制机A,利用socket client向B、C、D发指令,
之后,B、C、D接收响应并执行。
但是,当被控制的机器开启socket server以后,
任意一台机器都可以向它发指令让它响应,
很恐怖啊……
想法:加个白名单,凡是不在白名单列表中的IP,就过滤掉它们的指令。
最后,被控制的电脑还要打开端口,因为有个防火墙!!!!!!!!!
当控制机A发送quit的时候,受控机B、C、D退出socket server。
注意1:'quit' == msg 还是 '"quit"' == msg,到时候可以测试一下。可能不会成功。
注意2:绑定IP一定要绑定cmd中查询到的IP,不要绑定localhost,否则不会成功。
注意3:一定要开启防火墙的端口。不然,无法访问。
注意4:cmd的ping,只能ping IP,不能ping端口。ping是网络层的,port是传输层的。
Socket Server
#-*- coding: utf-8 -*- import socket import os import threading from urllib import unquote import ctypes import datetime local_ip = '192.168.36.252' # 配置socket server绑定的本地IP local_port = 43218 # 配置socket server绑定的本地端口 print 'server starting...' server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((local_ip, local_port)) server.listen(5) # 只响应白名单中的计算机发来的任务 # admin_filter的key() admin_filter = {} admin_filter['192.168.36.252'] = {'exe'} admin_filter['192.168.33.113'] = {'exe'} admin_filter['127.0.0.1'] = {'exe'} def exe_prog(msg): # 路径由空格,加上引号就好了 -_-!!!!! # os.system(u"\"C:\Program Files (x86)\TTPlayer\TTPlayer.exe\"".encode("gbk")) os.system(msg) # os.system("C:\ProgramData\Anaconda3\envs\py2\python.exe F:\\source_files\\quant\\remote_pc_control\\exe_calc.py") while 1: conn, addr = server.accept() msg = unquote(conn.recv(1024).decode('utf-8')) peer_name = conn.getpeername() sock_name = conn.getsockname() # peer_name是个tuple,peer_name[0]是ip,peer_name[1]是端口号 now_dt = str(datetime.datetime.now()) print u'%s, visitor: %s:%s'%(now_dt, peer_name[0],peer_name[1]) # , sock_name # 所谓的白名单,管理员权限验证 if peer_name[0] in admin_filter.keys(): # print msg, 'quit'==msg, u'quit'==msg, u'quit'==str(msg), 'quit' == str(msg) if '"quit"' == msg: # 可能是 'quit' 可能是 '"quit"' …… 自己检验一下 conn.close() exit(0) t = threading.Thread(target=exe_prog,args=(msg,)) t.start() # conn.send('server: I received '+msg)
Socket Client
#-*- coding: utf-8 -*- import socket from urllib import quote def send_cmd(instr): try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('192.168.33.113', 43218)) client.settimeout(5) client.sendall(quote(instr).encode('utf-8')) except Exception as e: print e finally: client.close() msg = u"python.exe c:\\users\\admin\\desktop\\test.py" send_cmd('notepad')
防火墙
控制面板\系统和安全\Windows 防火墙
点击高级设置
入站规则
添加一个入站规则。开启一个端口,TCP。
开机自动启动
写一个bat文件,然后把bat文件扔到“启动”文件夹里面,就可以开机启动了。
在我的电脑上,这个“启动”文件夹的位置是:
C:\Users\qcy\AppData\Documents and Settings\All Users\「开始」菜单\程序\启动
BAT文件这样写。
先进到某个路径,然后启动xxx
@echo off
F:
F:\source_files\quant\remote_pc_control
start C:\ProgramData\Anaconda3\envs\py2\python.exe sock_server.py
exit
隐藏窗口
最后,如果想让被控制机没有cmd那个黑窗口,可参考以前的文章,
Review:Python:运行时隐藏窗口
相关文章推荐
- 通过python socket远程执行命令 4000 ,并返回值
- 通过python socket远程执行命令,并返回值
- python socket 实现远程执行命令 上传 下载文件
- Python socket套接字实现C/S模式远程命令执行功能案例
- python socket c/s远程命令执行案例
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python paramiko实现多线程远程执行命令、多线程远程上传文件、多线程远程下载文件
- Windows下通过SSH使用SharpSSH远程登录主机执行命令传输文件
- python paramiko实现多线程远程执行命令、多线程远程上传文件、多线程远程下载文件
- python 远程执行命令、上传、下载举例
- python远程执行命令
- python模块paramiko的上传下载和远程执行命令
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- 基于TCP_socket套接字实现远程执行命令
- Git 远程仓库(Github) Git 并不像 SVN 那样有个中心服务器。 目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要
- Python pexpect通过ssh批量登录并执行命令
- Socket远程执行命令并结果回传(客户端)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python利用paramiko连接远程服务器执行命令的方法
- Python远程执行Linux命令