首页
下载
关于
Search
1
制作qcow2格式镜像
9 阅读
2
n2n内网穿透保姆教学
8 阅读
3
Linux小分享(一)
7 阅读
4
Go实现加班通知你老婆的脚本
6 阅读
5
Python实现分布式键值存储系统
5 阅读
日常记录
网络安全
Python
运维
Go
登录
Search
标签搜索
Python
算法
Go
定时任务
AiiCi
累计撰写
9
篇文章
累计收到
1
条评论
今日撰写
0
篇文章
首页
导航栏
日常记录
网络安全
Python
运维
Go
页面
下载
关于
用户登录
登录
搜索到
9
篇与
AiiCi
的结果
2024-06-11
制作qcow2格式镜像
初始化使用Vmware虚拟机作为底座,需要开启母机的虚拟化引擎,【设置】->【处理器】->【虚拟化引擎勾选1和2两项】配置源并安装软件wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo yum clean all yum makecache #安裝 yum -y install qemu-kvm qemu-img kvm qemu-kvm-tools libvirt bridge-utils virt-*启动并创建镜像systemctl enable --now libvirtd echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf sysctl -p #创建镜像 qemu-img create -f qcow2 /data/CentOS7_bt.qcow2 20G #20G表示大小创建KVM虚拟机virt-install --name CentOS7_bt --ram 2048 --vcpus 4 --os-type linux --os-variant rhel7 --arch=x86_64 --network network=default,model=virtio --disk path=/data/CentOS7_bt.qcow2,format=qcow2 --location /data/CentOS-7-x86_64-Minimal-2009.iso --console pty,target_type=serial --graphics vnc,listen=0.0.0.0,port=7788连接虚拟机使用UltraVNC工具连接宿主机的VNC:7788端口,并完成系统的安装,完成后镜像定制化操作。压缩镜像virt-sparsify --compress /data/CentOS7_bt.qcow2 /data/centos7_bt.qcow2测试镜像virt-install --virt-type kvm --name bt-test --ram 4096 --vcpus=4 \ --import \ --disk path=/data/centos7_bt.qcow2,format=qcow2 \ --network network=default,model=virtio \ --graphics vnc,listen=0.0.0.0,port=7799 \ --os-type=linux
2024年06月11日
9 阅读
0 评论
0 点赞
2024-05-24
Go每日一练之切片&数组去重复
描述Go中没有像Python那样的集合函数,可以很快捷的进行去重操作,但实际应用中常常会遇到需要去重的时候。切片场景1:已经存在的一个切片要去掉其中重复的内容。一般使用map来进行辅助,map的键可以存储切片中的元素,值设置为布尔类型。示例代码如下:func removeDuplicates(slice []int) []int { //使用map来记录出现过的元素 seen := make(map[int]bool) //创建一个无重复的元素切片 unique := []int{} //遍历原始切片 for _,value := range slice{ if _,ok :=seen[value];!ok{ //如果元素没有出现过,就添加到map和新切片中 seen[value]=true unique = append(unique,value) } } return unique }场景2:在进行爬虫操作的时候,用正则表达式获取到的字符串,想要去掉重复的内容。可以通过定义个containers函数进行辅助,如果这个字符串已经在这个数据中则不进行存储。示例代码如下:func containers(selice []string,target string) bool{ for _,value := range selice{ if value == target{ return true } } return false }数组在Go中处理数组去重有点不同于处理切片,因为数组的大小在声明时就已经固定,无法动态改变。可以通过创建一个新的切片来存放数组中的唯一元素,然后返回这个切片,实际操作和切片差不多,需求注意的就是长度也是数组的一部分。示例代码:func removeDuplicatesArr(arr [5]int) []int{ seen := make(map[int]bool) unique := []int{} for _,value := range arr{ if _,ok := seen[value]; !ok{ seen[value]=true unique=append(unique,value) } } return unique }拓展1:数组/切片中找到重复元素所在的索引。思路:要找出数组中重复元素的位置,可以利用map来存储每个元素第一次出现的位置,同时检查元素是否已经出现过。如果发现一个元素已经记录在map中,就可以将其位置记录到切片中。func findDuplicates(arr []int) map[int][]int{ positions := make(map[int][]int) seen :=make(map[int]int) for index,value := range arr{ if firstIndex,found := seen[value];found { //如果元素已经出现过,将其位置添加到positions中 if _,exists := positions[value];exists{ positions[value]=append(positions[value],index) }else{ positions[value]=[]int{firstIndex,index} } }else{ //记录元素第一次出现的位置 seen[value] = index } } return positions }在这个示例中,findDuplicates函数接受一个整数数组,并返回一个map,其中键是数组中的重复元素,值是这些元素出现的所有位置的切片。函数首先遍历数组,记录每个元素首次出现的位置。如果元素已经出现过,就更新该元素在positions中的位置列表。拓展2:找出数组中重复元素并统计其个数。func countDuplicates(arr []int) map[int]int { countMap := make(map[int]int) for _, value := range arr { // 每遇到一个元素,就在其对应的计数上加1 countMap[value]++ } // 可选: 移除只出现一次的元素 for key, count := range countMap { if count == 1 { delete(countMap, key) } } return countMap }
2024年05月24日
5 阅读
0 评论
0 点赞
2024-05-22
windows系统出现msedge.exe 没有注册类
一、现象windows系统没发打开应用,出现下图所示内容:二、解决使用ctrl+alt+delete,选择任务管理器,然后新建任务,输入cmd命令行操作使用下列命令进行修复:for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i #然后进行重器 shutdown -r -t 0 #重启完成后在运行 Dism /Online /Cleanup-Image /ScanHealth Dism /Online /Cleanup-Image /CheckHealth DISM /Online /Cleanup-image /RestoreHealth sfc /SCANNOW执行完成后再次进行重启,查看windows系统组件是否正常。
2024年05月22日
4 阅读
0 评论
0 点赞
2024-05-21
n2n内网穿透保姆教学
一、简介二、服务端部署系统环境:Centos7.9首先在服务端下载相关包,进行安装https://github.com/ntop/n2n/releases/tag/3.0yum install -y n2n-3.0.0-1038.x86_64.rpm 安装完成后,在/etc/n2n下会有相关的配置文件,systemctl里也会新增supernode和edge两个服务,也就是 n2n 的服务端和客户端。修改配置文件,在配置文件底下已经有了,复制一份然后进行修改。cp /etc/n2n/supernode.conf.sample /etc/n2n/supernode.conf cat >/etc/n2n/supernode.conf<<-EOF -p=5468 -F=iciia EOF #-p 是端口号,还需要在云服务器的防火墙面板放行5468端口(UDP)。 #-F 是服务器的名字,客户端连接时要核对。启动并设置开机自启systemctl enable --now supernode && systemctl status supernode三、客户端对于windows系统来说,先安装虚拟网卡tap-windows根据下载包有三个软件,分别为edge.exe、n2n-keygen.exe和supernode.exe。先生成公钥.\n2n-keygen.exe -F iciia #会得到如下内容 -P lyysBMJktQgWu9m8kocU5SW7JW78f-p3l7cd0u-X1q0-P 就是我们连接时需要的公钥了。接下来在edge.exe同级目录下,新建一个配置文件edge.conf,写入下列内容:-l 101.43.53.10:5468 -P lyysBMJktQgWu9m8kocU5SW7JW78f-p3l7cd0u-X1q0 -c iciia-l 是云服务器的 IP 和 端口。-P 是 公钥,刚才 n2n-keygen 生成的密文,用来验证服务器名。-c 是 community,可以理解为房间名,不同房间网络不互通。然后直接双击edge.exe运行即可,出现如下图所示表示连接成功。四、用户访问权限要设置用户访问权限的话,在云服务器上修改配置文件,/etc/n2n/supernode.conf,加入 -c=/etc/n2n/community.list然后创建 /etc/n2n/community.list,如下所示是仅允许 iciia这个房间名,以及这个房间允许的用户aiici。其他所有连接请求全部拒绝。iciia * aiici Po4-yH5cmJ8O88vtXhSXp5-M6H-krVtkbKTZYHAvT2S要得到加密的密码,使用n2n-keygen这个工具,如下设置aiici用户和密码。n2n-keygen.exe aiici abc123 #运行完成后会得到 * aiici Po4-yH5cmJ8O88vtXhSXp5-M6H-krVtkbKTZYHAvT2S接下来修改客户端的配置(edge.conf)-l 101.43.53.10:5468 -P lyysBMJktQgWu9m8kocU5SW7JW78f-p3l7cd0u-X1q0 -c iciia -I aiici -J abc123 -A5 -k aiici参数说明:-I 用户名-J 明文密码-A5 加密算法,A5 代表 Speck-CTR-k 加密密钥,给加密算法使用的,可随意填写
2024年05月21日
8 阅读
0 评论
0 点赞
2024-05-16
Go实现加班通知你老婆的脚本
思路与设计:使用 github.com/robfig/cron 包创建两个定时任务,一个用于加班提醒,一个用于下班提醒。加班提醒定时任务在指定时间发送加班提醒信息。下班提醒定时任务在指定时间发送下班提醒信息。使用第三方短信服务发送信息,这里假设使用 Twilio 服务。代码实现:package main import ( "fmt" "log" "time" "github.com/robfig/cron" "github.com/sfreiberg/gotwilio" ) // Twilio账号信息 const ( AccountSid = "your_account_sid" AuthToken = "your_auth_token" YourNumber = "+1234567890" // 你的Twilio电话号码 ReceiverNum = "+1234567890" // 接收提醒信息的电话号码 ) // 发送提醒信息 func sendReminderMessage(message string) { twilio := gotwilio.NewTwilioClient(AccountSid, AuthToken) _, exception, err := twilio.SendSMS(YourNumber, ReceiverNum, message, "", "") if err != nil || exception != nil { log.Fatalf("Error sending SMS: %v, Exception: %v", err, exception) } fmt.Println("提醒信息已发送!") } // 发送加班提醒信息 func sendOvertimeMessage() { message := "加班提醒:今天加班记得注意身体,辛苦了!" sendReminderMessage(message) } // 发送下班提醒信息 func sendOffWorkMessage() { message := "下班提醒:下班时间到啦,记得安全回家哦!" sendReminderMessage(message) } func main() { // 创建定时任务调度器 c := cron.New() // 加班提醒定时任务,每天晚上18:00执行 c.AddFunc("0 18 * * *", sendOvertimeMessage) // 下班提醒定时任务,每天晚上19:00执行 c.AddFunc("0 19 * * *", sendOffWorkMessage) // 启动定时任务调度器 c.Start() // 程序运行,阻塞主 goroutine select {} }注:Twilio是要花钱的,所以请确保用户余额。
2024年05月16日
6 阅读
0 评论
0 点赞
1
2