有没有一种简单的方法来指定 xml-rpc 客户端连接应源自的源端口范围?
假设客户端和 xml-rpc 服务器之间有一个防火墙,该防火墙仅将流量从特定套接字(由 IP 和端口范围定义)传递到服务器。
默认情况下,xmlrpc.client.ServerProxy
允许操作系统决定使用哪个本地端口。因此,每个 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
我想实现的是一个可配置的端口范围(上面示例中的 15XX),xmlrpc.client.ServerProxy
在服务器上调用 rpc 方法时将使用端口。
:
是主机和端口之间的分隔符。
netstat -a | grep :15*
从 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 设置客户端端口?它定义了指定源地址的自定义传输,而不是回答我的问题;至少它是实现端口范围的良好起点。