python socket c/s远程命令执行案例
来源:互联网 发布:搜索霸屏js代码 编辑:程序博客网 时间:2024/06/05 05:32
一. 前言
要求:
使用python的socket套接字编写服务器/客户机模式的远程命令执行脚本。
serverCmd.py 远程机器上用来执行客户端发送命令的脚本clientCmd.py 本地机器上,向远程服务器发送命令的脚本servers.txt 本地机器上,存放所有的远程服务器IP地址文件(仅支持第一个IP)发送:cmd [command]形式消息,让远程主机执行命令(本地主机无回显)发送:close session消息,双方关闭会话。
二. 源码
下载地址: 点击下载
注:
1. 代码注释较少,建议有一定套接字编程基础。
2. 或者直接简单部分修改IP使用。
3. clientCmd.py和servers.txt(修改IP地址后)放在同一目录。
4.程序为简单Demo,仅为学习记录。
serverCmd.py
#!/usr/bin/env python# coding:utf-8# Build by LandGrey#import timeimport socketimport threadingimport tracebackimport subprocessdef parsecmd(strings): midsplit = str(strings).split(" ") if len(midsplit) >= 2 and midsplit[0] == "cmd": try: command = subprocess.Popen(strings[4:], shell=True) command.communicate() print "\n" except Exception, e: print e.message traceback.print_exc()def recvdata(port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(('', port)) s.listen(1) print "[+] Server is running on port:%s at %s" % (str(port), time.strftime("%Y%m%d %H:%M:%S", time.localtime())) while True: mainsocket, mainhost = s.accept() print "[+] Connect success -> %s at %s" % (str(mainhost), time.strftime("%Y%m%d %H:%M:%S", time.localtime())) if mainhost: while True: data = mainsocket.recv(1024) if data: print "[+] Receive:%s" % data mainsocket.sendall("[Server]success") parsecmd(data) if data == "close session": mainsocket.close() print "[+] Quit success" break breakif __name__ == "__main__": # some public variable connPort = 47091 onethreads = threading.Thread(target=recvdata, args=(connPort,)) onethreads.start()
clientCmd.py
#!/usr/bin/env python# coding:utf-8# Build by LandGrey#import timeimport socketdef readtarget(): global server_list with open(r"servers.txt") as f: for line in f.readlines(): if line[0:1] != "#" and len(line.split(".")) == 4: server_list.append(line)def connserver(host, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) while True: print "\n[*] Please input command:" data = raw_input() if not data: break s.sendall(data) recvdata = s.recv(1024) print "[+] Send %s:%s -> %s" % (host, str(connPort), data) time.sleep(0) if recvdata: print "[+] Receive :%s" % recvdata if data == "close session": s.close() breakif __name__ == "__main__": server_list = [] connPort = 47091 readtarget() if server_list != []: for host in server_list: connserver(host, connPort)
servers.txt
# server ip list192.168.0.139
三. 运行效果
python serverCmd.py
[+] Server is running on port:47091 at 20161013 17:50:19[+] Connect success -> ('192.168.0.241', 4255) at 20161013 17:50:32[+] Receive:hello[+] Receive:你好[+] Receive:cmd ip'ip' 不是内部或外部命令,也不是可运行的程序或批处理文件。[+] Receive:cmd ipconfigWindows IP 配置以太网适配器 本地连接: 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : ****::****:****:****:******* IPv4 地址 . . . . . . . . . . . . : 192.168.0.139 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 192.168.0.1隧道适配器 isatap.{****-6122-4F83-8828-****}: 媒体状态 . . . . . . . . . . . . : 媒体已断开 连接特定的 DNS 后缀 . . . . . . . :[+] Receive:cmd ping www.baidu.com正在 Ping www.a.shifen.com [180.97.33.108] 具有 32 字节的数据:来自 180.97.33.108 的回复: 字节=32 时间=66ms TTL=36来自 180.97.33.108 的回复: 字节=32 时间=66ms TTL=36来自 180.97.33.108 的回复: 字节=32 时间=64ms TTL=36来自 180.97.33.108 的回复: 字节=32 时间=65ms TTL=36180.97.33.108 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 64ms,最长 = 66ms,平均 = 65ms[+] Receive:要结束了[+] Receive:close session[+] Quit success
python clientCmd.py
[*] Please input command:hello[+] Send 192.168.0.139:47091 -> hello[+] Receive :[Server]success[*] Please input command:你好[+] Send 192.168.0.139:47091 -> 你好[+] Receive :[Server]success[*] Please input command:cmd ip[+] Send 192.168.0.139:47091 -> cmd ip[+] Receive :[Server]success[*] Please input command:cmd ipconfig[+] Send 192.168.0.139:47091 -> cmd ipconfig[+] Receive :[Server]success[*] Please input command:cmd ping www.baidu.com[+] Send 192.168.0.139:47091 -> cmd ping www.baidu.com[+] Receive :[Server]success[*] Please input command:要结束了[+] Send 192.168.0.139:47091 -> 要结束了[+] Receive :[Server]success[*] Please input command:close session[+] Send 192.168.0.139:47091 -> close session[+] Receive :[Server]success
0 0
- python socket c/s远程命令执行案例
- 通过python socket远程执行命令,并返回值
- Python:通过Socket让远程电脑执行某些命令
- python 多线程远程执行命令
- Python远程执行Linux命令
- linux 下远程执行命令 socket实现
- java socket远程控制主机,执行命令
- Python 3.6 socket 简单远程命令CS
- Python ssh 远程执行shell命令
- python socket的c/s模式
- Socket编程下篇-----TCP协议的C/S案例
- 用socket通讯执行远程命令-linux实例
- Socket远程执行命令并结果回传(客户端)
- Socket远程执行命令并结果回传(服务端)
- Linux下用socket实现远程执行命令
- C语言 Socket入门示例2——模拟远程CMD(客户端向服务器发送命令,服务端执行该命令)
- python 利用pexpect进行多机远程命令执行
- python模块paramiko的上传下载和远程执行命令方法
- SpringMVC+Shiro权限管理
- 2016/10/13工作中有关js加载的注意事项
- Python:unittest单元测试框架(一)
- python输出斐波那契数列三角形
- 成为Java顶尖程序员 ,看这11本书就够了
- python socket c/s远程命令执行案例
- position:absolute 脱离文档流的真实含义
- node.js学习之路(一)之“面向对象的JavaScript入门”
- jdbc
- 欢迎使用CSDN-markdown编辑器
- AngularJS(二)——常见指令以及下拉框实现
- 坚持#第65天~要有上进心
- JavaScript冒泡事件和stopPropagation方法
- Qt之解析XML(QXmlStreamReader)