3

有没有一种简单的方法来指定 xml-rpc 客户端连接应该来自的源端口范围?

假设在客户端和 xml-rpc 服务器之间有一个防火墙,它只从特定的套接字(由 IP 和端口范围定义)将流量传递到服务器。

默认情况下,xmlrpc.client.ServerProxy 让操作系统决定使用哪个本地端口。结果,每个 xml-rpc 调用都会打开与服务器的连接,该连接源自其自己的套接字,该套接字保持 TIME_WAIT 状态,直到超时到期。在 windowsnetstat -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

我想要实现的是xmlrpc.client.ServerProxy在服务器上调用 rpc 方法时将使用的端口(上例中的 15XX)的可配置范围。

4

2 回答 2

2

:是主机和端口之间的分隔符。

netstat -a | grep :15* 
于 2014-03-12T21:11:52.627 回答
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:是否可以使用 xmlrpclib 设置客户端端口?它定义了指定源地址的自定义传输,并且更多地回答了我的问题;至少这是实施端口范围的一个很好的起点。

于 2014-05-02T14:00:36.130 回答