导入 github.com/Ullaakut/nmap 失败,并显示“缺少导入元数据”/“不允许导入周期”

问题描述 投票:0回答:1

我使用 Windows 11,无法导入

github.com/Ullaakut/nmap
(缺少导入“github.com/Ullaakut/nmap”的元数据)

我尝试导入

github.com/Ullaakut/nmap

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/Ullaakut/nmap"
)

func main() {
    // Equivalent to
    // nmap -sV -T4 192.168.0.0/24 with a filter to remove non-RTSP ports.
    scanner, err := nmap.NewScanner(
        context.Background(),
        nmap.WithTargets("192.168.0.0/24"),
        nmap.WithPorts("80", "554", "8554"),
        nmap.WithServiceInfo(),
        nmap.WithTimingTemplate(nmap.TimingAggressive),
        // Filter out ports that are not RTSP
        nmap.WithFilterPort(func(p nmap.Port) bool {
            return p.Service.Name == "rtsp"
        }),
        // Filter out hosts that don't have any open ports
        nmap.WithFilterHost(func(h nmap.Host) bool {
            // Filter out hosts with no open ports.
            for idx := range h.Ports {
                if h.Ports[idx].Status() == "open" {
                    return true
                }
            }

            return false
        }),
    )
    if err != nil {
        log.Fatalf("unable to create nmap scanner: %v", err)
    }

    result, warnings, err := scanner.Run()
    if len(*warnings) > 0 {
        log.Printf("run finished with warnings: %s\n", *warnings) // Warnings are non-critical errors from nmap.
    }
    if err != nil {
        log.Fatalf("nmap scan failed: %v", err)
    }

    for _, host := range result.Hosts {
        fmt.Printf("Host %s\n", host.Addresses[0])

        for _, port := range host.Ports {
            fmt.Printf("\tPort %d open with RTSP service\n", port.ID)
        }
    }
}

我尝试

go mod init github.com/Ullaakut/nmap
;出现了一个
go.mod
文件

module github.com/Ullaakut/nmap

go 1.22.4

之后出现错误:

import cycle not allowed

go install github.com/Ullaakut/nmap/v3@latest
package github.com/Ullaakut/nmap/v3 is not a main package

然后我尝试:

go install github.com/Ullaakut/nmap@latest    package github.com/Ullaakut/nmap is not a main package

那我试试

go get github.com/Ullaakut/nmap/v3@latest    
go: added github.com/Ullaakut/nmap/v3 v3.0.3
go: added golang.org/x/sync v0.1.0

一个

go.sum
文件出现,我的
go.mod
文件发生了变化:

module github.com/Ullaakut/nmap

go 1.22.4

require (
    github.com/Ullaakut/nmap/v3 v3.0.3 // indirect
    golang.org/x/sync v0.1.0 // indirect
)

然后我写

go mod tidy
;我的
go.mod
文件现在是:

module github.com/Ullaakut/nmap
go 1.22.4

但还是

could not import github.com/Ullaakut/nmap (missing metadata for import of "github.com/Ullaakut/nmap")
import cycle not allowed

如何导入?

go import cycle
1个回答
0
投票

我尝试 go mod init github.com/Ullaakut/nmap;出现了 go.mod 文件

这将是您问题的一部分,模块路径(例如

go mod init [module-path]
)应该标识您的模块,而不是您尝试导入的内容的路径。 文档说:

模块路径:标识模块的路径,充当模块内包导入路径的前缀。例如,“golang.org/x/net”。

接下来要注意的是你的导入; docs 建议

import github.com/Ullaakut/nmap/v3
v3
表示该库的先前版本与当前版本不兼容(因此最好使用当前版本)。因此,为了解决您的问题,我建议更改您的代码以使用
import "github.com/Ullaakut/nmap/v3"
。进行此更改后,您可以通过运行解决其他问题:

go mod edit -module myModule 
go mod tidy

这会将您的模块名称更改为

myModule
,理想情况下,模块路径应该是存储代码的存储库的路径(例如
github.com/my/repo
),但现在使用
myModule
就可以了(请参阅文档)和这个答案了解更多信息。通过这些更改,您的代码可以在我的机器上编译。

注意:我很少使用

go install
go get
。将
import
添加到相关
.go
文件,然后运行
go mod tidy
通常就足够了(
go mod tidy
自动检索任何需要的包)。

© www.soinside.com 2019 - 2024. All rights reserved.