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? который определяет пользовательский транспорт с указанием адреса источника и более-менее отвечает на мой вопрос; по крайней мере, это хорошая отправная точка для реализации диапазона портов.

Другие вопросы по тегам