ipgo/main.go

44 lines
739 B
Go

package main
import (
"log"
"net"
"net/http"
"strings"
)
func main() {
http.HandleFunc("/", handler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, req *http.Request) {
ip := ""
ips := proxy(req)
if len(ips) > 0 && len(ips[0]) > 0 {
rip, _, err := net.SplitHostPort(ips[0])
ip = rip
if err != nil {
ip = ips[0]
}
} else {
if rip, _, err := net.SplitHostPort(req.RemoteAddr); err == nil {
ip = rip
} else {
ip = req.RemoteAddr
}
}
w.WriteHeader(200)
w.Write([]byte(ip))
}
func proxy(req *http.Request) []string {
if ips := req.Header.Get("X-Forwarded-For"); len(ips) > 0 {
return strings.Split(ips, ",")
}
return []string{}
}