概要
以下、自分用のメモです。
netパッケージのドキュメント見ていたら、LookupPort
という関数を発見。
知らなかったので、自分用のメモとして以下にサンプル残しておきます。
サービス名からポート取れるし、範囲外のポート番号を指定した場合にチェックもしてくれるので、普通に strconv.Itoa
するよりこちら使ったほうが便利と思いました。
サンプル
package network import ( "net" "github.com/devlights/gomy/output" ) // LookupPort は、 net.LookupPort() のサンプルです。 // // ポートの範囲チェックも行ってくれるので外部からポート番号を受け取って // 処理する場合は、 net.LookupPort() を使ったほうが良い。 // // context.Context を利用したい場合は net.Resolver.LookupPort() を利用する。 // デフォルトの Resolver で良い場合は net.DefaultResolver.LookupPort() が使える。 // // # REFERENCES // - https://blog.lufia.org/entry/2022/12/16/205728 // - https://pkg.go.dev/net@go1.19.4#LookupPort // - https://www.infraexpert.com/study/tea5.htm func LookupPort() error { const ( protocol = "tcp" ) var ( services = []string{ "ftp", "ssh", "telnet", "http", "pop3", "imap", "https", "8888", "-1", // 範囲外 "65536", // 範囲外 "xdmcp", // xdmcpはUDPプロトコル (port=177) } ) for _, service := range services { port, err := net.LookupPort(protocol, service) if err != nil { output.Stdoutf("[Err]", "service=%-5v\tErr=%v\n", service, err) continue } output.Stdoutf("[LookupPort]", "serivce=%v\tport=%v\n", service, port) } return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ task task: [run] go run . -onetime ENTER EXAMPLE NAME: network_lookup [Name] "network_lookup_port" [LookupPort] serivce=ftp port=21 [LookupPort] serivce=ssh port=22 [LookupPort] serivce=telnet port=23 [LookupPort] serivce=http port=80 [LookupPort] serivce=pop3 port=110 [LookupPort] serivce=imap port=143 [LookupPort] serivce=https port=443 [LookupPort] serivce=8888 port=8888 [Err] service=-1 Err=address -1: invalid port [Err] service=65536 Err=address 65536: invalid port [Err] service=xdmcp Err=address tcp/xdmcp: unknown port [Elapsed] 1.08311ms
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。