나는 SimpleXMLRPCServer 서버 (파이썬)가 있습니다.파이썬에서 클라이언트의 IP 주소 SimpleXMLRPCServer?
요청 처리기에서 클라이언트의 IP 주소를 얻으려면 어떻게해야합니까?
이 정보는 로그에 표시됩니다. 그러나 요청 처리기 내에서이 정보에 액세스하는 방법을 모르겠습니다.
나는 SimpleXMLRPCServer 서버 (파이썬)가 있습니다.파이썬에서 클라이언트의 IP 주소 SimpleXMLRPCServer?
요청 처리기에서 클라이언트의 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()
그리고 서명 방식을 적절히 업데이트하십시오.
요청 메서드 자체 내에서 RequestHandler에 액세스하려면 어떻게해야합니까? 자체 매개 변수가 없습니다. –