mirror of https://github.com/ginuerzh/gost
13 changed files with 123 additions and 79 deletions
@ -0,0 +1,60 @@ |
|||
package gost |
|||
|
|||
import ( |
|||
"context" |
|||
"net" |
|||
|
|||
"golang.org/x/crypto/ssh" |
|||
) |
|||
|
|||
var localAddrKey = "localAddr" |
|||
|
|||
func getIP(conn net.Conn) (ip net.IP) { |
|||
IP := conn.LocalAddr().(*net.TCPAddr).IP |
|||
if IP != nil && !IP.IsPrivate() && !IP.IsLoopback() { |
|||
return IP |
|||
} |
|||
return nil |
|||
} |
|||
|
|||
func getContext1(ip net.IP) (ctx context.Context) { |
|||
ctx = context.Background() |
|||
if ip != nil { |
|||
return context.WithValue(ctx, localAddrKey, ip) |
|||
} |
|||
return |
|||
} |
|||
func getContext(conn net.Conn, parentCtx context.Context) (ctx context.Context) { |
|||
IP := getIP(conn) |
|||
if IP != nil { |
|||
return context.WithValue(parentCtx, localAddrKey, IP) |
|||
} |
|||
return parentCtx |
|||
} |
|||
|
|||
func GetIP(ctx context.Context) (ip net.IP) { |
|||
if v := ctx.Value(localAddrKey); v != nil { |
|||
if ip, ok := v.(net.IP); ok && !ip.IsPrivate() && !ip.IsLoopback() { |
|||
return ip |
|||
} |
|||
} |
|||
return nil |
|||
} |
|||
func GetSshIP(conn ssh.ConnMetadata) (ip net.IP) { |
|||
IP := conn.LocalAddr().(*net.TCPAddr).IP |
|||
if IP != nil && !IP.IsPrivate() && !IP.IsLoopback() { |
|||
return IP |
|||
} |
|||
return nil |
|||
} |
|||
|
|||
func getLocalAddr(ctx context.Context) (addr net.Addr) { |
|||
ip := GetIP(ctx) |
|||
if ip != nil { |
|||
addr = &net.TCPAddr{ |
|||
IP: ip, |
|||
Port: 0, |
|||
} |
|||
} |
|||
return |
|||
} |
|||
Loading…
Reference in new issue