当前位置:首页 > 公众号精选 > AI科技大本营
[导读]作者|李秋键出品| AI科技大本营(ID:rgznai100)引言:如果谈到近几年来新起的语言,必然离不开Python语言和Go语言,正如python在人工智能领域的发展火热,Go语言在服务器并发处理也有着非常优势。Go语言(或Golang)起源于2007年,并在2009年正式对...

Golang Python 实现安全动态开机密码 服务器存储作者 | 李秋键出品 | 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语言负责服务器存储和数据传输响应。整体程序结构如下可见:Golang Python 实现安全动态开机密码 服务器存储


Golang Python 实现安全动态开机密码 服务器存储Python修改密码程序介绍



按照自己设定的规则进行每天动态修改密码,可以提高电脑的安全性。这里我们同时还需要借助一个bat批处理程序来获取管理员权限才能达到修改密码的目的。导入库介绍:(1)subproces库:subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。(2)getpass库:getpass模块提供了平台无关的在命令行下输入密码的方法; 该模块主要提供:两个函数: getuser, getpass;一个报警: GetPassWarning(当输入的密码可能会显示的时候抛出,该报警为UserWarning的一个子类) 1.1 密码修改在这里我们设定密码规则为每天的日期 一个特定的数,获取月日信息,为了防止规则过于简单,我们将日期这个参数设为:当前日期 反转其中。比如1028转为8201。此时参数为10288201,然后加上我们特定的数,比如是20200202。其中获取日期代码如下:


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



即设定的密码如下:Golang Python 实现安全动态开机密码 服务器存储



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
Golang Python 实现安全动态开机密码 服务器存储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) Golang Python 实现安全动态开机密码 服务器存储


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//首先清除txtdel := 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) }} Golang Python 实现安全动态开机密码 服务器存储


完整代码:


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


提取码:8vrd


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


Golang Python 实现安全动态开机密码 服务器存储



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