python xmlrpc.client.ServerProxy - 如何指定本地端口范围
有没有简单的方法来指定xml-rpc客户端连接应该使用的源端口范围?
假设在客户端和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),让xmlrpc.client.ServerProxy
在调用服务器的rpc方法时使用这个范围的端口。
2 个回答
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这个参数,它用来指定我想要的内容。接着我在Stack Overflow上搜索source_address,找到了一个讨论:Python:是否可以使用xmlrpclib设置客户端端口? 这个讨论定义了一个自定义的传输方式,可以指定源地址,基本上回答了我的问题;至少这是实现端口范围的一个不错的起点。
2
:
是用来分隔主机和端口的符号。
netstat -a | grep :15*