2014-03-05 34 views
3

是否有一種簡單的方法來指定xml-rpc客戶端連接應該源自的源端口範圍?python xmlrpc.client.ServerProxy - 如何指定本地端口範圍

假設客戶端和xml-rpc服務器之間有一個防火牆,它僅將流量從特定套接字(由IP和端口範圍定義)傳遞到服務器。

默認情況下,xmlrpc.client.ServerProxy允許操作系統決定使用哪個本地端口。因此,每個xml-rpc調用都將打開與源自它自己的套接字的服務器的連接,該套接字將保持TIME_WAIT狀態,直到超時過期。在Windows 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 

我想實現的是一個可配置的範圍端口(15XX從上面的例子)調用服務器上的RPC方法時xmlrpc.client.ServerProxy會使用。

回答

2

:是主機和端口之間的分隔符。

netstat -a | grep :15* 
+0

謝謝,但問題不在於篩選netstat輸出;這是關於配置ServerProxy對象,以便在與xml-rpc服務器通信時使用配置的本地端口範圍。可能一個自定義傳輸必須用重寫的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千瓦。針對source_address的附加堆棧溢出搜索會導致線程:Python: Is it possible to set the clientport with xmlrpclib?,它定義指定源地址的自定義傳輸,並且更多地回答我的問題;至少這是實現端口範圍的一個很好的起點。