作者 | 李秋键

出品 | AI科技大本营(ID:rgznai100)

引言:

如果谈到近几年来新起的语言,必然离不开Python语言和Go语言,正如python在人工智能领域的发展火热,Go语言在服务器并发处理也有着非常优势。

Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/c++ 等编译型语言的性能与安全性”。Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。

其中Go语言的特点主要集中在以下几个方面:1、语法简单;2、并发模型;3、内存分配;4、垃圾回收;5、静态链接;6、标准库;7、工具链。并且在Google、Facebook、腾讯、百度、七牛云、京东、小米、360等大厂公司都有所使用。除了上面提到的,还有很多公司开始尝试使用Go语言,比如美团、滴滴、新浪等。Go语言的强项在于它适合用来开发网络并发方面的服务,比如消息推送、监控、容器等,所以在高并发的项目上大多数公司会优先选择 Golang 作为开发语言。

而今天我们就将使用Go语言+python语言实现一个动态开机密码的功能。其中python在这里用来设置动态密码,Go语言负责服务器存储和数据传输响应。

整体程序结构如下可见:

Python修改密码程序介绍

按照自己设定的规则进行每天动态修改密码,可以提高电脑的安全性。这里我们同时还需要借助一个bat批处理程序来获取管理员权限才能达到修改密码的目的。

导入库介绍:

(1)subproces库:subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。

(2)getpass库:getpass模块提供了平台无关的在命令行下输入密码的方法; 该模块主要提供:两个函数: getuser, getpass;一个报警: GetPassWarning(当输入的密码可能会显示的时候抛出,该报警为UserWarning的一个子类)

1.1 密码修改

在这里我们设定密码规则为每天的日期+一个特定的数,获取月日信息,为了防止规则过于简单,我们将日期这个参数设为:当前日期+反转其中。比如1028转为8201。此时参数为10288201,然后加上我们特定的数,比如是20200202。

其中获取日期代码如下:

import time
temp=time.strftime('%m%d',time.localtime(time.time()))
反转日期代码如下:
def reverse(s):ans=""while len(s)!=0:ans+=s.pop(-1)return ans
修改密码代码如下:
import subprocess
import getpass
pivot=20200202
temp=temp+reverse(list(temp))
result=str(int(pivot)+int(temp))+"l"
psd = result
user = getpass.getuser() #获取计算机用户名
print(user)
f=open("password.txt","w")
f.write(result)
f.close()
s=subprocess.Popen(['net', 'User', user, psd])
print("success")

即设定的密码如下:

1.2 批处理获取管理员权限

建立 password.bat 程序,通过使用cmd命令获取管理员:

@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)
cd /d "%~dp0"
start python test.py

Go语言端

所使用的模块介绍:

(1)net包:net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。此包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。使用Dial函数和服务端建立连接;Listen函数创建的服务端。

(2)log包:log包实现了简单的日志记录,它定义了Logger类型,其中包含格式化输出的方法。它还有一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln],Fatal[f|ln]和Panic[f|ln]访问,它们比手动创建Logger更容易使用(Logger你可以理解为"日志记录器")。该记录器写入标准错误(stderr)并打印每个记录消息的日期和时间。每条日志消息都在单独的行中输出:如果正在打印的消息未以换行符结尾,则记录器将添加一条消息。Fatal函数在写入日志消息后调用os.Exit(1), Panic函数在写入日志消息后调用panic。

(3)os包:os包提供了与平台无关的操作系统功能接口。

2.1 client客户端

1、首先是通过批处理文件获取管理员权限并调用python以实现修改密码的功能,并将密码存储在password.txt文本中。

代码如下:

dir, err := os.Getwd()
if err != nil {log.Fatal(err)
}

2、读取password存储的密码,并发送到服务器。

代码如下:

f, err := os.OpenFile("password.txt", os.O_RDONLY, 0600)
defer f.Close()
if err != nil {fmt.Println(err.Error())
} else {contentByte,err0:=ioutil.ReadAll(f)print(err0)words := string(contentByte)conn.Write([]byte(words))fmt.Println("send over")
}

3、设置发送的服务器地址和其对应的端口,建立TCP连接。

代码如下:

server := "服务器地址:端口"
tcpAddr, err := net.ResolveTCPAddr("tcp4", server)
if err != nil {fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())os.Exit(1)
}
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())os.Exit(1)
}
fmt.Println("connect success")
sender(conn)

2.2 server.go 服务器接收端

接收端的程序需要放置服务器上,建立监听的端口,接收client发送的数据包,并存储为txt文件:

1、建立socket监听端口,代码如下:

netListen, err := net.Listen("tcp", "0.0.0.0:5006")
CheckError(err)
defer netListen.Close()//注册延迟调用函数,netlisten调用完才会执行close
//首先清除txt
del := os.Remove("password.txt");
if del != nil {fmt.Println(del);
}
Log("Waiting for clients")
for {conn, err := netListen.Accept()if err != nil {continue}Log(conn.RemoteAddr().String(), " tcp connect success")//log显示连接成功handleConnection(conn)
}

2、处理连接,获取数据包并存储到 password.txt 文件中:

