簡體   English   中英

Python SimpleXMLRPCServer中客戶端的IP地址?

[英]IP address of client in Python SimpleXMLRPCServer?

我有一個SimpleXMLRPCServer服務器(Python)。

如何在請求處理程序中獲取客戶端的IP地址?

此信息顯示在日志中。 但是,我不知道如何從請求處理程序中訪問此信息。

正如Michael所說,您可以從請求處理程序中獲取client_address 例如,您可以覆蓋從BaseRequestHandler間接繼承的__init__函數。

class RequestHandler(SimpleXMLRPCRequestHandler):
    def __init__(self, request, client_address, server):
        print client_address # do what you need to do with client_address here
        SimpleXMLRPCRequestHandler.__init__(self, request, client_address, server)

請求處理程序本身應該具有屬性client_address (繼承自BaseHTTPRequestHandler )。 來自BaseHTTPRequestHandler

包含引用客戶端地址的表單(host, port)的元組。

將ip地址傳遞給請求方法的一種方法是覆蓋RequestHandler.decode_request_content。

decode_request_content返回XML字符串。 例:

<?xml version='1.0'?>
<methodCall>
    <methodName>get_workunit</methodName>
    <params>
        <param>
            <value><int>1</int></value>
        </param>
        <param>
            <value><string>Windows</string></value>
        </param>
        <param>
            <value><string>32bit</string></value>
        </param>
    </params>
</methodCall>

只需在那里放一個參數。

class HackyRequestHandler(SimpleXMLRPCRequestHandler):
    def __init__(self, req, addr, server):
       self.client_ip, self.client_port = addr
       SimpleXMLRPCRequestHandler.__init__(self, req, addr, server)
    def decode_request_content(self, data):
       data = SimpleXMLRPCRequestHandler.decode_request_content(self, data)
       from xml.dom.minidom import parseString
       doc = parseString(data)
       ps = doc.getElementsByTagName('params')[0]
       pdoc = parseString(
            ''' <param><value>
                <string>%s</string>
                </value></param>''' % (self.client_ip,))
       p = pdoc.firstChild.cloneNode(True)
       ps.insertBefore(p, ps.firstChild)
       return doc.toxml()

並相應地更新您的方法簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM