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-world


package main

import "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}
  1. 节点激活机制

每个节点需要监听网络上的指令,验证指令格式和密钥,并在验证通过后激活为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}
  1. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多分类交叉熵与稀疏分类交叉熵

总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…

360极速浏览器不支持看PDF

360安全浏览器采用的是基于IE内核和Chrome内核的双核浏览器。360极速浏览器是源自Chromium开源项目的浏览器&#xff0c;不但完美融合了IE内核引擎&#xff0c;而且实现了双核引擎的无缝切换。因此在速度上&#xff0c;360极速浏览器的极速体验感更佳。 展示自己的时候要在有优…

零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

麒麟信安推出支持信创PC的新一代云桌面方案,助力政务信创高效安全运维

12月11日&#xff0c;在第二届国家新一代自主安全计算系统产业集群融通生态大会上&#xff0c;麒麟信安发布了支持信创PC的新一代云桌面方案&#xff0c;该方案是基于国际TCI架构实现国产PC机云化纳管在国内的首次发布&#xff0c;并与银河麒麟桌面操作系统、长城国产PC整机实现…

vim优化

1.编辑如下内容&#xff1a; cat > /root/.vimrc <<EOF set tabstop2 " 设置 Tab 为 2 个空格 set shiftwidth2 " 设置自动缩进为 2 个空格 set expandtab " 将 Tab 转换为空格 " 基本设置 set number syntax on" 快捷键设置…

hive—常用的日期函数

目录 1、current_date 当前日期 2、now() 或 current_timestamp() 当前时间 3、datediff(endDate, startDate) 计算日期相差天数 4、months_between(endDate, startDate) 日期相差月数 5、date_add(startDate, numDays) 日期加N天 6、date_sub(startDate, numDays) 日期减…

医学分割数据集肾结石分割数据集labelme格式359张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;359 标注数量(json文件个数)&#xff1a;359 标注类别数&#xff1a;1 标注类别名称:["kidney stone"] 每个类别标注的框数&…

Vulnstack红日安全内网域渗透靶场2实战攻略

一&#xff1a;环境搭建 新增的网卡VMnet2&#xff0c;ip调成10段。 PC配置如下&#xff1a; DC在该环境中充当是域控。DC配置如下 &#xff1a; WEB配置&#xff1a;需要两块网卡&#xff0c;相当于网关服务器。 作者把外网网段都写成了192.168.111.1/24&#xff0c;我们可以…

基础库urllib的使用

学习爬虫&#xff0c;其基本的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢?请求需要我们自己构造吗?我们需要关心请求这个数据结构怎么实现吗?需要了解 HTTP、TCP、IP层的网络传输通信吗?需要知道服务器如何响应以及响应的原理吗? 可能…

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示&#xff1a;系统弹出提示框&#xff0c;告知用户有新版本的 Ubuntu 可用&#xff0c;询问用户是否想要升级。 认证窗口&#xff1a;显示了一个认证…

【环境搭建】Python、PyTorch与cuda的版本对应表

一个愿意伫立在巨人肩膀上的农民...... 在深度学习的世界里&#xff0c;选择合适的工具版本是项目成功的关键。CUDA、PyTorch和Python作为深度学习的三大支柱&#xff0c;它们的版本匹配问题不容忽视。错误的版本组合可能导致兼容性问题、性能下降甚至项目失败。因此&#xff0…

SpringBoot 学习

SpringBoot 学习 什么是 Springboot Spring Boot 是 Spring 提供的一个子项目&#xff0c;用于快速构建 Spring 应用程序 传统的问题&#xff1a; 导入依赖繁琐项目配置繁琐 SpringBoot 的特性 起步依赖&#xff1a;整合所有 web 的依赖配置好了自动配置&#xff1a;bean…

计算机网络-传输层 TCP协议(下)

目录 TCP核心机制五&#xff1a;流量控制 TCP核心机制六&#xff1a;拥塞控制 TCP核心机制七&#xff1a;延迟应答 TCP核心机制八&#xff1a;捎带应答 TCP核心机制九&#xff1a;面向字节流 粘包问题 TCP核心机制十&#xff1a;异常处理 &#xff08;1&#xff09;进程…

【游戏设计原理】10 - 科斯特的游戏理论

科斯特的游戏理论强调了游戏与学习之间的关系&#xff0c;认为“玩得开心”与“学习”是紧密相连的。换句话说&#xff0c;游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环&#xff0c;这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换符 资料连接 Android RxJava&#xff1a; 这是一份全面…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构&#xff0c;由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树&#xff0c;根朝上&#xff0c;分支向下。 根结点没有前驱结点&#xff0c;可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…

高等动力学中的正则变换

1 正则变化的定义 在相空间中&#xff0c;如果以时间t为参数的坐标变换 使得满足哈密顿正则方程 的动力变量 和 变成满足新的正则方程 的新的动力变量 和 &#xff0c;则称该变换为正则变换。 该变换可逆的条件&#xff1a;雅可比行列式值不等于零 正则变换的充要条件&#…

在线图片格式转换器 - 加菲工具

图片格式转换器-加菲工具 支持JPG\JPGE\PNG\ICO\BMP之间相互转换。 打开加菲工具或者直接打开 https://www.orcc.online/tools/image 选择“图片格式转换器” 上传图片&#xff0c;选择目标格式 转换完成

python web练习案例:基于表单类的商品管理(修改并删除商品信息)

目录 1、修改商品信息 &#xff08;1&#xff09;修改show.html页面&#xff0c;增加 修改 栏 &#xff08;2&#xff09;创建 update.html 网页&#xff0c;继承 add.html 模板 &#xff08;3&#xff09;定义视图函数 &#xff08;4&#xff09;定义路由 (5) 浏览器查看 …

【容器】k8s学习笔记基础部分(三万字超详细)

概念 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源使…