diff --git a/simple_httpserver/simpleserver.go b/simple_httpserver/simpleserver.go new file mode 100644 index 0000000..b8a5827 --- /dev/null +++ b/simple_httpserver/simpleserver.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "log" + "net" + "os" + "net/http" +) + +func main() { + listen := "0.0.0.0:8000" + log.Print("Start simple server at port: ", listen) + http.HandleFunc("/", handler) + log.Fatal(http.ListenAndServe(listen, nil)) +} + +func handler(w http.ResponseWriter, r *http.Request) { + + log.Println("request from address: ", r.RemoteAddr) + fmt.Fprintf(w, "%s %s %s\n", r.Method, r.URL, r.Proto) + for k, v := range r.Header { + fmt.Fprintf(w, "Header[%q] = %q\n", k, v) + } + fmt.Fprintf(w, "Host = %q\n", r.Host) + fmt.Fprintf(w, "RemoteAddr = %q\n", r.RemoteAddr) + if err := r.ParseForm(); err != nil { + log.Print(err) + } + for k, v := range r.Form { + fmt.Fprintf(w, "Form[%q] = %q\n", k, v) + } + fmt.Fprintf(w, "\n===> local IP: %q\n\n",GetOutboundIP()) + //fmt.Fprintf(w, "Env message = %s\n", os.Getenv("message")) +} + +func GetOutboundIP() net.IP { + conn, err := net.Dial("udp", "8.8.8.8:80") + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + localAddr := conn.LocalAddr().(*net.UDPAddr) + + return localAddr.IP +} \ No newline at end of file