12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package main
-
- import (
- "encoding/json"
- "flag"
- "log"
- "net/http"
- "strings"
- )
-
- type jsonOutput struct {
- Ip string `json:"ip"`
- }
-
- func ipJsonOutput(w http.ResponseWriter, r *http.Request) {
- var ip jsonOutput
- ip.Ip = remoteAddr(r)
- output, err := json.Marshal(ip)
- if err != nil {
- w.Write([]byte(err.Error()))
- }
- w.Write([]byte(output))
- }
-
- func ipOutput(w http.ResponseWriter, r *http.Request) {
- ip := remoteAddr(r)
- w.Write([]byte(ip))
- }
-
- func remoteAddr(r *http.Request) string {
- var ip string
- if r.RemoteAddr[0] == '[' {
- ip = strings.Split(r.RemoteAddr, "]")[0][1:]
- } else {
- ip = strings.Split(r.RemoteAddr, ":")[0]
- }
- return ip
- }
-
- func main() {
- addr := flag.String("addr", ":8080", "local ip:port to bind")
- flag.Parse()
- http.HandleFunc("/", ipOutput)
- http.HandleFunc("/json", ipJsonOutput)
- log.Fatal(http.ListenAndServe(*addr, nil))
- }
|