为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在 go 中读取服务器应用程序内的 IP 连接标头?

有没有办法在 go 中读取服务器应用程序内的 IP 连接标头?

Go
慕盖茨4494581 2022-07-11 16:39:33
服务器应用程序支持身份验证,该身份验证要求与其连接的客户端提供用户名和密码。机器内部也可能有一个客户端,我不希望对其进行身份验证。同一台机器中的客户端使用 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)    }}
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

你的 GRPC 服务应该是这样的

func (MyServer) SomeFunction(ctx context.Context, 
    req *myserver.Request) (resp *myserver.Response, err error)

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

p, err := peer.FromContext(ctx)

并使用从对等方获取地址

p.Addr


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号