概要
デバッグのため、GoでのTCPリクエストのレスポンス内容を確認したかったのでさっと作った。
Docker image
$ sudo docker pull golang
main.goを作成
example.com:22
の部分を接続したい宛先に変更する。
main.go
package main
import (
"fmt"
)
import "net"
type Client struct {
addr string
}
func NewClient(addr string) *Client {
return &Client{addr: addr}
}
func (c *Client) Request() (string, error) {
conn, err := net.Dial("tcp", c.addr)
if err != nil {
return "", err
}
defer conn.Close()
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
return "", err
}
return string(buf[:n]), nil
}
func main() {
// 接続先。22番ポートにアクセスする例。
dst := "example.com:22"
c := NewClient(dst)
//
resp, err := c.Request()
if err != nil {
panic(err)
}
fmt.Println(resp)
}
Dockerコンテナを起動してmain.goをcp
# コンテナ起動
$ docker run -d --rm --name go-tcp-client -w /go/src -it golang /bin/bash
# go module作成
$ docker exec -w /go/src -it go-tcp-client /bin/bash -c 'go mod init tcp-client'
# main.goをコンテナへcp
$ docker cp main.go go-tcp-client:/go/src/
実行
$ docker exec -w /go/src -it go-tcp-client /bin/bash -c 'go run .'
SSH-2.0-OpenSSH_7.4