python xmlrpc.client.ServerProxy - как указать диапазон локальных портов
Есть ли простой способ указать диапазон портов источника, из которого должно исходить соединение клиента 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 на сервере.
2 ответа
:
является разделителем между хостом и портом.
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):
Я нашел исходный адрес kw, используемый для указания того, что я искал. Дополнительный поиск переполнения стека по source_address приводит к потоку: Python: Возможно ли установить клиентский порт с xmlrpclib? который определяет пользовательский транспорт с указанием адреса источника и более-менее отвечает на мой вопрос; по крайней мере, это хорошая отправная точка для реализации диапазона портов.