-
Есть несколько процессов, слушающих датаграммы на некотором порту (SO_REUSEADDR). Обычно датаграмм приходят из сети. Принято решение о расширении протокола: введён новый тип датаграмм, совместимый со старым, но отправляемый всегда только с локального узла "самому себе".
Если при отправке новых датаграмм в качестве адреса назначения указан 127.0.0.1 или один из IP-адресов локального узла, - на локальном узле ни один из процессов датаграмму не получает. Если бродкастить на 255.255.255.255 - датаграммы приходят всем процессам (как и должно быть), но уходят также и в сеть (чего быть не должно).
Вопрос: есть ли возможность заставить WinSock отправлять копию датаграммы всем процессам на localhost? Или придётся фильтровать входящие датаграммы по отправителю?
-
> но уходят также и в сеть (чего быть не должно).
я чего то не знаю? можно ссылочку для ознакомления?
-
> [1] brother © (13.08.12 17:43)
> > но уходят также и в сеть (чего быть не должно).
> я чего то не знаю? можно ссылочку для ознакомления?
Не-не-не, не должно быть по задумке протокола. Т.е. это та причина, по которой такой вариант решения не устраивает и требует допиливания.
-
а понял...
-
На какой адрес посылаешь?
И приведи ipconfig /all
-
> [4] Anatoly Podgoretsky © (13.08.12 19:55)
Настройка протокола IP для Windows
Имя компьютера . . . . . . . . . : SURNAME-N
Основной DNS-суффикс . . . . . . : company-name.local
Тип узла. . . . . . . . . . . . . : Гибридный
IP-маршрутизация включена . . . . : Нет
WINS-прокси включен . . . . . . . : Нет
Порядок просмотра суффиксов DNS . : company-name.local
Ethernet adapter Подключение по локальной сети:
DNS-суффикс подключения . . . . . : company-name.local
Описание. . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
Физический адрес. . . . . . . . . : 00-1D-7D-A9-28-17
DHCP включен. . . . . . . . . . . : Да
Автонастройка включена. . . . . . : Да
Локальный IPv6-адрес канала . . . : fe80::319f:d7ed:7a78:d4fa%10(Основной)
IPv4-адрес. . . . . . . . . . . . : 192.168.0.97(Основной)
Маска подсети . . . . . . . . . . : 255.255.255.0
Аренда получена. . . . . . . . . . : 9 августа 2012 г. 7:30:23
Срок аренды истекает. . . . . . . . . . : 17 августа 2012 г. 14:10:50
Основной шлюз. . . . . . . . . : 192.168.0.3
DHCP-сервер. . . . . . . . . . . : 192.168.0.1
IAID DHCPv6 . . . . . . . . . . . : 234888573
DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-14-F7-B3-B9-00-1D-7D-A9-28-17
DNS-серверы. . . . . . . . . . . : 192.168.0.1
192.168.0.2
Основной WINS-сервер. . . . . . . : 192.168.0.1
Дополнительный WINS-сервер. . . . . . : 192.168.0.2
NetBios через TCP/IP. . . . . . . . : Включен
Ethernet adapter VMware Network Adapter VMnet1:
DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
Физический адрес. . . . . . . . . : 00-50-56-C0-00-01
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Локальный IPv6-адрес канала . . . : fe80::b96a:4b78:662b:997b%15(Основной)
IPv4-адрес. . . . . . . . . . . . : 10.0.0.1(Основной)
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . :
IAID DHCPv6 . . . . . . . . . . . : 402673750
DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-14-F7-B3-B9-00-1D-7D-A9-28-17
DNS-серверы. . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBios через TCP/IP. . . . . . . . : Включен
Туннельный адаптер isatap.company-name.local:
Состояние среды. . . . . . . . : Среда передачи недоступна.
DNS-суффикс подключения . . . . . : company-name.local
Описание. . . . . . . . . . . . . : Адаптер Microsoft ISATAP
Физический адрес. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Туннельный адаптер isatap.:
Состояние среды. . . . . . . . : Среда передачи недоступна.
DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : Адаптер Microsoft ISATAP #2
Физический адрес. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP включен. . . . . . . . . . . : Нет
Автонастройка включена. . . . . . : Да
Поведение такое:
1. Посылаю на 255.255.255.255 - датараммы приходят
ко всем процессам на локальном компьютере плюс уходят в сеть.
2. Посылаю на 192.168.0.97 - датаграммы приходят
только к одному процессу на локальном компьютере и в сеть, разумеется, не идут.
3. Посылаю на 127.0.0.1 - sendto() возвращает ошибку 10049, что логично.
-
> ProgRAMmer Dimonych (13.08.2012 20:36:05) [5]
Я вообще то хотел route print, но ошибся.
Но и так ясно, ты посылаешь бродкаст не тому адресу, у сети 127.0.0.x он
совсем другой, вероятнее всего 127.255.255.255
-
> [6] Anatoly Podgoretsky © (13.08.12 21:37)
> > ProgRAMmer Dimonych (13.08.2012 20:36:05) [5]
> Я вообще то хотел route print, но ошибся.
> Но и так ясно, ты посылаешь бродкаст не тому адресу, у сети
> 127.0.0.x он
> совсем другой, вероятнее всего 127.255.255.255
10049. Есть подозрение, что loopback-адреса WinSock не считает подходящими для broadcast'ов.
-
> loopback-адреса WinSock не считает подходящими для broadcast'ов
Они ничем не хуже других адресов.
Просто в таблице маршрутов нет подходящего маршрута для 127.255.255.255.
Зато есть "неподходящие" для 255.255.255.255, потому и уходят бродкасты в другие сети.
-
а кому их там посылать?)
-
> brother © (14.08.12 10:32) [9]
Ну как кому ?
Вестимо - интерфейсам в подсети 127.0.0.0/8
-
> [8] Сергей М. © (14.08.12 10:31)
> > loopback-адреса WinSock не считает подходящими для broadcast'ов
> Они ничем не хуже других адресов.
> Просто в таблице маршрутов нет подходящего маршрута для
> 127.255.255.255.
> Зато есть "неподходящие" для 255.255.255.255, потому и уходят
> бродкасты в другие сети.
Правильно ли я понимаю, что без дополнительной настройки со стороны администратора сети отправить датаграмму только процессам на localhost не удастся?
-
> ProgRAMmer Dimonych (14.08.2012 11:38:11) [11]
Приведи route print и скажи, ты попробовал 127.255.255.255 - это типовой
бродкаст адрес для данной сети?
-
> ProgRAMmer Dimonych © (14.08.12 11:38) [11]
Разумеется процессу, модифицирующему таблицу маршрутов, требуются административные привелегии
-
> [12] Anatoly Podgoretsky © (14.08.12 11:59)
> > ProgRAMmer Dimonych (14.08.2012 11:38:11) [11]
> Приведи route print и скажи, ты попробовал 127.255.255.255
> - это типовой
> бродкаст адрес для данной сети?
========================================================================== =
Список интерфейсов
10...00 1d 7d a9 28 17 ......Realtek PCIe GBE Family Controller
15...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
1...........................Software Loopback Interface 1
11...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP
12...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP #2
===========================================================================
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.3 192.168.0.97 20
10.0.0.0 255.255.255.0 On-link 10.0.0.1 276
10.0.0.1 255.255.255.255 On-link 10.0.0.1 276
10.0.0.255 255.255.255.255 On-link 10.0.0.1 276
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.97 276
192.168.0.97 255.255.255.255 On-link 192.168.0.97 276
192.168.0.255 255.255.255.255 On-link 192.168.0.97 276
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.97 276
224.0.0.0 240.0.0.0 On-link 10.0.0.1 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.97 276
255.255.255.255 255.255.255.255 On-link 10.0.0.1 276
===========================================================================
Постоянные маршруты:
Отсутствует
IPv6 таблица маршрута
===========================================================================
Активные маршруты:
Метрика Сетевой адрес Шлюз
1 306 ::1/128 On-link
10 276 fe80::/64 On-link
15 276 fe80::/64 On-link
10 276 fe80::319f:d7ed:7a78:d4fa/128
On-link
15 276 fe80::b96a:4b78:662b:997b/128
On-link
1 306 ff00::/8 On-link
10 276 ff00::/8 On-link
15 276 ff00::/8 On-link
===========================================================================
Постоянные маршруты:
Отсутствует
-
> [12] Anatoly Podgoretsky © (14.08.12 11:59)
P.S. При отправке на 127.255.255.255 - ошибка 10049, как и на 127.0.0.1 (что, судя по роутам, закономерно).
-
> ProgRAMmer Dimonych (14.08.2012 12:27:14) [14]
Вот видишь маршрут до lo
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
-
> [16] Anatoly Podgoretsky © (14.08.12 12:31)
> > ProgRAMmer Dimonych (14.08.2012 12:27:14) [14]
> Вот видишь маршрут до lo
> 127.255.255.255 255.255.255.255 On-link
> 127.0.0.1 306
Т.е. пакеты вместо 127.255.255.255 "уходят" на 127.0.0.1, правильно?
С гугловой помощью натыкался на упоминания о том, что бродкасты на loopback-адреса не проходят (по крайней мере, в Windows). Так ли это?
-
судя по: 127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
Сергей в [10] был не прав. Как я и ожидал, вся подсеть не ловит бродкаст ибо 127.0.0.1 должен быть единственным в этой подсети, имхо!
-
> ProgRAMmer Dimonych (14.08.2012 12:36:17) [17]
Правильно, именно это следует из маршрута.
Сомневаюсь, что бродкаст не работает для loopback-адресов, не зря же они
сделали маршрут?
-
> brother (14.08.2012 12:51:18) [18]
Этого не может быть по теории, минимум три адреса - network, broadcast и 1/2
клиентских адреса
-
> [19] Anatoly Podgoretsky © (14.08.12 13:08)
> > ProgRAMmer Dimonych (14.08.2012 12:36:17) [17]
> Правильно, именно это следует из маршрута.
> Сомневаюсь, что бродкаст не работает для loopback-адресов,
> не зря же они
> сделали маршрут?
Логично. Но как тогда можно интерпретировать ошибку 10049 на sendto()? Меняется только IP-адрес, на 255.255.255.255 всё работает.
-
> минимум три адреса - network, broadcast и 1/2
чуть погорячился, но
> Сомневаюсь, что бродкаст не работает для loopback-адресов
у меня как раз вызывает сомнения, ибо
> не зря же они
> сделали маршрут?
вот именно, это заглушка, чтобы других отсечь!
-
Дмитрий, может не стоит использовать лупбэк интерфейс, и попробовать заморочиться с виртуальным? я так понимаю, это надо, для того, чтобы процессы смогли общаться меж собой и только?
-
один интерфейс может иметь айпи нескольких разных подсетей...
-
> [23] brother © (14.08.12 13:29)
> Дмитрий, может не стоит использовать лупбэк интерфейс, и
> попробовать заморочиться с виртуальным? я так понимаю, это
> надо, для того, чтобы процессы смогли общаться меж собой
> и только?
Да, в принципе, только для этого. Можно подробнее про идею с виртуальным интерфейсом? Ссылки по теме, если таковые будут, приветствуются.
-
> ProgRAMmer Dimonych (14.08.2012 13:46:25) [25]
Поиск говорит это
Question/Problem: WSAEADDRNOTAVAIL (10049) Cannot assign requested address.
Answer/Solution: Normally results from an attempt to create a socket with
an address not on this machine.
WinSock description: The "address" it refers to is the remote socket name
(protocol, port and address). This error occurs when the sin_port value is
zero in a sockaddr_in structure for connect or sendto.
This error also occurs when you are trying to name the local socket (assign
local address and port number) with bind, but Windows Sockets doesn't
ascribe this error to bind, for some unknown reason.
-
я имел ввиду задать в настройках TCP/IP второй IP-адрес (из якобы другой подсети)
-
И не надо ставить вторую плату. К тому же поток не пойдет в сетью
-
-
> [27] brother © (14.08.12 14:20)
> я имел ввиду задать в настройках TCP/IP второй IP-адрес
> (из якобы другой подсети)
Менять настройки пользователя - моветон :(
-
вообще - дополнять, он и не узнает ;)
-
> 1. Посылаю на 255.255.255.255 - датараммы приходят ко всем
> процессам на локальном компьютере плюс уходят в сеть.
Не всем, а только тем которые забиндили свои сокеты хотя бы на один из [127.0.0.1, 192.168.0.97, 10.0.0.1], судя по конфигу и маршрутам.
А уходят в сеть потому что метрика у бродкаст-маршрута для лупбеков больше чем метрика у остальных одноуровневых бродкаст-маршрутов. Метрика - это же приоритет, чем она меньше, тем маршрут приоритетнее
-
> [32] Сергей М. © (14.08.12 15:14)
> > 1. Посылаю на 255.255.255.255 - датараммы приходят ко всем
> > процессам на локальном компьютере плюс уходят в сеть.
> Не всем, а только тем которые забиндили свои сокеты хотя
> бы на один из [127.0.0.1, 192.168.0.97, 10.0.0.1], судя
> по конфигу и маршрутам.
>
> А уходят в сеть потому что метрика у бродкаст-маршрута для
> лупбеков больше чем метрика у остальных одноуровневых бродкаст-
> маршрутов. Метрика - это же приоритет, чем она меньше, тем
> маршрут приоритетнее
Суть в том, что любой желающий получит. А желающих - на каждом компе. Пока сделал отсев по адресу отправителя, но как-то некрасиво, кажется.
-
> ProgRAMmer Dimonych (14.08.2012 14:49:30) [30]
Это не настройка пользователся, а администратора, пользователь не админ не
имеет прав на это.
-
> [34] Anatoly Podgoretsky © (14.08.12 15:36)
Тем, соответственно, веселее.
-
> любой желающий получит
Не любой желающий, а только тот маршрут до которого фигурирует (и фактически использован) в таблице маршрутов хоста-отправителя.