|
|
@@ -1,17 +1,18 @@ |
|
|
|
package main |
|
|
|
|
|
|
|
import ( |
|
|
|
"log" |
|
|
|
"net/http" |
|
|
|
"strings" |
|
|
|
"encoding/json" |
|
|
|
"encoding/json" |
|
|
|
"flag" |
|
|
|
"log" |
|
|
|
"net/http" |
|
|
|
"strings" |
|
|
|
) |
|
|
|
|
|
|
|
type jsonOutput struct { |
|
|
|
Ip string `json:"ip"` |
|
|
|
} |
|
|
|
|
|
|
|
func ipJsonOutput (w http.ResponseWriter, r *http.Request) { |
|
|
|
func ipJsonOutput(w http.ResponseWriter, r *http.Request) { |
|
|
|
var ip jsonOutput |
|
|
|
ip.Ip = remoteAddr(r) |
|
|
|
output, err := json.Marshal(ip) |
|
|
@@ -21,23 +22,25 @@ func ipJsonOutput (w http.ResponseWriter, r *http.Request) { |
|
|
|
w.Write([]byte(output)) |
|
|
|
} |
|
|
|
|
|
|
|
func ipOutput (w http.ResponseWriter, r *http.Request) { |
|
|
|
func ipOutput(w http.ResponseWriter, r *http.Request) { |
|
|
|
ip := remoteAddr(r) |
|
|
|
w.Write([]byte(ip)) |
|
|
|
} |
|
|
|
|
|
|
|
func remoteAddr ( r *http.Request) string { |
|
|
|
func remoteAddr(r *http.Request) string { |
|
|
|
var ip string |
|
|
|
if r.RemoteAddr[0] == '[' { |
|
|
|
ip = strings.Split(r.RemoteAddr,"]")[0][1:] |
|
|
|
ip = strings.Split(r.RemoteAddr, "]")[0][1:] |
|
|
|
} else { |
|
|
|
ip = strings.Split(r.RemoteAddr,":")[0] |
|
|
|
ip = strings.Split(r.RemoteAddr, ":")[0] |
|
|
|
} |
|
|
|
return ip |
|
|
|
} |
|
|
|
|
|
|
|
func main() { |
|
|
|
http.HandleFunc("/",ipOutput) |
|
|
|
http.HandleFunc("/json",ipJsonOutput) |
|
|
|
log.Fatal(http.ListenAndServe(":8080", nil)) |
|
|
|
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)) |
|
|
|
} |