2014-03-05 5 views
3

xml-rpc 클라이언트 연결이 시작되어야하는 원본 포트 범위를 지정하는 쉬운 방법이 있습니까?python xmlrpc.client.ServerProxy - 로컬 포트 ​​범위를 지정하는 방법

특정 소켓 (IP 및 포트 범위로 정의 됨)에서만 트래픽을 서버로 전달하는 클라이언트와 xml-rpc 서버 사이에 방화벽이 있다고 가정 해 보겠습니다.

기본값으로 xmlrpc.client.ServerProxy을 사용하면 OS에서 어떤 로컬 포트를 사용할 것인지 결정할 수 있습니다. 결과적으로 각 xml-rpc 호출은 제한 시간이 만료 될 때까지 TIME_WAIT 상태로 유지되는 자체 소켓에서 시작된 서버에 대한 연결을 엽니 다. 창에 netstat -b는 연결을 보여줍니다 :

C:\tmp>netstat -b | grep 51000 
    TCP ZIBI:51000    localhost:1552   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1562   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1561   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1553   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1559   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1558   TIME_WAIT 0 
    TCP ZIBI:51000    localhost:1557   TIME_WAIT 0 

는 내가 달성하고자하는 서버의 RPC 메소드를 호출 할 때 xmlrpc.client.ServerProxy 사용하는 것입니다 (위의 예에서 15XX) 포트의 구성 범위입니다.

답변

2

:은 호스트와 포트 사이의 구분자입니다.

netstat -a | grep :15* 
+0

감사하지만 질문은 netstat 출력 필터링에 관한 것이 아닙니다. xml-rpc 서버와 통신 할 때 구성된 로컬 포트 ​​범위를 사용하도록 ServerProxy 객체를 설정하는 것입니다. 아마도 사용자 정의 전송은 override 된 socket.bind() 함수로 정의되어야하지만 누군가 이미 그러한 옵션을 구현하기를 바랬습니다. –

0

ServerProxy 호출에서 점점 후 :

cli = xmlrpclib.ServerProxy(..) 

아래

<httplib.py> 

class HTTPConnection: 

    _http_vsn = 11 
    _http_vsn_str = 'HTTP/1.1' 

    response_class = HTTPResponse 
    default_port = HTTP_PORT 
    auto_open = 1 
    debuglevel = 0 
    strict = 0 

    def __init__(self, host, port=None, strict=None, 
      timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None): 

에 내가 찾던 지정하는 데 사용되는 source_address kw를 발견했다. source_address에 대한 추가 스택 오버플로 검색은 스레드 : Python: Is it possible to set the clientport with xmlrpclib?으로 연결되며 사용자 정의 전송 주소는 소스 주소를 지정하고 더 많은 응답은 내 질문에 포함됩니다. 최소한 포트 범위를 구현하는 것은 좋은 출발점입니다.