Golang : Set up source IP address before making HTTP request

분류없음 2017.08.29 17:15


[출처] https://www.socketloop.com/tutorials/golang-set-up-source-ip-address-before-making-http-request


Problem :

There are times that you want to use certain IP address in a machine ( such as the one with permission to connect outside a firewall ) before making a HTTP request to another server. This is similar to the wget binding command :

For example : wget --bind-address=192.168.10.1 \

How to do that in Golang?

NOTE : This is not for masking or spoofing your IP address

Solution :

Build your own custom HTTP transport client and specify the local IP address that has the permission to connect outside a firewall.

For example :

 package main

 import (
         "fmt"
         "io/ioutil"
         "net"
         "net/http"
         "os"
         "time"
 )

 func main() {
         OKAddr := "<change here>" // local IP address to use

         OKAddress, _ := net.ResolveTCPAddr("tcp", OKAddr)

         transport := &http.Transport{
                 Proxy: http.ProxyFromEnvironment,
                 Dial: (&net.Dialer{
                         Timeout:   30 * time.Second,
                         KeepAlive: 30 * time.Second,
                         OKAddr: OKAddress}).Dial, TLSHandshakeTimeout: 10 * time.Second}

         client := &http.Client{
                 Transport: transport,
         }

         resp, err := client.Get("http://example.com/filetodown.zip")

         if err != nil {
                 panic(err)
         }

         defer resp.Body.Close()

         html, err := ioutil.ReadAll(resp.Body)

         if err != nil {
                 panic(err)
         }

         // fmt.Println(os.Stdout, string(html))
         // or save the zip - see https://www.socketloop.com/tutorials/golang-download-file-example
 }

References :

https://www.socketloop.com/tutorials/golang-convert-http-response-body-to-string

https://www.socketloop.com/tutorials/golang-download-file-example


신고
Trackback 0 : Comment 0