Thanks to visit codestin.com
Credit goes to github.com

Skip to content

bilxio/go-aria2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

go-aria2

Go Reference License

go-aria2 是一个 Go 语言库,提供了一组与 aria2 兼容的工具,用于解析、编码和操作 aria2 相关的文件格式,例如 .aria2 控制文件和 DHT 路由表文件 (dht.dat)。此库旨在帮助开发者在 Go 应用程序中集成 aria2 的文件处理能力,或对 aria2 的内部文件格式进行分析和调试。

功能特性

  • .aria2 控制文件解析与生成:
    • 支持读取和写入 .aria2 控制文件,该文件存储了下载任务的元数据、已下载的块信息以及进行中的分片数据。
    • 提供 Aria2ControlFilePiece 结构体,方便地访问文件的各个字段,包括版本、信息哈希、分片长度、总长度、上传长度、位域和进行中的分片信息。
  • DHT 路由表 (dht.dat) 解析与生成:
    • 支持读取和写入 aria2 的 DHT 路由表文件,该文件包含了 DHT 网络的节点信息。
    • 提供 DhtRoutingTable 结构体,用于表示路由表的整体结构,以及 Node 结构体来表示单个 DHT 节点。
    • 包含将 net.UDPAddr 转换为紧凑对等信息(Compact Peer Info)以及反向转换的辅助函数。
  • 位域可视化:
    • 提供 PlotBitfield 函数,可以将下载进度位域以 ASCII 艺术形式可视化,方便直观地查看下载进度。

安装

使用 Go Modules 安装 go-aria2 库:

go get github.com/bilxio/go-aria2

使用示例

解析 .aria2 控制文件

package main

import (
	"fmt"
	"os"
	"github.com/bilxio/go-aria2/aria2"
)

func main() {
	// 假设你有一个 .aria2 文件,例如 "your_download.aria2"
	file, err := os.Open("your_download.aria2")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close()

	var controlFile aria2.Aria2ControlFilePiece
	err = controlFile.Decode(file)
	if err != nil {
		fmt.Println("Error decoding .aria2 file:", err)
		return
	}

	fmt.Println("Successfully decoded .aria2 file:")
	fmt.Println(controlFile.String())

	// 访问特定字段
	fmt.Printf("InfoHash: %x\n", controlFile.InfoHash)
	fmt.Printf("TotalLength: %d bytes\n", controlFile.TotalLength)
}

解析 DHT 路由表文件

package main

import (
	"fmt"
	"os"
	"github.com/bilxio/go-aria2/aria2"
)

func main() {
	// 假设你有一个 dht.dat 文件,例如 "dht.dat"
	file, err := os.Open("dht.dat")
	if err != nil {
		fmt.Println("Error opening dht.dat:", err)
		return
	}
	defer file.Close()

	var dhtTable aria2.DhtRoutingTable
	err = dhtTable.Decode(file)
	if err != nil {
		fmt.Println("Error decoding dht.dat:", err)
		return
	}

	fmt.Println("Successfully decoded dht.dat:")
	fmt.Printf("Local Node ID: %x\n", dhtTable.LocalNodeID)
	fmt.Printf("Number of Nodes: %d\n", len(dhtTable.Nodes))

	for i, node := range dhtTable.Nodes {
		fmt.Printf("  Node %d ID: %x\n", i+1, node.NodeID)
		// 更多节点信息...
	}
}

位域可视化

package main

import (
	"fmt"
	"github.com/bilxio/go-aria2/aria2"
)

func main() {
	// 示例位域数据 (假设有 32 个分片,其中一些已完成)
	// 0xFF 表示前 8 个分片完成,0x0F 表示接下来的 4 个分片完成
	bitfield := []byte{0xFF, 0x0F, 0x00, 0x80} // 32 bits total

	// 每行显示 10 个分片
	plot := aria2.PlotBitfield(bitfield, 10)
	fmt.Println(plot)
}

项目结构

go-aria2/
├── aria2/
│   ├── aria2_file.go       # .aria2 控制文件结构和编解码
│   ├── aria2_file_test.go  # .aria2 控制文件测试
│   ├── dht.go              # DHT 路由表结构和编解码
│   ├── dht_test.go         # DHT 路由表测试
│   ├── doc.go              # 包文档
│   └── plot.go             # 位域可视化工具
├── go.mod                  # Go 模块文件
├── go.sum                  # Go 模块校验和
└── README.md               # 项目说明

贡献

欢迎贡献!如果您有任何功能建议、错误报告或改进,请随时提交 Pull Request 或创建 Issue。

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

参考

About

aria2 lib for golang

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages