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语言负责服务器存储和数据传输响应。
整体程序结构如下可见:
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竞赛获奖等。
相关文章:

《中国顶尖技术团队访谈录·第二季》发布
卷首语(InfoQ中国总编辑 崔康)\\在提笔写这篇卷首语的时候,我们刚刚为InfoQ中国过完八岁生日。回溯到2007年的3月28日,InfoQ中文站正式上线运营,从此中国的IT技术人有了一个崭新的学习和成长的平台,InfoQ中…

record-09 ATM 过程思想 综合练习
#__author: hasee #date: 2018/1/16 # user_info.txt包含内容: # zhangsan1 123456 3500 # zhangsan2 123456 4000 # zhangsan3 123456 4500 # zhangsan4 123456 5000 # zhangsan5 123456 5500 # zhangsan6 123456 6000 # zhangsan7 123456 6500 # zhangsan8 12345…

在ApacheHTTPD服务器中使用DSO完全分析
Apache HTTP 服务器是一个模块化(或说积木式)的程序,管理员可以选择一些模块来增加服务器的某些功能。这些模块,可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中,也可以编译成一些独立于服务器程序的Dyn…

apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群
实验环境: CentOS 5.11 final hostname:T1.getg.com IP地址:192.168.50.138软件准备: CentOS Linux 5.*系统光盘中的“Development tools”工具包组 jdk-8u45-linux-x64.tar.gz pcre-8.36.tar.gz apr-util-1…

有哪些新手程序员不知道的小技巧?
提到新手程序员,大家想到的第一个词可能就是:刷题。尤其是通过LeetCode刷题,想必新手程序员们都经历过这一步,甚至不少人认为只要在LeetCode上刷的题目够多,就一定能够进阶为大神。但是,不难发现࿰…

cocostudio UI编辑器中UITextField输入框控件光标
http://www.cocoachina.com/bbs/read.php?tid194533

在apache中使用 memcache 来作 session 存储
session.save_handler memcache session.save_path "tcp://127.0.0.1:11211" 使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weigh…

Android WebView访问SSL证书网页(onReceivedSslError)
Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要使用su…

改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 美东时间10月28日周四,在名为 Facebook Connect 的年度大会上,Facebook 宣布,Facebook 将公司名称更改为“Meta”,这个新名字反映了该公司在社交媒体之外…

Android NDK开发之旅31 FFmpeg音频解码
###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章,我们已经学会视频解码基本过程。这篇文章就对音频解码进行分析。 #####音频解码和视频解码的套路基本是一样的, 否则怎么会做到音视频同步播放呢? ###1.FFmpeg音视解码过程分…

整理了 65 个 Matplotlib 案例,这能不收藏?
作者|周萝卜来源|萝卜大杂烩Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的。启用和检查交互模式在…

负载均衡工具haproxy安装,配置,使用
一,什么是haproxy HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运…

【文章】本站收集与转载文章目录
1.关于推荐系统中的特征工程 2.Java程序员最喜欢的11款免费IDE编辑器 3.人工智能和机器学习领域的一些有趣的开源项目 4.微软发布Project Oxford,供Azure户免费集多项功能 5.微软推Azure机器学习工具:Algorithm Cheat Sheet

L09-10老男孩Linux运维实战培训-Nginx服务生产实战应用指南05(架构解决方案)
nginx的多实例设置首先说一下nginx后面加的参数的说明 -s 后面加reload 就是重新加载的意思和apache的graceful同样的效果 -v 小写的v显示版本号后退出 -V大写的V显示nginx的版本号和配置环境 -t 就是test的意思,检查配置文件是否正确 -c 后面配置文件的地址&#x…

linux中的apachectl是什么命令
apachectl是Apache HTTP服务器的前端程序。其设计意图是帮助管理员控制Apache httpd后台守护进程的功能。apachectl脚本有两种操作模式。首先,作为简单的httpd的前端程序,设置所有必要的环境变量,然后启动httpd ,并传递所有的命令…

