작성일: 2023년 9월 20일
Client 장비에 network port가 여러개 있는 경우, 특정 network port를 지정하여 IP 패킷을 전송하고 싶을 때가 있다.
이럴 때, source IP address를 binding하면 특정 network port를 통해 IP 패킷이 전송된다.
참고:
일반적으로 Target IP address로 가기 위한 routing path 및 network port는
OS에 있는 Routing table을 통해서 자동으로 결정된다.
그러나 Target IP address로 가기 위한 routing path가 1개가 아닌 2개 이상인 경우에는
어느 network port를 통해서 IP 패킷이 나갈지 예측하기 어렵다.
package main
import (
"fmt"
"io/ioutil"
"net"
"net/http"
"time"
)
func main() {
##
## NOTE: 14.33.80.179를 Source IP address로 지정한다. (즉, Source IP address binding)
##
localAddr, err := net.ResolveIPAddr("ip", "14.33.80.179")
if err != nil {
panic(err)
}
localTCPAddr := net.TCPAddr{
IP: localAddr.IP,
}
d := net.Dialer{
LocalAddr: &localTCPAddr,
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}
tr := &http.Transport{
Proxy: http.ProxyFromEnvironment,
Dial: d.Dial,
TLSHandshakeTimeout: 10 * time.Second,
}
webclient := &http.Client{Transport: tr}
// Use NewRequest so we can change the UserAgent string in the header
req, err := http.NewRequest("GET", "https://www.naver.com", nil)
if err != nil {
panic(err)
}
res, err := webclient.Do(req)
if err != nil {
panic(err)
}
fmt.Println("DEBUG", res)
defer res.Body.Close()
content, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Printf("%s", string(content))
}
'Golang' 카테고리의 다른 글
go 언어 사용을 위한 vim-go 설치 및 사용법 (0) | 2024.05.08 |
---|---|
Go Programming Language (Go 언어 프로그래밍) - 학습 문서, 도서 (0) | 2024.04.25 |
go build 할 때 app version, build date, dev note를 추가하는 방법 (0) | 2022.07.05 |
Go Package 및 Module 사용 예제 (0) | 2022.03.06 |
Golang REST API (0) | 2022.02.11 |