2009-08-13 5 views
2

IP 주소로 XMLRPC 서버에 대한 액세스를 제한하는 가장 좋은 방법은 무엇입니까? web/twcgi.py의 CGIScript 클래스가 요청에 액세스하는 렌더링 메소드를 가지고 있지만 내 서버에서이 요청에 액세스하는 방법을 모르겠습니다. 누군가 twcgi.py를 패치하여 환경 변수를 설정 한 다음 서버가 환경 변수에 액세스하는 예제를 보았습니다. 그러나 더 나은 솔루션이 있어야한다고 생각했습니다.Python Twisted : IP 주소로 액세스 제한

감사합니다.

답변

5

연결이 설정되면 팩토리의 buildProtocol이 호출되어 해당 연결을 처리 할 새 프로토콜 인스턴스가 만들어집니다. buildProtocol은 연결을 설정 한 피어의 주소를 전달하고 buildProtocol은 연결을 즉시 닫도록 None을 반환 할 수 있습니다.

그래서, 예를 들어, 다음과 같은 공장 작성할 수 있습니다

from twisted.internet.protocol import ServerFactory 

class LocalOnlyFactory(ServerFactory): 
    def buildProtocol(self, addr): 
     if addr.host == "127.0.0.1": 
      return ServerFactory.buildProtocol(self, addr) 
     return None 

그리고 로컬 연결을 처리 할 것이다 (그러나 모든 연결은 아직도 당신이 무엇을 피어 학습을 수용해야하기 때문에 처음에 허용됩니다 주소는).

XML-RPC 리소스를 제공하기 위해 사용중인 팩토리에이 설정을 적용 할 수 있습니다. 해당 팩토리를 하위 클래스로 만들고이 논리를 추가합니다 (또는 하위 클래스 대신 래퍼를 수행 할 수 있음).

iptables 또는 다른 플랫폼 방화벽도 경우에 따라 좋습니다. 이 방법을 사용하면 프로세스가 연결 시도를 보지 않아도됩니다.

+0

+1 실제로 그 수표를 적용하는 가장 좋은 장소입니다. 감사. – nosklo

0

나는 Windows에서 방화벽을 사용하거나 리눅스에서 iptables을 사용합니다.

+1

iptables는 IP를 잠글 수있는 옵션이지만 특정 IP에 대해 특정 방법을 허용하는 것과 같은 일부 사용자 지정 작업을 수행하려고합니다. – sberry

2

좋아 또 다른 대답은 모든 프로토콜 내부 전송에서 IP 주소를 얻을 수 있습니다 :

d =self.transport.getHost() ; print d.type, d.host, d.port

그런 다음 당신이 원하는 어떤 방법으로 그것을 필터링 할 값을 사용합니다.

관련 문제