利用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 time s_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 head
header_dict = {
'total_size': len(stdout) + len(stderr),
'filename': None
}
header_bytes = json.dumps(header_dict).encode('utf-8') # Send head length
header_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 head
header_dict = {
'total_size': len(stdout),
'filename': None
}
header_bytes = json.dumps(header_dict).encode('utf-8') # Send head length
header_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)
break
conn.close()
# win_ser.close()
Client:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "loki" import json
import socket
import struct c_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':
break
if not mes:
continue win_cli.send(mes.encode('utf-8'))
# receive head length
res_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 content
header_bytes = win_cli.recv(head_size).decode('utf-8')
# to head dic json
header_json = json.loads(header_bytes)
# get data length
data_size = header_json['total_size'] # receive data to the length of the header
receive_size = 0
total_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_data
total_data += data_receive
receive_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进程。感觉还有很多地方都可以用到,比如监控、比如自动化执行某些任务。。。当然,安全问题也需要深入研究。避免被恶意利用做非法用途。以上代码仅供学习研究之用,切勿做非法用途!
利用Py-Socket模块做的一个不登陆windows服务器自动实现替换或者调用自动拨号功能的更多相关文章
- 利用网络Socket和多线程实现一个双向聊天
接收键盘输入然后向对方发送消息的线程 package cn.com.chat; import java.io.BufferedReader; import java.io.BufferedWriter ...
- 利用spring boot+vue做的一个博客项目
技术栈: 后端 Springboot druid Spring security 数据库 MySQL 前端 vue elementUI 项目演示: GitHub地址: 后端:https://githu ...
- Unity进阶:用AssetBundle和Json做了一个玩家登陆界面
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...
- 使用 Python 的 Socket 模块构建一个 UDP 扫描工具
译文:oschina 英文:bt3gl 当涉及到对一些目标网络的侦察时,出发点无疑是首先发现宿主主机.这个任务还可能包含嗅探和解析网络中数据包的能力. 几周前,我曾经谈到了如何使用Wireshark来 ...
- (转)nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录 原文:http://www.cnblogs.com/kevingrace/p/6165572.html Nginx的geo模块 ...
- 利用SCI做的一个足球答题系统
SCI,异步串行通信接口,内置独立的波特率产生电路和SCI收发器,可以选择发送8或9个数据位(其中一位可以指定为奇或偶校验位). SCI是全双工异步串行通信接口,主要用于MCU与其他计算机或设备之间的 ...
- python基础===socket模块的讲解(转)
一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...
- socket模块和黏包问题
socket套接字简介 编写cs架构的程序 实现数据交互 OSI七层相当复杂 socket套接字是一门技术 socket模块>>>:提供了快捷方式 不需要自己处理每一层 " ...
随机推荐
- Trove系列(一)—入门篇
概述DBaaS是目前云计算服务的重要部分,数据库作为一种特殊的应用程序,在应用中普遍存在.而其独特性不仅在于普遍性,而且其性能对应用的表现是至关重要的.数据库的通用性和重要性使得维护一个健壮的数据库实 ...
- EditPlus 5.0 中文版已经发布(3月26日更新)
注意:新版本不再支持旧的注册码! 新特性: - Ctrl+Alt+Up/Down 键可添加多个插入点以及进行列选择 - Alt+鼠标点击可添加多个插入点 - 连续执行“选择单词”命令可将多个选中项添加 ...
- Azkaban 简介
本文简单介绍一下Azkaban及其特点.azkaban是一个开源的任务调度系统,用于负责任务的调度运行(如数据仓库调度),用以替代linux中的crontab. 一.Azkaban是什么? 1.1 A ...
- java接口对接——别人调用我们接口获取数据
java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...
- Qt的四个常见的图像叠加模式
Qt的QPainter::CompositionMode提供了多种图像叠加的模式.常见的有QPainter::CompositionMode_SourceOver, QPainter::Composi ...
- C/C++之类型强制转化
强制转化四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的.不了解的建议看看,一些机制我也不是十分了解,只是将一些用法写出来让大家看看. ...
- vim 开启我们的Python之旅
1.在我们的Mac系统下打开“终端”,输入python,然后回车即可看到我们电脑是否安装了python,以及它的版本,这里我的是2.7.5版本,如果未安装请百度之.
- Educational Codeforces Round 21 Problem E(Codeforces 808E) - 动态规划 - 贪心
After several latest reforms many tourists are planning to visit Berland, and Berland people underst ...
- 关于即来即停app的功能
Asmallpark软件接口文档说明 编码均采用UTF-8格式传输全部为http,POST请求状态码:200 操作成功 100 服务器异常,稍后再试 404 请求非法 402 数据库 ...
- BZOJ5168: [HAOI2014]贴海报 线段树
Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委 员 会为选民准备了一个张贴海报的electoral墙.张贴规则如下 ...