利用Py-Socket模块做的一个不登陆windows服务器自动实现替换或者调用自动拨号功能...
xu言:
最近,有个朋友让我帮忙“搞点事情”,然后正好在学习socket模块,这个模块666啊,基本上可以实现远程服务器cmd shell的大部分功能。好,话不多说,直接上码~
由于很多电信运营商都会封杀UDP端口,外网服务器这种就不建议使用UDP端口了。直接使用TCP来实现,那么还有一个问题。windows的拨号和把账号填入adsl客户端上面的方法怎么处理呢?
cmd自带命令:
rasdial 宽带连接 /disconnect && rasdial 宽带连接 %s %s
三方工具:
http://www.nirsoft.net/utils/dialupass.html
Dialupass /setpass 宽带连接 %s %s
如果以上两个命令你都搞清楚是什么了,那么下面代码就很好写了:
Server:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki"import json import socket import struct import subprocess import times_ip = ("0.0.0.0", 19999) c_time = time.strftime("%Y-%m-%d %X", time.localtime())win_ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM) win_ser.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) win_ser.bind(s_ip) win_ser.listen(5) print('Server listening begin ,port %s' % s_ip[1])# get socket while 1:conn, address = win_ser.accept()while 1:try:cmd = conn.recv(1024)print('Receive client[%s] command : %s %s' % (address, cmd, c_time))client_cmd = cmd.decode('utf-8')client_cmd = client_cmd.split()cmd_len = len(client_cmd)if cmd_len == 3 and client_cmd[0] == 'Dial':username = client_cmd[1]password = client_cmd[2]# command = "echo %s %s" % (username, password) # command = "rasdial 宽带连接 /disconnect && rasdial 宽带连接 %s %s" % (username, password)command = "Dialupass /setpass 宽带连接 %s %s" % (username, password)cmd_execute = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout = cmd_execute.stdout.read()stderr = cmd_execute.stdout.read()# if not cmd:# break# DIY headheader_dict = {'total_size': len(stdout) + len(stderr),'filename': None}header_bytes = json.dumps(header_dict).encode('utf-8')# Send head lengthheader_len = struct.pack('i', len(header_bytes))conn.send(header_len)# Send head conn.send(header_bytes)# conn.send(cmd_execute)# Send data conn.send(stdout)conn.send(stderr)else:print('hello...')stdout = 'Please input correct command!Format:Dial <username> <password>'.encode('utf-8')# DIY headheader_dict = {'total_size': len(stdout),'filename': None}header_bytes = json.dumps(header_dict).encode('utf-8')# Send head lengthheader_len = struct.pack('i', len(header_bytes))conn.send(header_len)# Send head conn.send(header_bytes)# conn.send(cmd_execute)# Send data conn.send(stdout)except Exception as e:print(e)breakconn.close() # win_ser.close()
Client:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki"import json import socket import structc_ip = ('127.0.0.1', 19999) win_cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) win_cli.connect(c_ip)while 1:mes = input('>>').strip()if mes == 'Quit':breakif not mes:continuewin_cli.send(mes.encode('utf-8'))# receive head lengthres_head_len = win_cli.recv(4)# unpack head length# print(res_head_len, type(res_head_len))head_size = struct.unpack('i', res_head_len)[0]# receive head length contentheader_bytes = win_cli.recv(head_size).decode('utf-8')# to head dic jsonheader_json = json.loads(header_bytes)# get data lengthdata_size = header_json['total_size']# receive data to the length of the headerreceive_size = 0total_data = b''while receive_size < data_size:data_receive = win_cli.recv(1024)if (data_size - len(data_receive)) < 1024:left_data = win_cli.recv(data_size - len(data_receive))total_data += left_datatotal_data += data_receivereceive_size += len(data_receive)print(total_data.decode('GBK'))
Warp-up:
1.期间遇到系统是xp、win2003大部分都是32位,建议编译的时候使用最高不能超过python34版本
2.为了更好的配合windows服务启动 使用pyinstaller -F 把py代码转换为exe
3.使用exe to 服务包把exe程序作为服务启动(期间用到:instsrv.exe <服务名> x:\xxx\srvany.exe,并且自己创建注册表项Parameters.项下面需要2个字符串值AppDirectory(目录路径)和Application(绝对路径)),添加服务成功后还需要在相应创建的服务上 服务-属性-登陆-打勾“服务与桌面交互”
遗留问题,如何配合服务关闭的时候kill掉这个socket的server进程。感觉还有很多地方都可以用到,比如监控、比如自动化执行某些任务。。。当然,安全问题也需要深入研究。避免被恶意利用做非法用途。以上代码仅供学习研究之用,切勿做非法用途!
转载于:https://www.cnblogs.com/Cong0ks/p/9618232.html
利用Py-Socket模块做的一个不登陆windows服务器自动实现替换或者调用自动拨号功能...相关推荐
- 我使用pangu模块做了一个文本格式化小工具!
其实使用pangu做文本格式标准化的业务代码在之前就实现了,主要能够将中文文本文档中的文字.标点符号等进行标准化. 阅读全文 但是为了方便起来我们这里使用了Qt5将其做成了一个可以操作的页面应用,这样 ...
- 利用vue-awesome-picker模仿支付宝做的一个时间控件
vue-awesome-picker 做时间控件的时候 好像只有点确定 才可以返回值 滑动时间的时候好像没有事件可以调用于是把他的源码直接拿过来用一下 做成组件形式 <template> ...
- 做了一个pichome的windows绿色版,解压即用,方便快速测试。
PicHome是一个可以把素材文件目录快速生成素材网站的WEB程序.它不仅支持普通的文件目录,还支持Eagle素材库,Billfish素材库目录,并支持这些软件中的标签,颜色,描述等信息.生成的网站可 ...
- 利用Xshell实现非对称秘钥对安全登陆linux服务器(Centos、Ubuntu)
非对称加密算法简述: 对称加密算法在加密和解密时使用的是同一个秘钥:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private ke ...
- boost::lexical_cast模块将创建一个to_long_double方法,将 Boost.Variant 的值转换为long double
boost::lexical_cast模块将创建一个to_long_double方法,将 Boost.Variant 的值转换为long double 实现功能 C++实现代码 实现功能 boost: ...
- linux i2c 端口 usb,做了一个电容屏的IIC接口转USB
做了一个电容屏的IIC接口转USB [复制链接] 实现的功能:电容屏的触控芯片一般对外接口为IIC接口,无法在windows/linux等电脑主机上直接使用,通过增加一颗转接芯片实现IIC接口转免驱U ...
- 如何搭建一个自己的音乐服务器
点赞再看,动力无限. 微信搜「 程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 最近发现,经常用的网易云音乐,有很 ...
- 我的Go语言学习之旅八:创建一个简单的WEB服务器
因为一直在做WEB程序,所以更关注WEB界的发展,这里就用GO做了一个简单的WEB服务器,直接看例子吧 package main import ( "fmt" "net/ ...
- Python Day 70 利用Django框架做的一个bbs小项目
##项目开发流程 #1.项目需求分析产品经理+架构师+开发经理/组长 去到客户的公司谈需求(博弈的过程) #2.项目架构设计 架构师设计(数据库(主库:MySQL,从库:redis,mongodb), ...
最新文章
- Graph Representation 图神经网络
- 服务器计费系统安卓,GitHub - NWAFU/dms_client: 服务器计费系统(客户机端):用于统计租户的服务器使用情况...
- 【新技术】不用开发者账号申请ios证书真机调试
- Zabbi监控系统搭建
- Linux查看日志工具
- 【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!
- 超棒的阿里巴巴矢量图标库——支持IE6
- docker高级操作:使用-Dockerfile-定制镜像
- 上计算机课睡觉检讨书400,小学生上自习课睡觉检讨书
- C++ 引用与SqList L、SqList *L、SqList L辨析
- otdr测试资料生成软件,OTDR曲线图生成工具
- java面试中掺水了,java软件工程师工作简历模板下载
- KETTLE 新建数据库连接窗口无法打开错误 提示 XUL Definition 错误
- Construct2 ——— 零基础也能自己做游戏
- 照片和木马合成一张照片
- TP5.1使用创蓝短信实现验证码的发送以及频控
- Unit elasticsearch.service entered failed state
- TMF和Frameworx
- Struts2 框架总结(一):简单开发
- app_process执行java文件(三十五)
热门文章
- 成功激励格言精选汇编
- PC、手机看地(DTMB)节目,支持AVS+和DRA
- 2022-2028全球与中国无线工作灯市场现状及未来发展趋势
- python爬虫之爬取多篇含有关键词的文章标题和内容
- 做室内设计有必要学python吗_学习室内设计还有前途吗?
- webpy使用笔记(二) session的使用
- 蓝桥杯算法训练 数字游戏 组合数和暴力两种解法
- [读书报告]构建之法(九)
- CAD梦想画图中的“绘图工具——矩形”
- android sip服务器,android sip协议通话实现