Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4db39df

Browse files
committed
miss ip.go
1 parent 8278a63 commit 4db39df

File tree

1 file changed

+61
-0
lines changed
  • websites/code/studygolang/src/util

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright 2014 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package util
8+
9+
import (
10+
"encoding/binary"
11+
"net"
12+
"net/http"
13+
"strings"
14+
)
15+
16+
func Ip(req *http.Request) string {
17+
ips := proxy(req)
18+
if ips != nil && ips[0] != "" {
19+
pos := strings.LastIndex(ips[0], ":")
20+
if pos == -1 {
21+
return ips[0]
22+
} else {
23+
return ips[0][:pos]
24+
}
25+
}
26+
27+
remoteAddr := req.Header.Get("Remote_addr")
28+
if remoteAddr == "" {
29+
remoteAddr = req.Header.Get("X-Real-IP")
30+
if remoteAddr == "" {
31+
remoteAddr = req.RemoteAddr
32+
}
33+
}
34+
35+
if remoteAddr == "" {
36+
return "127.0.0.1"
37+
}
38+
39+
pos := strings.LastIndex(remoteAddr, ":")
40+
if pos == -1 {
41+
return remoteAddr
42+
} else {
43+
return remoteAddr[:pos]
44+
}
45+
}
46+
47+
func proxy(req *http.Request) []string {
48+
if ips := req.Header.Get("X-Forwarded-For"); ips != "" {
49+
return strings.Split(ips, ",")
50+
}
51+
return nil
52+
}
53+
54+
func Ip2long(ipstr string) uint32 {
55+
ip := net.ParseIP(ipstr)
56+
if ip == nil {
57+
return 0
58+
}
59+
ip = ip.To4()
60+
return binary.BigEndian.Uint32(ip)
61+
}

0 commit comments

Comments
 (0)