buffer := make([]byte, 2048)//建立缓存区
for {n, err := conn.Read(buffer)if err != nil {Log(conn.RemoteAddr().String(), " connection error: ", err)return}Log(conn.RemoteAddr().String(), "receive data string:\n", string(buffer[:n]))//接收到的数据写入txt中f, err := os.OpenFile("password.txt", os.O_APPEND|os.O_CREATE, 0600)defer f.Close()if err != nil {fmt.Println(err.Error())} else {_,err=f.Write([]byte(string(buffer[:n])+" \n"))//checkErr(err)}
}

完整代码:

链接:https://pan.baidu.com/s/1OSQXQ4D_cSXDBf3r7aQuIw

提取码:8vrd

李秋键,CSDN博客专家,CSDN达人课作者。硕士在读于中国矿业大学,开发有taptap竞赛获奖等。

Golang+Python 实现安全动态开机密码+服务器存储相关推荐

  1. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  2. python错了怎么修改密码_如何用python更改windows开机密码?

    虽然2018年的愚人节已经过去了,但是我们的乐趣每天都不能少,尤其是高级的.这不刚get到还可以用python来更改小伙伴的windows开机密码,赶紧去试了一遍,就来分享给大家,接着吧: 今天教大家 ...

  3. 安卓手机加密_从安卓1.0到现在的安卓10.0,开机密码都存放在了哪里?

    防止疫情蔓延,请大家坚守在家,努力涨"姿势" 小编于2009年毕业(注意是毕业不是肄业,本编经过了4年的大学深造,是有正规学历证明的!虽然之后从未拿出来向任何人证明过.),毕业后开 ...

  4. 用python更改舍友电脑的开机密码并将密码发送到自己电脑(小恶作剧)

    大家好,这个程序主要分为两个部分,一个是没有python环境的靶机端,也就是舍友的电脑,另外一个是有python环境攻击端,也就是我的电脑,这两个电脑处于同一个局域网中,拿下面就让我们来一起学习吧. ...

  5. Python实现web动态服务器

    Python实现http动态服务器,有两种方法,一种是基本的实现方式,可扩展性差,但是是实现服务器的基础,第二种实现不修改服务器和架构代码而确保可以在多个架构下运行web服务器.都使用WSGI(Web ...

  6. xp服务器修改登录密码,xp服务器开机密码设置

    xp服务器开机密码设置 内容精选 换一换 在CCE中创建节点时,您选择了使用密钥对或者密码作为登录方式,当密钥对或密码丢失时,您可以登录ECS控制台对节点进行密码重置操作,重置密码后即可使用密码登录C ...

  7. win8服务器修改密码,Win8在哪里设置取消开机密码

    Windows 8中的诸多创新功能都和分布式文件文件系统复制(DFSR)服务有关,多个复制引擎将会通过多个服务器执行工作进而简化文件夹同步过程.对于很多朋友来说,Win8默认开机需要输入密码,很麻烦, ...

  8. IBM服务器win7系统忘记密码,图文详解Win7系统忘记开机密码的处理方法

    许多小伙伴都遇到过Win7系统忘记开机密码的问题,虽说设置开机密码能保护系统安全,但偶尔也会出现忘记密码的情况,这要怎么办?难道没办法操作系统了吗?别着急,这里图文详解一下Win7系统忘记开机密码的处 ...

  9. dell服务器开机账号破解,dell解密595B 2A7B开机密码算号器-BIOS维修网站www.biosrepair.com...

    DELL(戴尔)系列笔记本电脑,如果设置了开机密码或硬盘密码,在开机时,系统将提输入密码.如果忘记密码,将无法开机进入系统:唯一解决办法就是解密. DELL老机器,即以CPU来分类,迅驰CPU以前的机 ...

最新文章

  1. “傻子”阿甘的大智慧
  2. Java+eclipse的配置
  3. python 随机生成汉字的三种方法
  4. Android开发 listitem中采用倒计时
  5. 市场规模占全国4成,广东物联网市场发展强劲
  6. 蓝桥杯 ADV-144 算法提高 01背包
  7. Flex 序列化自定义类 解决 sharedObject 保存自定义对象
  8. mdb文件取消隐藏_webshellphp隐藏技巧
  9. java笔记--关于int和byte[]的转换
  10. 巧用电视卡让笔记本屏幕作PS2游戏显示器
  11. 系统内核溢出漏洞提权之Windows Exploit Suggester
  12. OpenGL(十三) Alpha测试、剪裁测试
  13. 联想怎么启动windows无线服务器,Windows7系统下开启无线的多种方法
  14. signal信号值对应表
  15. Vins-fusion GPS融合部分测试(自己的数据ZED+RTK)
  16. 记一次 Kubernetes 集群 Pod Eviction 问题排查过程
  17. 如何查看Android keystore 签名信息
  18. Android基础入门教程——10.1 TelephonyManager(电话管理器)
  19. 如何让Echarts地图只显示某个省、市、区
  20. SOLIDWORKS Composer关键帧-制作动画的利器

热门文章

  1. koa连接mysql_CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)
  2. 【SqlServer】SqlServer中的更新锁(UPDLOCK)
  3. 云原生应用的10大关键属性
  4. Django 错误汇总
  5. Mac OS X 下mysql配置备忘
  6. js在页面滚动到一定位置时触发事件?
  7. SpringBoot使用JSP作为模板
  8. tidb mysql 协议_TiDB源码阅读(二) TiDB中的MySQL协议
  9. html脚本详解,HTML脚本教程详解
  10. 当前上下文中不存在viewbag