繁体   English   中英

Python SimpleXMLRPCServer:获取用户IP和简单身份验证

[英]Python SimpleXMLRPCServer: get user IP and simple authentication

我正在尝试使用Python制作一个非常简单的XML RPC服务器,该服务器提供基本的身份验证以及获取连接的用户IP的能力。 让我们来看一下http://docs.python.org/library/xmlrpclib.html中提供的示例:

import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer

def is_even(n):
    return n%2 == 0

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(is_even, "is_even")
server.serve_forever()

因此,现在,这背后的第一个想法是让用户提供凭据并对其进行处理,然后再允许其使用功能。 我需要非常简单的身份验证,例如仅一个代码。 现在,我正在执行的是强制用户在函数调用中提供此代码,并使用if语句对其进行测试。

第二个是当用户调用函数时能够获得用户IP或在连接服务器后将其存储。

此外,我已经在运行Apache Server,将其集成到其中可能会更简单。

你怎么看?

这是一个相关的问题,我发现有帮助:

Python SimpleXMLRPCServer中客户端的IP地址?

对我而言,有效的方法是在服务器的覆盖的finish_request方法中获取client_address,将其存储在服务器本身中,然后在覆盖的服务器_dispatch例程中对其进行访问。 您也许也可以从该方法内部访问服务器本身,但是我只是试图将IP地址作为自动第一个参数添加到我的所有方法调用中。 我使用dict的原因是因为我还将添加会话令牌以及其他元数据。

from xmlrpc.server import DocXMLRPCServer
from socketserver import BaseServer

class NewXMLRPCServer( DocXMLRPCServer):

    def finish_request( self, request, client_address):
        self.client_address = client_address
        BaseServer.finish_request( self, request, client_address)

    def _dispatch( self, method, params):
        metadata = { 'client_address' : self.client_address[ 0] }
        newParams = ( metadata, ) + params
        return DocXMLRPCServer._dispatch( self, method, metadata)

请注意,这会破坏诸如system.listMethods()之类的自省功能,因为这不需要额外的参数。 一种想法是检查“系统”的方法名称。 并在这种情况下通过常规参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM