Может ли Python выбрать сетевой адаптер при открытии сокета?

Целевая машина, на которой запущено приложение python, будет иметь три доступных сетевых интерфейса. В целом все три сети будут сильно отличаться друг от друга, однако есть вероятность, что две из трех могут быть в одинаковых сетях.

В приведенном ниже примере у меня нет контроля над адресом назначения в ETH 2 (поскольку это предварительно настроенная система), поэтому я вынужден был выбрать, какой адаптер использовать программно.

Я почти уверен, что это будет зависеть от того, как ОС работает с маршрутизацией соединений. Я надеюсь, что будет независимый от платформы способ решить проблему с использованием python, потому что есть вероятность, что это приложение нужно будет запускать как на Windows 7, так и на машине Linux.

Пример кода

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.2', 8000)) # Which device will this connect to??

Обычный случай

  • ETH 0 Источник: 192.168.0.1
  • ETH 0 Пункт назначения: 192.168.0.2
  • ETH 1 Источник: 10.20.30.1
  • ETH 1 Пункт назначения: 10.20.30.2
  • ETH 2 Источник: 60.50.40.1
  • ETH 2 Пункт назначения: 60.50.40.1

Возможная проблема

  • ETH 0 Источник: 192.168.0.1
  • ETH 0 Пункт назначения: 192.168.0.2
  • ETH 1 Источник: 10.20.30.1
  • ETH 1 Назначение: 10.20.30.2
  • ETH 2 Источник: 192.168.0.3
  • ETH 2 Назначение: 192.168.0.2

Дополнительная информация
Все адаптеры ETH0,1 и 2 подключены к разным физическим сетям

17
задан Adam Lewis 8 December 2011 в 21:17
поделиться