Golang囊地鼠gopher
开发知识点-golang
- 介绍
- 红队专题-Golang工具Fscan
- 简介
- 主要功能
- ubuntu 安装
- windows 安装
- 常用命令:
- 项目框架
- 源文件
- common目录
- Plugins目录
- Webscan目录
- 入口点
- 插件扫描类型
- 爆破插件
- common.Scantype
- Webtitle函数
- webpoc扫描
- POC 执行
- CEL-GO 实践
- CEL
- 指纹识别
- 免杀
- 源码特征
- 参考链接
- 红队专题-Golang工具ChYing
- 原chying工具代码分析
- 并发访问控制
- 并发 原子 写入
- 读取
- 通道
- 嵌套映射结构
- 初始化
- 启动代理服务器
- 重启代理服务器
- vite 构建前端页面
- 编译
- 标准库
- bytes
- fmt
- io
- ioioutil
- os
- osexec
- path
- sync
- 第三方包
- gui
- init
- **Go工作目录及包创建**
- 初始化
- **Go环境变量配置**
- 方法1、
- 代码混淆
- 编译混淆
- honnef.co/go/tools/cmd/staticcheck
- WailsJS
- 新建 helloword
- 类型
- 基本类型
- 变量(variable)
- 命名
- 空标识符
- 定义
- 简短模式(short variable declaration)
- 多变量赋值
- 未使用错误
- 常量
- 枚举
- 关键字
- var
- 环境搭建
- win10配置go环境
- ubuntu20.04安装golang
- 介绍
- 下载 Go 压缩包
- 调整环境变量
- 验证 Go 安装过程
libp2p/go-libp2p: libp2p implementation in Go (github.com)
go-libp2p
,它提供了 DHT(IPFS 使用的 Kademlia DHT)和 QUIC 支持。
介绍
Go,通常被称为 golang
一门由 Google 创建的现代化的开源编程语言,
它允许你构建实时并且高效的应用。
很多流行的应用程序,
例如 Kubernetes,Docker,Prometheus 和 Terraform,
都是使用 Go 来编写的。
下载 Go 压缩包
Go 1.14.2
https://golang.google.cn/doc/install
https://golang.org/dl/
以 root 或者其他 sudo 用户身份运行下面的命令,
下载并且解压 Go 二进制文件到/usr/local目录
调整环境变量
通过将 Go 目录添加到$PATH环境变量,
系统将会知道在哪里可以找到 Go 可执行文件。
这个可以通过添加到/etc/profile文件(系统范围内安装)
或者$HOME/.profile文件(当前用户安装):
登录后复制
export PATH=$PATH:/usr/local/go/bin
1.
保存文件,并且重新加载新的PATH 环境变量到当前的 shell 会话:
登录后复制
source ~/.profile
1.
验证 Go 安装过程
通过打印 Go 版本号,验证安装过程。
登录后复制
go version
1.
复制
输出应该像下面这样:
go version go1.14.2 linux/amd6
go.sum
记录项目依赖的确切版本,以确保在不同环境中能够复现相同的构建结果。
go.mod
go.uber.org/fx
用于Go语言的依赖注入(Dependency Injection)库。
帮助开发者从应用程序中删除全局状态,不再使用init()函数或全局变量,而是使用fx管理的单例。此外,fx允许组织内的团队构建松散耦合且良好集成的可共享组件,是Uber公司几乎所有Go服务的支柱。
goimports
go get github.com/spf13/cobra用于创建命令行工具的库(框架),可以创建出类似git或者go一样的工具,进行我们平时熟悉的git clone/pull、go get/install等操作。kubernetes工具中就使用了cobra。上述这些命令行工具的--help/-h既好看又好理解,开始时我也会好奇这些工具是如何实现多级子命令支持的?cobra的目标即是提供快速构建出此类工具的能力(cobra是框架,具体的业务逻辑当然还是要自己写)。例如可以为我们app或系统工具的bin文件添加--config来启动服务、添加--version来查看版本号等等。相比起标准库里的flag包,cobra强大了很多。官网列出了cobra的一大堆优点:1. 易用的subcommand模式(即嵌套命令或子命令)2. 强大的flags支持(参考标准库flagSet)3. 支持global、local、cascading级别的flag设置4. 错误时的智能提示5. 自动生成的、美观的help信息,并默认支持--help和-h打印help信息6. 提供命令自动补全功能(bash, zsh, fish, powershell环境)7. 提供命令man page自动生成功能
golang.org/x/crypto/openpgp/armor
Go 语言的一个扩展库,属于 `golang.org/x/crypto` 项目,专门用于处理 OpenPGP 消息的 ASCII 装甲(Armor)编码和解码。OpenPGP 是一种基于 PGP(Pretty Good Privacy)的加密和签名数据的标准,它广泛应用于电子邮件和文件的加密传输中。ASCII 装甲是一种文本编码方式,它可以将二进制数据编码为只包含 ASCII 字符的文本,这样数据就可以通过电子邮件、文本文件等方式安全地传输,而不会被邮件系统或文件存储系统错误地处理或损坏。
golang.org/x/crypto/openpgp/packet
专门用于处理 OpenPGP 消息中的各个包(packet)的解析和构造。OpenPGP 是一种基于 PGP(Pretty Good Privacy)的加密和签名数据的标准,它定义了如何在电子邮件和其他通信中安全地传输加密、签名和密钥交换数据。在 OpenPGP 消息中,数据被组织成一系列的包(packet),每个包都包含了一定类型的信息,如公钥、私钥、加密数据、签名等。`packet` 包提供了对这些包进行解析和构造的功能。
github.com/sirupsen/logrus
Go 语言的日志库它提供了丰富的日志输出和格式化功能,被广泛应用于 Go 语言项目中,用于记录程序的运行状态、错误信息和调试信息等
github.com/ulikunitz/xz
Go 语言的库,它提供了对 XZ 压缩格式的支持。XZ 是一种高效的压缩格式,它基于 LZMA2 压缩算法,通常比传统的 gzip 或 zip 格式提供更好的压缩率。这个库允许 Go 开发者在他们的项目中读取和写入 XZ 压缩的文件。
golang.zx2c4.com/wireguard/wgctrl/wgtypes
Go 语言中用于处理 WireGuard 配置和状态信息的包的一部分,它位于 WireGuard 的 Go 控制接口(wgctrl)库中。WireGuard 是一种新型的网络协议和工具,旨在提供一种快速、简单、安全的方式来加密网络流量。`wgtypes` 包主要定义了一系列与 WireGuard 配置相关的数据类型和常量,如网络接口配置(如 IP 地址、密钥等)、设备状态等。这些类型通常用于在应用程序和 WireGuard 控制接口之间进行数据交换。
golang.org/x/crypto/acme/autocert
Go 语言的一个库,它实现了自动证书管理环境(ACME)协议的客户端,用于自动获取和管理 Let's Encrypt 或其他支持 ACME 协议的证书颁发机构(CA)的 TLS 证书。这个库特别适用于需要自动续期证书并希望简化证书管理过程的 web 服务器和应用程序。
go mod init hello-worldpackage mainimport "fmt"func main() {fmt.Println("Hello, World!")
}
go复制代码package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/base64" "encoding/json" "fmt" "io") // 定义指令结构type Instruction struct { Type string `json:"type"` Action string `json:"action"` Params map[string]interface{} `json:"params"` Signature string `json:"signature"` // 用于身份验证的签名} // 加密函数func encrypt(plaintext, key []byte) (string, error) { block, err := aes.NewCipher(key) if err != nil { return "", err } ciphertext := make([]byte, aes.BlockSize+len(plaintext)-aes.BlockSize%len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return "", err } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) return base64.StdEncoding.EncodeToString(ciphertext), nil} // 解密函数func decrypt(ciphertext string, key []byte) (string, error) { encodedText, err := base64.StdEncoding.DecodeString(ciphertext) if err != nil { return "", err } block, err := aes.NewCipher(key) if err != nil { return "", err } iv := encodedText[:aes.BlockSize] encodedText = encodedText[aes.BlockSize:] stream := cipher.NewCFBDecrypter(block, iv) stream.XORKeyStream(encodedText, encodedText) return string(encodedText), nil}
- 节点激活机制
每个节点需要监听网络上的指令,验证指令格式和密钥,并在验证通过后激活为master节点。
go复制代码// 示例:节点监听和处理指令func listenForInstructions(listener net.Listener, secretKey []byte) { for { conn, err := listener.Accept() if err != nil { log.Println("Error accepting connection:", err) continue } go handleConnection(conn, secretKey) }} func handleConnection(conn net.Conn, secretKey []byte) { defer conn.Close() buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { log.Println("Error reading from connection:", err) return } encryptedInstruction := string(buf[:n]) plaintextInstruction, err := decrypt(encryptedInstruction, secretKey) if err != nil { log.Println("Error decrypting instruction:", err) return } var instruction Instruction err = json.Unmarshal([]byte(plaintextInstruction), &instruction) if err != nil { log.Println("Error parsing instruction:", err) return } // 验证签名(这里省略了具体实现) if !verifySignature(instruction.Signature, instruction) { log.Println("Invalid signature") return } // 激活为master节点(这里可以添加更多的逻辑) activateAsMaster(instruction)} func activateAsMaster(instruction Instruction) { fmt.Println("Activated as master with instruction:", instruction) // 在这里实现master节点的逻辑} // 示例签名验证函数(需要具体实现)func verifySignature(signature string, instruction Instruction) bool { // 实现签名验证逻辑 return true}
- Master节点权限
Master节点应该有一个时间限制,并且在权限过期后自动撤销。可以使用一个goroutine来监控master节点的状态。
go复制代码var masterActive boolvar masterExpireTime time.Timevar masterMutex sync.Mutex func activateAsMasterWithExpiry(instruction Instruction, duration time.Duration) { masterMutex.Lock() defer masterMutex.Unlock() masterActive = true masterExpireTime = time.Now().Add(duration) go monitorMasterStatus() // 在这里实现master节点的逻辑} func monitorMasterStatus() { for { masterMutex.Lock() if !masterActive || time.Now().After(masterExpireTime) { masterActive = false fmt.Println("Master status expired or revoked") masterMutex.Unlock() break } masterMutex.Unlock() time.Sleep(1 * time.Second) }}
go复制代码package main import ( "crypto/hmac" "crypto/sha256" "encoding/hex" "encoding/json" "fmt" "io/ioutil" "log" "net" "net/http" "sync" "time") const ( secretKey = "your-secret-key" // 用于HMAC的秘密密钥 listenAddr = ":8080" // 节点监听的地址) type DHT struct { store map[string]string mu sync.Mutex master bool timer *time.Timer} type Command struct { Type string `json:"type"` Action string `json:"action"` Key string `json:"key"` Value string `json:"value,omitempty"` Signature string `json:"signature"`} func NewDHT() *DHT { return &DHT{ store: make(map[string]string), }} func (dht *DHT) Start() { http.HandleFunc("/command", dht.handleCommand) log.Println("DHT node is listening on", listenAddr) log.Fatal(http.ListenAndServe(listenAddr, nil))} func (dht *DHT) handleCommand(w http.ResponseWriter, r *http.Request) { body, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, "Failed to read request body", http.StatusBadRequest) return } defer r.Body.Close() var cmd Command if err := json.Unmarshal(body, &cmd); err != nil { http.Error(w, "Invalid JSON format", http.StatusBadRequest) return } if !dht.verifySignature(cmd) { http.Error(w, "Invalid signature", http.StatusForbidden) return } if cmd.Type == "activate" && cmd.Action == "master" { dht.activateAsMaster() fmt.Fprintln(w, "Activated as master") return } if !dht.master { http.Error(w, "Only master can execute commands", http.StatusForbidden) return } switch cmd.Action { case "put": dht.put(cmd.Key, cmd.Value) case "get": dht.get(w, cmd.Key) case "delete": dht.delete(cmd.Key) default: http.Error(w, "Unknown action", http.StatusBadRequest) }} func (dht *DHT) verifySignature(cmd Command) bool { message := fmt.Sprintf("%s:%s:%s", cmd.Type, cmd.Action, cmd.Key) if cmd.Value != "" { message += ":" + cmd.Value } h := hmac.New(sha256.New, []byte(secretKey)) h.Write([]byte(message)) expectedSignature := hex.EncodeToString(h.Sum(nil)) return hmac.Equal([]byte(expectedSignature), []byte(cmd.Signature))} func (dht *DHT) activateAsMaster() { dht.mu.Lock() defer dht.mu.Unlock() dht.master = true dht.timer = time.AfterFunc(10*time.Second, func() { dht.mu.Lock() defer dht.mu.Unlock() dht.master = false log.Println("Master privileges revoked") }) log.Println("Activated as master for 10 seconds")} func (dht *DHT) put(key, value string) { dht.mu.Lock() defer dht.mu.Unlock() dht.store[key] = value log.Printf("Put key %s with value %s\n", key, value)} func (dht *DHT) get(w http.ResponseWriter, key string) { dht.mu.Lock() defer dht.mu.Unlock() value, exists := dht.store[key] if !exists { http.Error(w, "Key not found", http.StatusNotFound) return } fmt.Fprintln(w, value)} func (dht *DHT) delete(key string) { dht.mu.Lock() defer dht.mu.Unlock() delete(dht.store, key) log.Printf("Deleted key %s\n", key)} func main() { dht := NewDHT() dht.Start()}
go复制代码package main import ( "crypto/hmac" "crypto/sha256" "encoding/hex" "encoding/json" "fmt" "io/ioutil" "log" "net" "net/http" "os" "strconv" "sync" "time" "crypto/tls" "crypto/x509") const ( networkPort = "8080" masterActivationKey = "supersecretkey" // Replace with a real secret key masterDuration = 10 * time.Second // Master node duration) type Instruction struct { Type string `json:"type"` Params interface{} `json:"params,omitempty"` Timestamp int64 `json:"timestamp"` HMAC string `json:"hmac"`} type Node struct { id string isMaster bool masterTimer *time.Timer mu sync.Mutex} func (n *Node) ListenAndServe() { http.HandleFunc("/receive", n.handleReceive) server := &http.Server{ Addr: ":" + networkPort, TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS12, ClientCAs: x509.NewCertPool(), // Load client certificates here ClientAuth: tls.RequireAndVerifyClientCert, }, } // Load server certificates cert, err := tls.LoadX509KeyPair("server.crt", "server.key") if err != nil { log.Fatalf("failed to load server certificates: %v", err) } server.TLSConfig.Certificates = []tls.Certificate{cert} log.Printf("Node %s listening on port %s...", n.id, networkPort) err = server.ListenAndServeTLS("", "") // "" means use the TLSConfig to set certificates if err != nil { log.Fatalf("failed to start server: %v", err) }} func (n *Node) handleReceive(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) return } body, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, "Failed to read request body", http.StatusBadRequest) return } defer r.Body.Close() var instr Instruction err = json.Unmarshal(body, &instr) if err != nil { http.Error(w, "Failed to unmarshal instruction", http.StatusBadRequest) return } if !n.verifyInstruction(instr) { http.Error(w, "Invalid instruction signature", http.StatusForbidden) return } if instr.Type == "activate_master" { n.activateAsMaster() w.WriteHeader(http.StatusOK) w.Write([]byte("Node activated as master")) return } if n.isMaster { // Handle master-only operations here n.logOperation(instr) w.WriteHeader(http.StatusOK) w.Write([]byte("Operation performed by master")) return } w.WriteHeader(http.StatusOK) w.Write([]byte("Operation performed by regular node"))} func (n *Node) verifyInstruction(instr Instruction) bool { timestampStr := strconv.FormatInt(instr.Timestamp, 10) data := []byte(fmt.Sprintf("%s%s%s", instr.Type, timestampStr, fmt.Sprintf("%v", instr.Params))) mac := hmac.New(sha256.New, []byte(masterActivationKey)) mac.Write(data) expectedMAC := mac.Sum(nil) return hex.EncodeToString(expectedMAC) == instr.HMAC} func (n *Node) activateAsMaster() { n.mu.Lock() defer n.mu.Unlock() if n.isMaster { return } n.isMaster = true n.masterTimer = time.AfterFunc(masterDuration, n.deactivateAsMaster) log.Printf("Node %s activated as master for %v", n.id, masterDuration)} func (n *Node) deactivateAsMaster() { n.mu.Lock() defer n.mu.Unlock() if !n.isMaster { return } n.isMaster = false log.Printf("Node %s deactivated as master", n.id)} func (n *Node) logOperation(instr Instruction) { // Simple logging to stdout for demonstration log.Printf("Master node %s performed operation: %v", n.id, instr) // In a real-world application, log to a file or centralized logging service} func main() { nodeID := "node1" // For demonstration, use a static ID node := &Node{id: nodeID} // Ensure server certificates and keys are generated and available if _, err := os.Stat("server.crt"); os.IsNotExist(err) { log.Fatalf("server certificate not found: %v", err) } if _, err := os.Stat("server.key"); os.IsNotExist(err) { log.Fatalf("server key not found: %v", err) } node.ListenAndServe()}
“github.com/multiformats/go-multiaddr”
实现了多地址(Multiaddr)的编码、解码和解析功能。多地址是一种网络地址格式,旨在以一种统一和可扩展的方式表示各种网络协议和地址信息。这种格式被广泛应用于点对点(P2P)网络、区块链和其他分布式系统中。
#1. 设置DHT网络
使用现有的DHT库(如go-libp2p-dht)来设置DHT网络。
go复制代码import ( "github.com/libp2p/go-libp2p-dht" // 其他必要的库) func setupDHT() (*dht.Dht, error) { // 初始化DHT网络 // ... return dhtInstance, nil}
TokTok/go-toxcore
为用户提供易于获取的安全和隐私保护的点对点(无服务器)即时通讯工具。它使用 libsodium(基于 NaCl)进行加密和身份验证。
go get github.com/quic-go/quic-go
Go语言编写的开源库,它实现了QUIC(Quick UDP Internet Connections)协议。
QUIC是一种在UDP(用户数据报协议)上运行的传输层网络协议,旨在提供低延迟、多路复用和加密的数据传输。这个库使得开发者能够轻松地在自己的Go项目中集成QUIC协议,从而利用该协议的优势来提升应用的性能和安全性。
Golang使用Quic-Go开源库实现Quic客户端和服务端_golang quic-CSDN博客
func setupQUICServer(listener net.PacketConn, dht *dht.Dht) { config := &quic.Config{ // 配置QUIC参数 } listener.SetReadDeadline(time.Now().Add(10 * time.Second)) for { sess, err := quic.Accept(listener, config, nil) if err != nil { // 处理错误 continue } go handleSession(sess, dht) }}
#3. 处理QUIC会话
在QUIC会话中处理客户端指令。
go复制代码func handleSession(sess quic.Session, dht *dht.Dht) { stream, err := sess.AcceptStream() if err != nil { // 处理错误 return } defer stream.Close() buf := make([]byte, 1024) n, err := stream.Read(buf) if err != nil { // 处理错误 return } // 解析指令 var instruction Instruction err = json.Unmarshal(buf[:n], &instruction) if err != nil { // 处理错误 return } // 验证HMAC签名和TLS证书 if !verifyHMAC(instruction, secretKey) || !verifyTLSCertificate(sess) { // 发送错误响应 return } // 激活为master节点(如果需要) if instruction.Type == "ACTIVATE_MASTER" { activateAsMaster(dht, sessionID) } // 处理其他指令 // ...}
#4. 激活为Master节点
设置定时器以限制master权限的持续时间。
go复制代码var masterTimer *time.Timer func activateAsMaster(dht *dht.Dht, sessionID string) { if masterTimer != nil { return // 已经有一个master节点在运行 } masterTimer = time.NewTimer(masterDuration) go func() { <-masterTimer.C deactivateMaster(sessionID) }() // 执行master节点的操作 // ...} func deactivateMaster(sessionID string) { // 撤销master权限 // ...}
#5. 安全措施和日志记录
确保所有通信都经过加密,并记录所有操作。
go复制代码func verifyHMAC(instruction Instruction, secretKey []byte) bool { // 计算并验证HMAC签名 // ... return true // 或 false} func verifyTLSCertificate(sess quic.Session) bool { // 验证TLS证书 // ... return true // 或 false} func logOperation(operation string, params map[string]interface{}) { // 记录操作日志 // ...}
package main import ( "crypto/hmac" "crypto/sha256" "crypto/tls" "crypto/x509" "encoding/hex" "fmt" "io/ioutil" "log" "net" "net/http" "strings" "time") // LoadTLSConfig loads TLS configuration from certificate and key filesfunc LoadTLSConfig(certFile, keyFile string) (*tls.Config, error) { cert, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { return nil, err } caCert, err := ioutil.ReadFile("ca.crt") if err != nil { return nil, err } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) tlsConfig := &tls.Config{ Certificates: []tls.Certificate{cert}, RootCAs: caCertPool, ClientCAs: caCertPool, ClientAuth: tls.RequireAndVerifyClientCert, MinVersion: tls.VersionTLS12, CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384}, } return tlsConfig, nil} // GenerateHMAC generates HMAC using a secret key and a messagefunc GenerateHMAC(secret, message string) string { h := hmac.New(sha256.New, []byte(secret)) h.Write([]byte(message)) return hex.EncodeToString(h.Sum(nil))} // VerifyHMAC verifies HMAC using a secret key, a message, and an HMAC valuefunc VerifyHMAC(secret, message, hmacValue string) bool { expectedHMAC := GenerateHMAC(secret, message) return hmacValue == expectedHMAC}
#2. DHT节点实现
这里我们简单实现一个DHT节点,使用内存存储哈希表。
type DHTNode struct { ID string Store map[string]string Neighbors []string MasterKey string IsMaster bool Server *http.Server TLSConfig *tls.Config} func NewDHTNode(id, certFile, keyFile, masterKey string) (*DHTNode, error) { tlsConfig, err := LoadTLSConfig(certFile, keyFile) if err != nil { return nil, err } node := &DHTNode{ ID: id, Store: make(map[string]string), Neighbors: []string{}, MasterKey: masterKey, IsMaster: false, TLSConfig: tlsConfig, } mux := http.NewServeMux() mux.HandleFunc("/put", node.handlePut) mux.HandleFunc("/get", node.handleGet) mux.HandleFunc("/activateMaster", node.handleActivateMaster) server := &http.Server{ Addr: ":8080", Handler
相关文章:
Golang囊地鼠gopher
开发知识点-golang 介绍红队专题-Golang工具Fscan简介主要功能ubuntu 安装windows 安装常用命令:项目框架源文件common目录Plugins目录Webscan目录入口点插件扫描类型爆破插件common.ScantypeWebtitle函数webpoc扫描POC 执行CEL-GO 实践CEL指纹识别免杀源码特征参考链接红队专…...
关于如何正确在测试用例中mock静态方法的问题
文章目录 情况一:希望在测试用例中直接执行静态方法的逻辑情况二:不希望在测试用例中执行静态方法的逻辑插桩方法坑1: 报错SubclassByteBuddyMockMaker原因与解决方案坑2:报错 the existing static mock registration must be deregistered原…...
深度学习0-前置知识
一、背景 AI最大,它的目的是通过让机器模仿人类进而超越人类; ML次之,它是AI的一个分支,是让机器模仿人类的一种方法。开发人员用大量数据和算法“训练”机器,让机器自行学会如何执行任务,它的成功取决于…...
web网页前后端交互方式
参考该文, 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单,设置method属性定义发送表单数据的方式是get还是post。 如使用get方式,则提交的数据会在url中显示;如使用post方式,提交…...
电商大数据的几种获取渠道分享!
在当今数字化时代,电商大数据已成为企业决策和运营的重要基础。如何高效地获取、分析和利用这些数据,对于提升电商企业的竞争力至关重要。本文将详细介绍几种电商大数据的获取渠道,帮助电商从业者更好地掌握数据资源,提升业务洞察…...
【图像配准】方法总结
图像配准(Image registration)就是将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…...
SSM 超市管理系统
🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...
【Yonghong 企业日常问题04】永洪BI可视化工具Linux部署全攻略(部署详解版)
文章目录 一、准备工作二、服务器环境配置2.1 安装JDK2.2 安装字体 三、产品安装四、相关资料 一、准备工作 在进行部署之前需要有以下几项工作准备: 1.产品安装包 2.对应版本的License 3.对应版本的JDK(推荐JDK11,产品v8版本以上需要JDK11以上版本) 4.…...
ubuntu下gdb调试ROS
参考: 使用VsCode进行ROS程序调试_ros vscode 调试-CSDN博客 https://blog.csdn.net/weixin_45031801/article/details/134399664?spm1001.2014.3001.5506 一、调试准备 1.1 CMakeLists改动 注释文件中的 set(CMAKE_BUILD_TYPE "Release") #构建类…...
scala中正则表达式的使用
正则表达式: 基本概念 在 Scala 中,正则表达式是用于处理文本模式匹配的强大工具。它通过java.util.regex.Pattern和java.util.regex.Matcher这两个 Java 类来实现(因为 Scala 运行在 Java 虚拟机上,可以无缝使用 Java 类库&…...
语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限
环境: Win10专业版 谷歌浏览器 版本 131.0.6778.140(正式版本) (64 位) 问题描述: 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能,因为安全性问题,需要在…...
前端本地数据存储方式有哪些
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在前端开发中,本地数据存储是实现客户端数据持久化的关键技术。以下是几种常见的前端本地数据存储方式: …...
python总说的cd是什么
以下适用于windows环境 cd就是change directory的缩写,即改变目录。 讲cd命令之前,先来看看提示符是什么意思。现在的提示符是c:\> c:说明现在的工作盘是c盘,\告诉我们当前的工作目录是根目录。 >的作用是把工作目录和我们要输入的…...
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
项目场景: 提示:这里简述项目相关背景: 例如:Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题 问题描述 提示:这里描述项目中遇到的问题: 例如…...
Netdevops入门基础学习03
1、数据类型 在Python中解释器会自动识别数据类型,但是在C语言中需要手动指定(故Python简单易学) 字符串: str(string) 在Python中加了引号的都是字符串整数: int (integer)浮点数: …...
什么是自然语言处理
01.什么是自然语言处理 自然语言处理(Natural Language Processing,简称NLP)是一门跨学科领域,它结合了计算机科学、人工智能、语言学、心理学等多个学科的知识,旨在使计算机能够理解、解释、处理和生成人类语言。自然语言处理的目标是缩小人类语言和计算机之间的差距,使…...
网络安全怎么学习
当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。 一、网络安全的基本概念 网络安全是一种保护:它涉及保护我们的设…...
网络多层的协议详述
网络层 1)地址管理:制定一系列的规则,通过地址,在网络上描述出一个设备的位置 2)路由选择:网络环境比较复杂,从一个节点到另一个节点,存在很多条不同的路径,需要规划出…...
【C#】方法参数的修饰符ref 与 out
在 C# 中,ref 和 out 是方法参数的修饰符,用于将参数 按引用传递,而不是按值传递。这允许方法修改调用者传递的变量的值。尽管它们的行为类似,但有重要的区别和适用场景。 1. ref 的含义与使用 含义 引用传递: 参数通…...
hpe服务器更新阵列卡firmware
背景 操作系统:RHEL7.8 hpe服务器经常出现硬盘断开,阵列卡重启问题,导致系统hang住。只能手动硬重启。 I/O error,dev sda smartpqi 0000:5c:00:0: resettiong scsi 1:1:0:1 smartpqi 0000:5c:00:0: reset of scsi 1:1:0:1:…...
arcgisPro相接多个面要素转出为完整独立线要素
1、使用【面转线】工具,并取消勾选“识别和存储面邻域信息”,如下: 2、得到的线要素,如下:...
【机器学习】【集成学习——决策树、随机森林】从零起步:掌握决策树、随机森林与GBDT的机器学习之旅
这里写目录标题 一、引言机器学习中集成学习的重要性 二、决策树 (Decision Tree)2.1 基本概念2.2 组成元素2.3 工作原理分裂准则 2.4 决策树的构建过程2.5 决策树的优缺点(1)决策树的优点(2)决策树的缺点(3࿰…...
YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现
概述 在之前博客中有介绍YOLOv8从环境安装到训练的完整过程,本节主要介绍ONNX Runtime的原理以及使用其进行推理加速,使用Python、C两种编程语言来实现。 https://blog.csdn.net/MariLN/article/details/143924548?spm1001.2014.3001.5501 1. ONNX Ru…...
联合物种分布模型(JSDM)与Hmsc包:群落生态学数据分析与预测技术
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…...
蓝桥杯——竞赛省赛国赛题分享
目录 一.[蓝桥杯 2013 省 AB] 错误票据 代码如下: 二.[蓝桥杯 2024 省 Java B] 报数游戏 代码如下: 讲解: 三.[蓝桥杯 2014 国 C] 拼接平方数 代码如下: 四.三步问题(递归,上台阶) 代码…...
【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案
错误日志 [ 8754.700227] usb 2-3: new full-speed USB device number 3 using xhci_hcd [ 8754.867389] usb 2-3: New USB device found, idVendor0e0f, idProduct0002, bcdDevice 1.00 [ 8754.867421] usb 2-3: New USB device strings: Mfr1, Product2, SerialNumber0 [ 87…...
Hive其一,简介、体系结构和内嵌模式、本地模式的安装
目录 一、Hive简介 二、体系结构 三、安装 1、内嵌模式 2、测试内嵌模式 3、本地模式--最常使用的模式 一、Hive简介 Hive 是一个框架,可以通过编写sql的方式,自动的编译为MR任务的一个工具。 在这个世界上,会写SQL的人远远大于会写ja…...
如何在 Ubuntu 上安装 NodeBB 并使用 Nginx 反向代理
简介 NodeBB 是一款基于 Node.js 的开源论坛软件,为在线社区提供了现代化和响应式的解决方案。在 Ubuntu Linux 上运行的 NodeBB 利用了操作系统的强大性和灵活性,以提供高性能和可扩展性。它结合了 MongoDB 或 Redis 进行数据库管理,使其能…...
Linux脚本语言学习--下
4.Bash的变量 4.1.用户自定义变量 4.1.1.什么是变量 变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息的时候,如一个文件名或是一个数字,就把他存放在一个变量中。每个变量有一个名字,所以很容易引用…...
基于Spring Boot的医院质控上报系统
一、系统背景与意义 医院质控上报系统旨在通过信息化手段,实现医院质量控制的标准化、流程化和自动化管理。该系统能够帮助医院实时监控医疗质量数据,及时发现和处理潜在的质量问题,从而确保医疗服务的安全性和有效性。同时,系统…...
React 第十七节 useMemo用法详解
概述 useMemo 是React 中的一个HOOK,用于根据依赖在每次渲染时候缓存计算结果; 大白话就是,只有依赖项发生变化时候,才会重新渲染为新计算的值,否则就还是取原来的值,有点类似 vue 中的 computed 计算属性…...
大模型呼入机器人系统如何建设?
大模型呼入机器人系统如何建设? 作者:开源呼叫中心系统 FreeIPCC, Github地址:https://github.com/lihaiya/freeipcc 大模型呼叫中心呼入机器人系统的建设是一个涉及多个环节和领域的综合性工程。以下是一个详细的步骤指南,涵盖了…...
【Java 学习】详细讲解---包和导包、Scanner类、输入源
1. 包 1.1 什么是包? 举个例子,你和你的同学有不同的家庭,你们都有自己的爸爸妈妈,都有自己的家。在自己的家中你们可以按照自己爱好摆放东西,都互不干扰。但是,假如你们的家都在一起,你们就不…...
java开发入门学习四-运算符
运算符 运算符: 运算法是一种特殊的符号,标识数据的运算,赋值等 根据分类 算数运算符 和前端运算法的方式是一致的,这里简单的描述% -- %: 取余 :增加 --: 减少 class Computed {public static voi…...
2009 ~ 2019 年 408【操作系统】大题解析
2009 年 讲解视频推荐:【BOK408真题讲解-2009年(催更就退网版)】 1. 同步与互斥(7’) 三个进程 P1, P2, P3 互斥使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数…...
RestTemplate实时接收Chunked编码传输的HTTP Response
学习调用AI接口的时候,流式响应都是使用的 Transfer-Encoding: chunked,图方便想用RestTemplate,但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式,使用下面的代码来读取,于是掉这个坑里了ÿ…...
Java设计模式 —— 【结构型模式】适配器模式(类的适配器、对象适配器、接口适配器)详解
文章目录 基本介绍一、类的适配器二、对象适配器三、接口适配器总结 基本介绍 生活中有很多例子: 不同国家的插座接口不同,需要转换器;家用电源220V,手机只接受5V充电,需要转换器;读卡器,拓展…...
RabbitMQ 消息持久化/镜像队列/lazy对时延影响
测试背景: 不同条件下RabbitMQ不同队列类型的生产时延测试: 测试环境: 机型:rabbimtq.2u4g.cluster 背景流量:1000 TPS 测试条件: 消息大小 4k,消息条数为1000条,时延取值为平均…...
SQL在线格式化 - 加菲工具
SQL在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql,点击上方的格式化按钮即可 输入框得到格式化后的sql结果...
【vue】在页面右下角添加悬浮按钮组件
效果图: 如上图所示,需要在页面的左下角添加一个悬浮按钮,鼠标放上去时候展示更多详细按钮,点击触发相应方法。 <div class"floating-component"><!-- 悬浮内容 --><el-tooltip placement"left&qu…...
MyBatis-Plus中isNull与SQL语法详解:处理空值的正确姿势
目录 前言1. 探讨2. 基本知识3. 总结 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&#x…...
C语言(指针练习2)
编写函数,要求用指针做形参,分别实现以下功能: (1)求一个字符串长度 (2)在一个字符 串中统计大写字母的个数 (3)在一个字符串中统计数字字符的个数 #include <stdio.h>int str…...
ES6学习Symbol(五)
这里写目录标题 一、概述二、代码 一、概述 ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。 它是 JavaScript 语言的第七种数据类型,前六种是: undefined 、 null 、布尔值(Boolean)、字符串(St…...
简易分页制作
简易分页功能实现 分页是一种常见的前端功能,特别是在需要展示大量数据时。它通过将数据分割成多个页面,帮助用户更容易浏览并提高页面加载性能。本文将介绍一个简易分页的实现思路及其代码实现,旨在帮助开发者快速理解并实现分页功能。 功…...
概率论得学习和整理27:关于离散的数组 随机变量数组的均值,方差的求法3种公式,思考和细节。
目录 1 例子1:最典型的,最简单的数组的均值,方差的求法 2 例子1的问题:例子1只是1个特例,而不是普遍情况。 2.1 例子1各种默认假设,导致了求均值和方差的特殊性,特别简单。 2.2 我觉得 加权…...
arXiv-2024 | NavAgent:基于多尺度城市街道视图融合的无人机视觉语言导航
作者:Youzhi Liu, Fanglong Yao*, Yuanchang Yue, Guangluan Xu, Xian Sun, Kun Fu 单位:中国科学院大学电子电气与通信工程学院,中国科学院空天信息创新研究院网络信息系统技术重点实验室 原文链接:NavAgent: Multi-scale Urba…...
WPF 布局控件
wpf 布局控件有很多,常用的有:Grid, UniformGrid, Border, StackPanel, WrapPanel, DockPanel。 1. Grid Grid 经常作为控件的 Content 使用,常作为 Windows, UserControl 等 UI 元素的根节点。它用来展示一个 n 行 n 列的排版。 因此就有…...
在Mac电脑上安装adb环境
当你在命令行输入 adb version 或adb devices, 报错:zsh: command not found: adb ,那么说明你的 Mac 上没有安装 ADB(Android Debug Bridge),或者它没有添加到你的路径中。你可以按照以下步骤安装和配置 ADBÿ…...
方正畅享全媒体新闻采编系统 reportCenter.do SQL注入漏洞复现
0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…...
Linux SHELL脚本中的常用命令
一.设置主机名称 1.文件的方式 [rootlocalhost 桌面]# vim /etc/hostname [rootlocalhost 桌面]# cat /etc/hostname shell.aaa.org 修改完毕文件后在当前的shell中是不生效的 如果需要看到效果,关闭当前shell后重新开启新的shell 2.通过命令更改主机名 [rootl…...