数据库性能优化1——正确建立索引以及最左前缀原则
1. 索引建立的原则用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是很好的备选列SELECTcol_a <- 不是备选列FROMtbl1 LEFT JOIN tbl2ON tbl1.col_b tbl2.col_c <-…

深度学习发展下的“摩尔困境”,人工智能又将如何破局?
前不久,微软和英伟达推出包含5300亿参数的语言模型MT-NLG,这是一款基于 Transformer 的模型被誉为“世界上最大、最强的生成语言模型”。 毫无疑问,这是一场令人印象深刻的机器学习工程展示。 然而,我们是否应该对这种大型模型趋势…

Kotlin学习笔记-基础语法
去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了。最近Google宣布Kotlin成为Android开发的官方语言之后,Kotlin突然变得火热起来&am…

英特尔王锐:软硬件并驾齐驱,开发者是真英雄
北京时间10月28日,英特尔On技术创新峰会在北京举办。在此次峰会上,英特尔公司高级副总裁、英特尔中国区董事长王锐对外宣告了英特尔拥抱开发者,回归技术创新的决心和信心。 英特尔此前提出,四大超级技术力量赋能数字化的变革&…

基于html5海贼王单页视差滚动特效
分享一款基于html5海贼王单页视差滚动特效是一款流行滑落网页特效代码。效果图如下: 在线预览 源码下载 实现的代码: <div class"top"><div class"top_main center"><ul id"scene" class"scene&quo…

切换apache的prefork和worker模式
Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。 不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法。 Apache凭借它的模块化设计很好的适应了大量不同的环境。 这一设计使得网站管理…

使用adb devices命令无法识别夜神模拟器的解决方法
模拟器不喜欢原生态的,喜欢简单好用的,这里用的是夜神模拟器现象夜神模拟器启动成功,此时用adb devices命令查看,居然啥都不显示,也就是没识别出来分析很大可能是因为adb的版本不一致导致的,心中无数个草泥…

Apache的prefork模式和worker模式
prefork模式 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就…

AI 与小学生的做题之战,孰胜孰败?
现在小学生的数学题不能用简单来形容,有的时候家长拿到题也需要思考半天,看看是否有其他隐含的解题方法。市面上更是各种拍题搜答案的软件,也是一样的套路,隐含着各种氪金的信息。 就像网络上说的“不写作业母慈子孝,一…

AIDL方向指示
2019独角兽企业重金招聘Python工程师标准>>> AIDL使用简单的语法来定义接口, 该接口定义了可供客户端访问的方法和属性,并且描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。 其中对于Java编程…

Techshack Weekly 第 0002 期
Techshack Weekly 专注于后端技术阅读,目前有上百位订阅者,欢迎加入 Telegram Channel ,或关注推特 techshackweekly,或订阅 RSS! 点击查看本期 本期比较关注的几个领域有:TSDB, 系统设计,推荐的…

像数据分析一样写 Web 页面,这个 Python 库做到了!
作者|刘早起来源|早起Python提起用 Python 写一个 web 页面,总是会想起Django/Flask等这样的大家伙。他们确实好用,但就是流程繁琐,比如有时就想写一个简单的页面,比如问卷调查,拿 Django 来说吧总要经过安装、启动、配…

loadrunner 如何做关联
在页面中为了防止CRSF攻击,每次访问登录页面时,在浏览器器端生成一个token。 在提交时检验这个token是否有效,提交后token自动失效。 如果使用loadrunner来测试此系统话需要做一个关联,把这个token作为一个参数进行提交。 做关联有…

让你的数据离CPU更近一些
让你的数据离CPU更近一些 Jim Gray:RAM是硬盘,硬盘是磁带 永远只做自己最擅长的事情 不是所有的任务都需要同步执行

现在很火的答题赢钱游戏,让我来简单教你怎么做自动答题器
一、前言: 现在最火的直播游戏,那就是答题赢钱直播了,如百万英雄、芝士超人、花椒直播、冲顶大会等等,这些游戏的玩法都很简单,答对12题即可瓜分奖金了。玩法虽然简单,但是要能完全答对12题难度还是挺高的&…