登录
首页 >  Golang >  Go问答

如何在Go语言中获取服务器应用程序内部的IP连接头?

来源:stackoverflow

时间:2024-03-27 16:45:23 336浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《如何在Go语言中获取服务器应用程序内部的IP连接头?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

服务器应用程序支持身份验证,要求与其连接的客户端提供用户名和密码。机器内部也可能有一个客户端,我不希望对其进行身份验证。同一台机器内的客户端通过loopback地址与服务器连接。我想要的是,如果我能够以某种方式对 grpc 连接的目标 ip 应用过滤器,并决定是否应用身份验证。有办法吗?谢谢!

func (s *RShellServer) ExecCmd(stream RShell_ExecCmdServer) error {
    # For example, something like this if condition.
    if (Conn().destination_ip != LOOPBACK) {
        if err, ok := gnmi.AuthorizeUser(stream.Context()); !ok {
                return fmt.Errorf("%s", err)
        }
    }
    req, err := stream.Recv()
    if err != nil {
        return fmt.Errorf("Error reading request: %s", err)
    }
}

解决方案


你的 grpc 服务应该是这样的

func (myserver) somefunction(ctx context.context, 
    req *myserver.request) (resp *myserver.response, err error)

然后您可以使用对等库并从上下文中提取对等信息,例如`

p, err := peer.fromcontext(ctx)

并使用从对等方获取地址

p.Addr

理论要掌握,实操不能落!以上关于《如何在Go语言中获取服务器应用程序内部的IP连接头?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>