首页
在线工具
统计
友链
Search
1
暴力破解忘记的zip,rar, pdf等文件密码
3,196 阅读
2
typecho添加打赏功能
1,748 阅读
3
躲避校园网客户端的检测实现移动热点开启
1,292 阅读
4
摸鱼人日历
1,274 阅读
5
创建自签名 ssl 证书
981 阅读
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
登录
Search
标签搜索
HCNA
Python
Huawei
Linux
web
PC
Blog
windows
Network
Docker
HCNP
LOVE
Virus
eNSP
Zabbix
DNS
typecho
MySQL
k8s
HTTPS
TanHaX
累计撰写
76
篇文章
累计收到
76
条评论
首页
栏目
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
页面
在线工具
统计
友链
搜索到
76
篇与
的结果
2024-01-31
使用 Docker 快速搭建开发环境
1. 前期安装docker 这里就不写了,可以看往前写的文章!2. 安装开发环境这里可以根据需求来选择开发语言1. 安装C/C++开发环境sudo apt install build-essential这将安装编译C/C++程序所需的基本工具,包括gcc、g++等。2. 安装Java开发环境sudo apt install default-jdk这将安装默认的OpenJDK Java开发工具包。3. 安装Python开发环境sudo apt install python3 python3-pip这将安装Python 3及其包管理器pip。4. 安装Go语言开发环境sudo apt install golang-go这将安装Go语言的编译器和工具。3. 使用Docker部署开发环境C/C++环境:sudo docker run -it gccJava环境:sudo docker run -it openjdkPython环境:sudo docker run -it pythonGo语言环境:sudo docker run -it golang4. 在Docker容器中比如使用C语言开发:经过上述的搭建现在你可以在Docker容器中进行C语言开发了。你可以使用任何喜欢的文本编辑器编写C代码,例如Vim、Emacs或Nano。使用gcc编译器来编译和运行C代码,例如:gcc -o hello hello.c ./hello{lamp/}注:一般情况下 vim 是没有安装的,可以使用 Nano 来写1. 在Docker容器中安装Nano编辑器:在终端中运行以下命令以安装Nano编辑器:apt update apt install nano2. 使用Nano编辑器打开hello.c文件:运行以下命令以使用Nano编辑器打开hello.c文件:nano hello.c3. 在Nano编辑器中进行C代码编写:使用键盘导航键移动光标到正确位置,开始编写C代码。编写完毕后,按Ctrl + O保存文件,回车键ENTER确定,然后按Ctrl + X退出Nano编辑器。4. 编译和运行C代码:使用gcc编译器来编译和运行C代码,例如:gcc -o hello hello.c ./hello
2024年01月31日
132 阅读
0 评论
1 点赞
2024-01-12
Windows 7 IE 浏览器无法正常打开网页
在给客户部署项目的时候在 Windows 7 浏览器中无法正常打开网页。但又没有其他浏览器,只能硬质头皮去解决这个问题,试了网上大部分的方法后依然没有效果。一、问题原因经过深入测试,发现问题的根源在于 Windows 7 的 IE 浏览器不支持 TLS 1.2 协议。由于许多网站和服务使用 TLS 1.2 进行加密通信,因此,如果浏览器不支持该协议,就可能导致无法正常打开网页。二、解决方案为了解决这个问题,我们需要开启 IE 浏览器的 TLS 1.2 支持。以下是具体的操作步骤:打开 Windows 7 的 IE 浏览器。在菜单栏上选择“工具”->“Internet 选项”。在弹出的“Internet 选项”对话框中,选择“高级”选项卡。在“高级”选项卡中,找到“安全”部分,并勾选“使用 TLS 1.2”复选框点击“应用”按钮,然后点击“确定”按钮保存设置。重新启动 IE 浏览器,并尝试访问之前无法打开的网页。通过以上步骤,您应该能够成功打开所需要访问的网页了。
2024年01月12日
104 阅读
0 评论
2 点赞
2024-01-03
安全事件的处理以及建议
反病毒定义:病毒类型 + 平台 + 病毒(家族)名 + 病毒变种名 + 其他信息病毒名称前缀病毒类型TROJAN木马WORM蠕虫Adware广告软件Spyware间谍软件Backdoor后面程序JOKE玩笑程序RANSOM勒索软件Coinminer挖矿病毒PUA潜在有害应用安全事件处理流程:工作机制:病毒库 + 杀毒引擎1. 扫毒模块:扫描并检测含有恶意代码的为,对其识别。对于被文件型病毒感染的可执行文件进行修复组件扫描引擎-VSAPI & ATSE病毒码间谍软件病毒码网络病毒码2. 损害清楚服务(DCS):对于正在允许/已经加载的病毒进行清除。终止进程。脱钩 DLL 文件。删除文件。恢复被病毒修改过的注册表内容,起到修复系统的作用。可视为通用专杀工具。组件。损害清楚引擎(DCE)- TSC.EXE损害清除。损害清除模板(DCT)- TSC.PTN间谍软件清除病毒码 - TMADCE.PTN3. 反病毒常见问题:载体程序:如 pe 开头正常文件内嵌恶意代码,防病毒程序将恶意代码程序等清楚,修复文件。恶意代码:如 -o 的母体文件,则无法清除智能隔离为什么会出现无法隔离/删除的病毒:当病毒感染系统后:病毒进程已经被系统加载。病毒DLL文件已经嵌入到正在运行的系统进程中。Windows 自身的特性:对已经加载的文件无法进行改动操作,从而导致病毒扫描引擎对检测文件无法操作。已经加载的病毒不包含在损害清除模板(DCT)中。已知病毒处理流程:在可能的情况下,拔除网线。收集病毒日志。确认病毒名称、路径和文件名。搜索病毒知识库,查找病毒的解决方法。根据方案,手动清理系统中的病毒。若找不到方案或方案无效可收集样本与系统信息由厂商协助处理未知/可疑病毒处理流程象:在可能的情况下,拔除网线。使用 ATTK 工具收集系统关键信息提交给亚信安全。如有明显可以文件,压缩加密提交给反病毒厂商。反病毒厂商反馈病毒解决方案。其他事件:可执行文件恶意代码清除后,文件被破坏。提交感染前的文件和感染后的文件给厂商进行分析。宏病毒清除后打开异常或被隔离。搜集原始样本提交给厂商。网络异常,怀疑ARP攻击。通过抓包,将抓包信息提交给厂商。手动处理建议:在安全模式下操作终止所有可疑进程和不必要的进程关闭系统还原显示所有隐藏文件余晓敏判断可疑文件注:恶意程序容易植入系统目录下,并命名与系统默认文件名称非常相似的名称,以混淆用户的视听。解决方法:可通过文件创建时间,后缀,内容等判断可疑程度。常用工具:ATTK(病毒查杀工具:Anti-Threat ToolKit 反病毒工具集,系统信息收集工具)WireSharkRootkit Buster (MBR 问题的收集工具)Autoruns(显示自启动程序,允许禁用或删除)Process Explorer(Windows 系统和应用程序监视)病毒典型案例分析:1. Worm_downad(飞客蠕虫)1. 主要传播手段漏洞 MS08-067(复制自身特性传播)。攻击过程:病毒会随机生成 IP 地址,进行漏洞利用并发起攻击移动存储(利用播放功能自启动,并在共享传播自身副本进行扩大感染)2. 显性特征阻止访问安全网站安全配置失效暴力猜解密码解决方法:通过日志找到感染源优先在源头计算机安装补丁(建议所有计算机打算补丁以防传播病毒)修改域账号或计算机密码为强密码注:移动存储传播手段:攻击成功后会下载病毒并进行修改注册表来使得安全工具和安全配置失效、修改 host 文件在内网查找网络服务器或域控,通过字典暴力破解拆解管理员密码,常导致服务器被锁2. PE_SALITY1. 主要传播手段:漏洞 ms10-046移动存储网络共享电子邮件2. 主要特征:终止安全相关软件和服务(安全软件和防火墙 )禁用防火墙、任务管理器、注册表、防火墙等组织进入安全模式共享目录及子文件夹存在LNK和TMP文件存在恶意的 AUTORUN.INF注 :病毒自我保护特征:终止安全软件和防火墙将自己感染的程序添加到防火墙、白名单中防止网络通信被阻止进入管理器和注册表使得用户无法手动结束被感染的程序进程和注册表的项值,也无法进入安全模式创建病毒母体文件拷贝和自动执行该母体文件的 AUTORUN.INF 到所有驱动器中,当进入被感染的驱动器后会自动执行该病毒3. 勒索家族:两种类型:传统勒索病毒勒索病毒主要特征:文档被机密锁定弹出勒索信息传统勒索病毒:主要传入手段:社工邮件(订单、银行账单)带有宏病毒的 Word/Excel 附件特点:非常依赖人机交互勒索蠕虫主要传入手段:漏洞 MS17-010Internet 传入预防方法:增强安全意识防御(以OSCE为例)备份重要文档3-2-1规则:三个副本,两种不同格式保存,异地存储4. 挖矿病毒解决方法:使用ATTK 或者专杀工具预防方法:增强员工安全意识定期更新安全防护软件的组件启用浏览器安全防护功能善用任务管理器 & 资源监视器
2024年01月03日
179 阅读
0 评论
3 点赞
2023-08-12
更改本地用户文件夹名称
修改环境变量首先,右击“我的电脑”,选择“属性”。在属性窗口中,选择“高级”选项卡。在高级选项卡中,点击“环境变量”按钮。在用户变量下方,点击“新建”按钮。在弹出的对话框中,输入变量名为USERPROFILE,变量值为C:\Users\smile(这里的smile是您需要的新用户名文件夹)。再次点击“新建”按钮,输入变量名为HOMEPATH,变量值为C:\Users\smile。点击“确定”按钮保存修改。修改注册表按下Win+R键,打开运行窗口,输入regedit并回车,打开注册表编辑器。在注册表编辑器中,导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\ <要修改的用户对应的SID>。找到你原来目录名字的项,通常可以在ProfileImagePath键中找到。将 ProfileImagePath 键的值修改为新的目录名。保存修改后的注册表。修改本地用户文件夹名称打开资源管理器,找到 C:\用户\旧用户名文件夹。将旧用户名修改为smile。重新登录电脑后,系统会自动将配置文件配置到新的文件夹中。注意事项修改配置文件后,原来的配置不会自动复制到新的文件夹中。如果需要保留原有配置,需要手动复制配置文件到新的文件夹中。在进行任何操作前,请确保备份重要的文件和注册表。修改注册表可能会对系统造成不可逆的损坏,所以请谨慎操作。
2023年08月12日
191 阅读
0 评论
3 点赞
2023-08-11
通过安全模式解决程序冲突造成卡顿和启动修复错误
今天遇到了一些令人困扰的电脑启动问题甚至还把电脑重置了,在日常的开机环节中发现系统进入桌面后出现严重的卡死问题,甚至任务管理器都调不出来。在经过再次重启后,发现要么进入桌面出现卡死或者重启时出现了"启动修复"的错误提示,无法修复电脑的问题。起初我以为是系统或者引导问题,于是通过尝试通过安全模式来解决这个问题。下面是我具体的操作流程。1. 进入安全模式的步骤:重启电脑,在黑屏的时候连续点击键盘上的F11键。进入"疑难解答"选项,然后选择"高级选项"。在"高级选项"中选择"启动设置",然后点击"重启",需要输入 BitLocker恢复密钥才能访问启动设置可以看下面的步骤来。在启动设置界面,按下F4键进入安全模式。注:如果在进入安全模式之前需要输入BitLocker恢复密钥才能访问启动设置,如果你忘记了恢复密钥,可以通过 登录到Microsoft帐户 查找恢复密钥。如果没有这个提示,可以跳过这一步继续进行操作,接着第四个步骤2. 在安全模式下解决问题:进入安全模式后,系统会加载最基本的驱动和关键服务。在这个模式下,我们可以先禁用启动项,排除第三方软件和驱动的影响。首先,在任务栏搜索图标处找到【任务管理器】并打开。在任务管理器中,点击左侧的【启动应用】选项卡。在启动应用界面中,查看上方第一行的【状态】列,将所有的应用都以右键方式进行禁用。3. 运行系统命令修复问题:返回开始菜单,打开【Windows工具】。在工具列表中找到【命令提示符】这个选项,右键以管理员身份运行。在命令提示符窗口中,输入命令 "sfc /scannow"(注意斜杠之前有一个空格),然后按回车键执行。等待命令完成修复后,然后重新启动电脑以退出安全模式。4. 如果以上操作仍然无效,还可以尝试以下方法:重启电脑时,在黑屏的时候连续点击键盘的F11键。在"疑难解答"中选择"高级选项"。找到"卸载更新"并点击。在"卸载质量更新"中选择需要卸载的更新。{lamp/}经过上面的操作虽然没有很好的解决我这个问题,但最后通过火绒官方指出:卡巴斯基和火绒出现了冲突现象,最后才把火绒卸载掉以彻底解决这个卡顿现象。
2023年08月11日
731 阅读
1 评论
3 点赞
2023-08-09
解决HTTPS握手过程中的隐私泄漏问题(ECH)
在现代网络环境中,虽然我们的大部分网络通信都被加密,但是在某些情况下,我们的访问信息可能会被间接暴露。这是因为,即使是HTTPS传输,也有可能发生隐私泄露。那么,我们如何保护自己的访问隐私呢?本文将为您介绍一种加强隐私保护的新方法:Encrypted ClientHello。HTTPS在深入讨论问题之前,我们先来了解一下HTTPS协议的基本概念。HTTPS实际上就是HTTP + SSL/TLS,通过SSL/TLS对HTTP协议传输的数据进行加密,确保数据在传输过程中的隐私性和完整性。虽然发生在‘客户端’和‘服务器’之间的数据交换是被加密的,但是在TLS建立连接的过程却并不一定是加密的。TLS握手的过程TLS握手是在建立HTTPS连接之前进行的一系列交互过程,它有三个目的:协商协议和加密套件:通信的两端确认接下来使用的TLS版本和加密套件。验证身份:为了防止中间人攻击,服务器会向客户端发送证书,证书包含服务器的公钥和证书授权中心(CA)签名的身份信息,客户端可以用这些信息来验证服务器的身份。生成会话密钥:生成用于加密后续数据传输的密钥。握手过程中,有一个隐私泄漏的风险,就是SNI(Server Name Indication,服务器名称指示)的信息泄漏。TLS握手过程是TLS协议为保护通讯隐私而建立私钥和公钥的步骤。握手过程中,客户端会向服务器发送一个叫做 “ClientHello” 的消息,其中包括客户端支持的TLS版本和加密算法、一串随机字节串以及SNI等一些服务器信息。但是,"ClientHello"消息中的SNI包含了访问的网站域名信息,而这个消息是明文传输的,所以如果被"中间人"监听,就会暴露你正在访问哪个网站。这样做的可能是你的ISP,公司,或者学校等,他们可以通过监视网络流量来获取这些信息。那么,面对这种情况,我们应该如何保护个人隐私呢?Encrypted ClientHello(ECH)的解决方案为了解决TLS握手中的隐私泄漏问题,TLS1.3引入了Encrypted ClientHello(ECH)的扩展机制。ECH可以用于加密Client Hello消息中的SNI等敏感信息。当用户访问一个启用ECH的服务器时,网管无法通过观察SNI来窥探域名信息。只有目标服务器才能解密ECH中的SNI,从而保护用户隐私。要启用ECH,需要满足以下两个条件:服务器支持TLS的ECH扩展。客户端支持ECH。解决方法:例如,可以使用 Cloudflare SNI测试页 或者 cloudflare 浏览体验安全检查 来检查ECH扩展的支持情况。- Google Chrome 中开启ECH支持:打开Chrome在地址栏输入并访问:chrome://flags/#encrypted-client-hello将“Encrypted Client Hello”选项置为“Enabled”启用ECH的支持。关闭浏览器并重新启动Chrome,使更改生效。- Mozilla Firefox:打开Firefox在地址栏输入并访问:about:config在警告页面上,点击 "接受风险并继续"。在搜索框中输入 "ech" 来筛选相关选项。右键点击 "network.http.enforce-framing.http-equivalent-eom" 选项,并选择 "Toggle" 将其设置为 "true"。关闭浏览器,并重新启动Firefox,使更改生效。参考资料:Encrypted ClientHello。
2023年08月09日
518 阅读
0 评论
5 点赞
2023-06-27
快速部署kubernetes
关闭防火墙systemctl stop firewalld && systemctl disable firewalld关闭所有节点的 SELinux ,将 SELinux 设置为 permissive 模式(相当于将其禁用)sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config设置主机名hostnamectl set-hostname master关闭 Swapswapoff -a && sysctl -w vm.swappiness=0永久关闭swap (推荐)sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab主机添加 hosts:cat >> /etc/hosts << EOF 10.0.0.24 master 10.0.0.25 node1 10.0.0.26 node2 EOF配置路由转发IPv4 并让 iptables 看到桥接流量cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF应用 sysctl 参数而不重新启动sudo sysctl --system使用部署工具来安装 Kubernetesk8s社区提供了3个部署工具,分别是kubeadm, kops和 Kubespray ,这里有详细的说明配置Kubernetes的阿里云yum源Debian / Ubuntuapt-get update && apt-get install -y apt-transport-https curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectlCentOS / RHEL / Fedoracat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF setenforce 0这里指定版本#yum install -y kubelet kubeadm kubectl yum install -y kubelet-1.23.4 kubeadm-1.23.4 kubectl-1.23.4 systemctl enable kubelet && systemctl start kubelet * 由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用以下命令安装:yum install -y --nogpgcheck kubelet-1.23.4 kubeadm-1.23.4 kubectl-1.23.4k8s-master初始化主节点kubeadm init \ --apiserver-advertise-address=10.0.0.24 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.4 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16注(所有节点):vi /etc/docker/daemon.json"exec-opts": [ "native.cgroupdriver=systemd" ],重启dockersystemctl restart docker重置 kubeadm 安装的状态kubeadm reset在初始化 (9)在主节点上设置 Kubernetes 配置在主节点上配置kubectl工具并设置集群证书mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config或者,如果你是 root 用户,则可以运行:export KUBECONFIG=/etc/kubernetes/admin.conf安装pod网络插件在两个工作节点上加入 Kubernetes 集群sudo kubeadm join 主节点IP:主节点端口 --token <hz1ri9.qca0lj1qii44l58c> --discovery-token-ca-cert-hash sha256:<hash>例如:sudo kubeadm join 10.0.0.24:6443 --token 37mtsv.c32oz3fgbkckoh11 --discovery-token-ca-cert-hash sha256:8da41125c132639053ca58018e57477453b51f8e344ec0a1d8709c8e432a4ada等待一段时间,直到 Kubernetes 集群所有的节点都处于 Ready 状态。可以使用以下命令查看节点的状态:sudo kubectl get nodes
2023年06月27日
184 阅读
0 评论
2 点赞
2023-06-25
RIPv2 基础配置
配置思路:我们将在每台路由器上部署RIPv2,使得网络中各个网段之间能够实现相互通信。此外,R1及R2和R3运行RIPv2,为了使得R1和R3能够通过RIP学习到去往 PC端 的路由,我们需要在R1和 R3 的接口上激活RIPv2, 但是接口一旦激活RIPv2,R1/3 便会周期性地从该接口发送 Response报文,然而其直连的网段中并不存在其他的RIP路由器,因此这些RIP报文实际上造成了该网段内PC的额外负担。解决这个问题的办法非常简单,就是将R1/3 的接口配置为 Silent-Interface。R1:rip命令用于创建一个RIP路由进程,而该命令后的数字1则为该RIP进程的进程 ID (Process-ID),Process-ID 如果不手工指定,则系统会自动为该进程分配一个。rip 1在RIP配置下执行的version 2命令用于指定该进程所运行的RIP版本为RIPv2。version 2Network命令用于在指定网段的接口上激活RIP。值得注意的是,network命令所指定的必须是主类网络地址,而不能是子网地址。例如network 192.168.1.0这条命令,将使得R1在GEO/O/1接口上激活RIPv2,而 network 172.16.0.0命令则使得R1在GEO/0/2接口上激活RIPv2。network 192.168.1.0 network 172.16.0.0silent-interface GigabitEthernet 0/0/1 命令用于将GEO/O/1接口配置为Silent-Interface。如此一来,R1将不会再从该接口发送Response报文。silent-interface GigabitEthernet 0/0/1R2:rip 1 version 2 network 192.168.1.0R3:rip 1 version 2 network 192.168.1.0 network 172.16.0.0在完成上述配置后,我们可以通过以下命令来对配置进行验证。display rip 1 database 查看RIP进程1的数据库display rip 1 interface 查看本设备有哪些接口激活了RIP
2023年06月25日
305 阅读
0 评论
7 点赞
2023-06-24
静态路由与NQA联动
1. 配置思路:续上 静态路由与BFD联动 依然是相同的需求,此时只需要在R2上部署一个NQA的实例,使用ICMP测试机制探测到Rl (10.1.12.1)的可达性,并将测试结果与下一跳为R1的静态路由进行联动即可。当NQA检测到10.1.12.1可达时,静态路由生效,当检测到其不可达时,静态路由失效,此时浮动路由将出现在路由表中。R2:admin 是测试实例的管理者名称, smiling 是测试实例名,这两个名称都是自定义的。nqa test-instance admin smilingTest-type 命令定义了该测试实例使用的测试机制为ICMP :test-type icmpdestination-address 定义的是测试对象的ip 地址:destination-address ipv4 10.1.12.1frequency 定义的是每一轮测试的时间间隔(单位为秒):frequency 6probe-count 命令定义了每一轮测试的探测次数:probe-count 2interval seconds 定义了在每一轮测试当中每个探测报文的发送间隔(单位为秒):interval seconds 2timeout 定义了每一次探测的超时时间(单位为秒), shart now 命令使该测试实例开始执行。timeout 2 shart now接下来为 R2 配置静态路由,将静态路由 ip route-static 10.9.9.0 255.255.255.010.1.12.1与 admin testl这个NQA实例进行联动,然后再另外配置一条浮动静态路由:ip route-static 10.9.9.0 255.255.255.0 10.1.12.1 track nqa admin smiling ip route0static 10.9.9.0 255.255.255.0 10.1.23.3 preference
2023年06月24日
269 阅读
0 评论
2 点赞
2023-06-16
TanHaX-SPCWC
刚考完试闲得发慌写的。Smilinghan-SPCWC 是一个 Python 程序,允许用户监控计算机的系统状态并发送电子邮件通知。该程序使用 tkinter 库创建图形用户界面 (GUI),使用 smtplib 库发送电子邮件。还使用了其他库,如 socket、requests、datetime、pyautogui、threading、os、sys、time 和 ctypes。import tkinter as tk from tkinter import ttk import smtplib import socket import requests import datetime import pyautogui import threading import os import sys import time import ctypes from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage from email.header import Header USER32 = ctypes.windll.user32 SW_SHOW = 5 SW_HIDE = 0 class EmailChecker: def __init__(self): self.sent_email = False self.stop_event = threading.Event() self.thread = None self.root = tk.Tk() self.root.title("TanHaX-SPCWC") self.create_widgets() def create_widgets(self): mainframe = ttk.Frame(self.root, padding="20 10 20 10") mainframe.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S)) mainframe.columnconfigure(0, weight=1) mainframe.rowconfigure(0, weight=1) email_entry = ttk.Entry(mainframe, width=30) email_entry.grid(column=1, row=0, sticky=(tk.W, tk.E)) email_label = ttk.Label(mainframe, text="Email:") email_label.grid(column=0, row=0, sticky=tk.E) submit_button = ttk.Button(mainframe, text="确定", command=lambda: self.submit_email(email_entry)) submit_button.grid(column=2, row=0, sticky=tk.W) start_button = ttk.Button(mainframe, text="开始检测", command=self.start_thread) start_button.grid(column=0, row=2, sticky=tk.W) stop_button = ttk.Button(mainframe, text="停止检测", command=self.stop_thread) stop_button.grid(column=2, row=2, sticky=tk.E) output_text = tk.Text(mainframe, height=10, width=50) output_text.grid(column=0, row=3, columnspan=3, sticky=(tk.W, tk.E)) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) email_entry.focus() self.root.bind('<Return>', lambda event: self.submit_email(email_entry)) self.output_text = output_text def submit_email(self, email_entry): email = email_entry.get() self.output_text.insert(tk.END, "接收的电子邮件: " + email + "\n") with open("emails.txt", "w") as f: f.write(email + "\n") email_entry.delete(0, tk.END) email_entry.insert(0, "") def send_email(self, subject, content, receiver): sender = 'smilinghan@qq.com' password = 'password' with open("emails.txt", "r") as f: receivers = [f.read().strip()] message = MIMEMultipart() message['Subject'] = Header(subject, 'utf-8') message['From'] = Header(sender) message['To'] = Header(receiver) text = MIMEText(content, 'html', 'utf-8') message.attach(text) screenshot = pyautogui.screenshot() if screenshot is not None: screenshot.save('screenshot.png') with open('screenshot.png', 'rb') as f: img = MIMEImage(f.read()) img.add_header('Content-ID', '<screenshot>') message.attach(img) try: smtpObj = smtplib.SMTP_SSL('smtp.qq.com', 465) smtpObj.login(sender, password) smtpObj.sendmail(sender, receivers, message.as_string()) self.output_text.insert(tk.END, "邮件发送成功\n") self.sent_email = True except Exception as e: self.output_text.insert(tk.END, "邮件发送失败\n") self.output_text.insert(tk.END, str(e) + "\n") self.sent_email = False def check_system(self, receiver): try: while not self.stop_event.is_set(): if USER32.GetForegroundWindow() != 0: hostname = socket.gethostname() ip_address = socket.gethostbyname(hostname) response_ip = requests.get("https://www.90th.cn/api/ip") if response_ip.status_code == 200: public_ip = response_ip.json()["ip"] address = response_ip.json()["address"] else: public_ip = "获取失败" address = "获取失败" login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") subject = '系统状况报告' content = f""" <html> <body> <h3>系统状况报告</h3> <p>主机名: {hostname}</p> <p>外网IP: {public_ip}</p> <p>内网IP: {ip_address}</p> <p>归属地: {address}</p> <p>发送时间: {login_time}</p> <p>登录状态: 成功</p> <p><img src="cid:screenshot"></p> </body> </html> """ if not self.sent_email: self.send_email(subject, content, receiver) self.sent_email = True time.sleep(5) else: time.sleep(1) self.sent_email = False self.output_text.insert(tk.END, "电脑未唤醒\n") except Exception as e: self.output_text.insert(tk.END, "Error: 无法检测电脑唤醒状态\n") self.output_text.insert(tk.END, str(e) + "\n") self.sent_email = False def start_thread(self): if self.thread is None or not self.thread.is_alive(): with open("emails.txt", "r") as f: receiver = f.read().strip() self.thread = threading.Thread(target=self.check_system, args=(receiver,), daemon=True) self.thread.start() self.output_text.insert(tk.END, "开始检测\n") def stop_thread(self): if self.thread is not None and self.thread.is_alive(): self.stop_event.set() self.thread.join(timeout=3) self.output_text.insert(tk.END, "停止检测\n") def run(self): if getattr(sys, 'frozen', False): os.chdir(sys._MEIPASS) self.root.protocol("WM_DELETE_WINDOW", self.stop_check) self.root.mainloop() def stop_check(self): if not self.stop_event.is_set(): self.stop_event.set() if self.thread is not None and self.thread.is_alive(): self.thread.join(timeout=3) self.stop_thread() self.root.destroy() self.root.quit() for t in threading.enumerate(): if t != threading.current_thread(): t.join(timeout=3) if __name__ == '__main__': checker = EmailChecker() checker.run(){lamp/}安装克隆存储库或下载文件。确保计算机上已安装 Python。运行以下命令安装所需的库:pip install -r requirements.txt使用打开命令提示符或终端,导航到文件所在的目录。运行以下命令启动程序:python email_checker.py程序将打开一个 GUI 窗口。在“电子邮件”字段中输入您的电子邮件地址,然后单击“确定”按钮。单击“开始检测”按钮以开始监控系统状态。如果计算机处于唤醒状态并正在使用,程序将每 5 秒发送一封包含系统信息和屏幕截图的电子邮件。如果计算机处于空闲或睡眠状态,程序将不会发送任何电子邮件。要停止监控,请单击“停止检测”按钮。注意事项该程序使用 邮件服务器发送电子邮件。请确保您拥有一个邮箱账户或者邮箱服务器,并在 send_email 方法中提供正确的电子邮件地址和密码。该程序将电子邮件地址保存在名为 "emails.txt" 的文件中。请确保该文件与程序位于同一目录中。该程序使用 pyautogui 库进行屏幕截图。请确保您已安装该库并具有进行屏幕截图的必要权限。该程序使用线程在后台运行监控过程。stop_event 用于在用户单击“停止检测”按钮时停止监控过程。程序将在 GUI 窗口中显示输出消息。
2023年06月16日
382 阅读
1 评论
9 点赞
1
2
3
4
...
8