IT评测·应用市场-qidao123.com

标题: Go红队开发—格式导出 [打印本页]

作者: 刘俊凯    时间: 2025-3-8 10:23
标题: Go红队开发—格式导出
目录

输出功能

在我们利用安全工具的时间基本都会有一个输出功能,同样也很重要,所以下面介绍csv、json、html、sqlite的输出格式。
CSV输出
  1. 下载包:go get -u github.com/gocarina/gocsv
复制代码
利用之前先明确我们要csv格式干什么:
CSV 转 结构体

test.csv文件内容为:

1.在CSV转结构体的时间,我们必要构造一个结构体,用来接收CSV文件中的表头
  1. type Person struct {
  2.     Id   string `csv:"id"`
  3.     Name string `csv:"name"`
  4.     Age  int    `csv:"age"`
  5. }
复制代码
2.解析csv文件
  1. // 解析CSV文件
  2. func anlyzeCSV() {
  3.     file, err := os.OpenFile(
  4.         "test.csv",
  5.         os.O_RDWR|os.O_CREATE,
  6.         0666,
  7.     )
  8.     defer file.Close()
  9.     if err != nil {
  10.         fmt.Println("打开文件失败:", err)
  11.     }
  12.   
  13.     person := []*Person{}
  14.     if err := gocsv.UnmarshalFile(file, &person); err != nil { //UnmarshalFile将文件解析为结构体
  15.         fmt.Println("解析文件失败:", err)
  16.     }
  17.     fmt.Println("id,name,age")
  18.     for _, p := range person {
  19.         fmt.Println(p.Id, p.Name, p.Age)
  20.     }
  21. }
复制代码
结构体 转 CSV
  1. // 写入CSV文件
  2. func writeCSV() {
  3.     file, err := os.OpenFile("test.csv", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
  4.     if err != nil {
  5.         fmt.Println("打开文件失败:", err)
  6.     }
  7.     defer file.Close()
  8.     person := []*Person{}
  9.     person = append(person, &Person{
  10.         Id:   "1",
  11.         Name: "李四",
  12.         Age:  20,
  13.     })
  14.     err = gocsv.MarshalFile(&person, file) //MarshalFile将数据写入文件
  15.     if err != nil {
  16.         fmt.Println("写入文件失败:", err)
  17.     }
  18. }
复制代码
端口扫描结果利用CSV格式导出

结合之前的端口扫描练习,将结果通过所学的知识CSV格式输出
这里我对之前的练习举行了一个改造,就是让输出美观一点,同时修改了传参与返回值,目的都是为了拿到扫描完成的端口结果。
为了写进csv还创建了一个结构体。
函数中大部分代码实在都是格式的转换,主要功能实在学会了上面基本都能做了。
所以这里我在放代码前说一下我遇到的题目:
这补充一下时间格式化的代码:
  1. // 格式化时间time.Time类型
  2. func timeFormat(t time.Time) string {
  3.     return t.Format("2006年1月2日") //转为string类型
  4. }
  5. // Parse将string类型转为time.Time类型
  6. func timeParse(t string) time.Time {
  7.     tm, _ := time.Parse("2006-01-02 15:04:05", t)
  8.     return tm
  9. }
复制代码
代码示例:(乐成将扫描结果存到csv中保存)

[code]// 稍微改一下代码,return一个port回来,然后输出到csv中func start_WaitGroup_scan_port(host string) ([]int, time.Time) {    var (        wg      sync.WaitGroup        ch      = make(chan int, 1024) // 增加缓冲区,淘汰阻塞        count   int        workers = 100 // 控制并发数    )      var scanPort = func(hostname string, port int) {        defer wg.Done()        address := fmt.Sprintf("%s:%d", hostname, port)        conn, err := net.DialTimeout("tcp", address, 2*time.Second)        if err == nil {            conn.Close()            ch




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4