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.
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
}
}
}