在golang

时间:2017-01-26 20:11:50

标签: go

寻找迭代特定端口以检查主机之间连接的方法。例如

    conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
    // handle error

我希望从某种类型的文件(如YAML或JSON)中读取所有输入,因此它可以传入是UDP还是TCP端口并通过文件中指定的不同端口号,返回结果连接并在完成检查列出的最终端口后终止。我是GO新手,非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:2)

您可以使用os包来读取文件,使用json包将其解析为数据结构(如切片或地图)。然后迭代该数据结构以进行连接检查。

例如,如果您的文件名为ports.json,并且看起来像

[
    {"port": 80, "protocol": "tcp"},
    {"port": 53, "protocol": "udp"}
]

您正在寻找的代码类似于

package main

import (
    "encoding/json"
    "fmt"
    "net"
    "os"
)

type portDef struct {
    Port     int    `json:"port"`
    Protocol string `json:"protocol"`
}

func main() {
    host := "golang.org"

    file, err := os.Open("ports.json")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    ports := []portDef{}
    err = json.NewDecoder(file).Decode(&ports)
    if err != nil {
        panic(err)
    }

    for _, p := range ports {
        _, err := net.Dial(p.Protocol, fmt.Sprint("%s:%d", host, p.Port))
        if err != nil {
            // handle error
        }
    }
}