2015-01-30 2 views
0

Возможно ли связать сокет с конкретным виртуальным адаптером? Следующий код Python отлично подходит для реальных адаптеров, например. eth0 для кабеля, wlan0 для Wi-Fi:Связывание исходящего сокета с конкретным (виртуальным) адаптером

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.setsockopt(socket.SOL_SOCKET, 25, b"eth0") 

Но когда я пытаюсь связать сокет с виртуальным адаптером, например, "eth0: 0" Я получаю ошибку "OSError: [Errno 19] Нет такого устройства".

Мои виртуальные адаптеры, похоже, работают нормально и могут быть отсканированы в порядке.

В основном, я пытаюсь создать исходящий трафик с определенного ip (назначенного виртуальному адаптеру). Цель состоит в том, чтобы загрузить/потопить тест встроенного устройства в сети с использованием одного компьютера.

+0

Вы сказали, что получаете ошибку в bind, где код привязки? Обычно вы связываете с помощью хоста, который ipaddress и номер порта вам не нужны имя интерфейса или индекс, например 's.bind ('10 .10.10.10 ', 3003)' – cmidi

+0

@cmidi, моя проблема связана с исходящими соединениями, не принимая входящие. Ошибка при настройке параметра сокета. Надеюсь, это упростит: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) ' ' s.setsockopt (socket.SOL_SOCKET, 25, адаптер) ' ' s.connect ((ADDRESS, PORT)) ' ' s.send (msg) ' – Zgemba

ответ

0

Вы должны знать, что для ядра эти (eth0 и eth0: 1) являются одним и тем же интерфейсом eth0. Ярлык или 'псевдоним', например eth0: 1 (на самом деле вы можете использовать более удобную для пользователя метку, например eth0: internal_net), необходимо только для sysadmin, а не для приложения . Поэтому вам следует полагаться на исходный IP-адрес (или позволить выбрать ядро это автоматически, в соответствии с таблицей маршрутизации)

Смежные вопросы