github.com/GFW-knocker/wireguard@v1.0.1/tun/netstack/examples/http_client.go (about)

     1  //go:build ignore
     2  
     3  /* SPDX-License-Identifier: MIT
     4   *
     5   * Copyright (C) 2017-2023 WireGuard LLC. All Rights Reserved.
     6   */
     7  
     8  package main
     9  
    10  import (
    11  	"io"
    12  	"log"
    13  	"net/http"
    14  	"net/netip"
    15  
    16  	"github.com/GFW-knocker/wireguard/conn"
    17  	"github.com/GFW-knocker/wireguard/device"
    18  	"github.com/GFW-knocker/wireguard/tun/netstack"
    19  )
    20  
    21  func main() {
    22  	tun, tnet, err := netstack.CreateNetTUN(
    23  		[]netip.Addr{netip.MustParseAddr("192.168.4.28")},
    24  		[]netip.Addr{netip.MustParseAddr("8.8.8.8")},
    25  		1420)
    26  	if err != nil {
    27  		log.Panic(err)
    28  	}
    29  	dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, ""))
    30  	err = dev.IpcSet(`private_key=087ec6e14bbed210e7215cdc73468dfa23f080a1bfb8665b2fd809bd99d28379
    31  public_key=c4c8e984c5322c8184c72265b92b250fdb63688705f504ba003c88f03393cf28
    32  allowed_ip=0.0.0.0/0
    33  endpoint=127.0.0.1:58120
    34  `)
    35  	err = dev.Up()
    36  	if err != nil {
    37  		log.Panic(err)
    38  	}
    39  
    40  	client := http.Client{
    41  		Transport: &http.Transport{
    42  			DialContext: tnet.DialContext,
    43  		},
    44  	}
    45  	resp, err := client.Get("http://192.168.4.29/")
    46  	if err != nil {
    47  		log.Panic(err)
    48  	}
    49  	body, err := io.ReadAll(resp.Body)
    50  	if err != nil {
    51  		log.Panic(err)
    52  	}
    53  	log.Println(string(body))
    54  }