英文:
Iterating through list of ports for connectivity in golang
问题
寻找一种通过特定端口迭代来检查主机之间连接性的方法。例如:
conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
// 处理错误
}
我希望能够从某种类型的文件(如YAML或JSON)中读取所有输入,以便可以传入是UDP还是TCP端口,并通过文件中指定的不同端口号进行迭代,返回连接结果,并在完成检查最后一个端口后终止。我对GO语言还不熟悉,非常感谢任何帮助或建议。
英文:
Looking for a way to iterate through specific ports to check connectivity between hosts. For example
conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
// handle error
I am looking to make the input all be read from some type of file such as YAML or JSON, so it can pass in whether it is UDP or TCP port and go through the different port number specified in the file, return results of connection and terminate once it finishes checking the final port listed. I am new to GO and any help or suggestions would be greatly appreciated.
答案1
得分: 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.Sprintf("%s:%d", host, p.Port))
if err != nil {
// 处理错误
}
}
}
英文:
You can use the os
package to read from a file, and the json
package to parse that into a data structure like a slice or map. Then iterate over that data structure to do the connectivity check.
For example, if your file is named ports.json
and looks like
[
{"port": 80, "protocol": "tcp"},
{"port": 53, "protocol": "udp"}
]
The code that you're looking for looks something like
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
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论