Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Проблема с бродкаст пакетами...

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети
Предыдущая тема :: Следующая тема  
Автор Сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Пт Фев 17 2006 14:22    Заголовок сообщения: Проблема с бродкаст пакетами... Ответить с цитатой

Есть компьютер с двумя сетевыми карточками №1 и №2. Карточка №1 не подключена к сети, карточка №2 подключена. На карточке №1 установлен статический адрес 192.168.238.238, на карточке №2 - адрес динамический 192.168.0.1. Посылаю с этой машины бродкаст UDP пакеты которые получаю на другой машине подключенной к сети 192.168.0.х и у них в качестве адреса отправителя стоит адрес 192.168.238.238. При отправке бродкаст UDP пакетов bind сокету не делаю - UDP не требует этого. По моему мнению - если комп кидает пакеты в интерфейс №2 (а раз я получаю пакеты в сети 192.168.0.х - значит так и есть) то и обратный адрес он должен устанавливать этого же интерфейса (т.е. 192.168.0.1) - почему же этого не происходит?
Заранее благодарен!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andrew Grekhov



Зарегистрирован: 29.06.2005
Сообщения: 200

СообщениеДобавлено: Пт Фев 17 2006 14:47    Заголовок сообщения: Ответить с цитатой

Напортачили с маршрутизацией.
Команда route Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 17 2006 15:22    Заголовок сообщения: Ответить с цитатой

Andrew Grekhov
Несколько поспешное заявление...
C маршрутизацией норма.
Jolik
Цитата:
По моему мнению - если комп кидает пакеты в интерфейс №2 (а раз я получаю пакеты в сети 192.168.0.х - значит так и есть) то и обратный адрес он должен устанавливать этого же интерфейса (т.е. 192.168.0.1) - почему же этого не происходит?

Дело в том, что сначала происходит формирование пакета (в том числе и адрес отправителя), затем идет обращение к таблице маршрутизации, чтобы выяснить кому послать пакет (на шлюз по умолчанию или непосредственно получателю) и через какой интерфейс.
Проблемы с программой, которая формирует пакет.
_________________
Знание принципов компенсирует незнание фактов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gleb185



Зарегистрирован: 17.02.2006
Сообщения: 8

СообщениеДобавлено: Пт Фев 17 2006 15:32    Заголовок сообщения: Ответить с цитатой

маска /24 на обоих интерфейсах?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Пт Фев 17 2006 16:32    Заголовок сообщения: Ответы: Ответить с цитатой

1. маска одинаковая /24
2. route бродкаст не дает корректировать (узел 255.255.255.255
)
3. прикладная программа передающая то не может указывать адрес отправителя - это WinSock же выдает при вызове recvfrom()
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 17 2006 17:07    Заголовок сообщения: Ответить с цитатой

Цитата:
прикладная программа передающая то не может указывать адрес отправителя

Может ошибаюсь, давно не программировал. Но рискну:
- создаем socket
- получаем список всех IP нашего компа
- делаем bind с нужным нашим адресом (отправителя)
- sendto на бродкаст
---
Вроде так. Если не прав, надеюсь знающие поправят. Smile
_________________
Знание принципов компенсирует незнание фактов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Пт Фев 17 2006 17:13    Заголовок сообщения: Все верно... Ответить с цитатой

Andy_user писал(а):
Цитата:
прикладная программа передающая то не может указывать адрес отправителя

Может ошибаюсь, давно не программировал. Но рискну:
- создаем socket
- получаем список всех IP нашего компа
- делаем bind с нужным нашим адресом (отправителя)
- sendto на бродкаст
---
Вроде так. Если не прав, надеюсь знающие поправят. Smile


Думаю если так сделать - будет все работать. Просто не хотелось бы так гимороиться - получать список интерфейсов и пр. Тем более, что в большинстве случаев (когда на компе одна карточка) все работает Smile Думаю, что это глюк в винде Sad Еще думаю, что если бы была возможность в route снести путь 255.255.255.255 к ненужно карточке - тоже все бы заработало Smile
Может еще какие мысли есть?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 17 2006 17:19    Заголовок сообщения: Ответить с цитатой

Цитата:
Тем более, что в большинстве случаев (когда на компе одна карточка) все работает Думаю, что это глюк в винде

Конечно работает.
Насчет глюка - не надо...
При наличии нескольких IP привязка сокета по bind() происходит по первому сетевому интерфейсу из списка.
Попробуйте:
- нужную Вам сетевую карту - на самый верх в списке;
- отключить ненужную.
_________________
Знание принципов компенсирует незнание фактов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Пт Фев 17 2006 17:26    Заголовок сообщения: Согласен... Ответить с цитатой

Andy_user писал(а):
Цитата:
Тем более, что в большинстве случаев (когда на компе одна карточка) все работает Думаю, что это глюк в винде

Конечно работает.
Насчет глюка - не надо...
При наличии нескольких IP привязка сокета по bind() происходит по первому сетевому интерфейсу из списка.
Попробуйте:
- нужную Вам сетевую карту - на самый верх в списке;
- отключить ненужную.


Другое дело - как назвать, если не глюком,, что пакет уходит через один интерфейс, а адрес отправителя - от другого...
интересно было бы проверить это на линуксе Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 17 2006 17:30    Заголовок сообщения: Ответить с цитатой

Думаю, будет так же.
Работа с сокетами в винде содрана с *nix систем.
Еще раз напомню:
Формирование пакета идет раньше, затем идет обращение к таблице маршрутизации.
_________________
Знание принципов компенсирует незнание фактов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Пт Фев 17 2006 17:38    Заголовок сообщения: Секундочку... Ответить с цитатой

Andy_user писал(а):
Думаю, будет так же.
Работа с сокетами в винде содрана с *nix систем.
Еще раз напомню:
Формирование пакета идет раньше, затем идет обращение к таблице маршрутизации.


при формировании пакета система должна знать адрес интерфейса, по которому будет отправлять - иначе и получается такая лабуда если я отправляю пакет по указанному адресу, ведь он нормальный обратный ИП адрес подставит, т.е. глянет в табличу марш., посмотрит по какому интерфейсу пулять, подцепит обратный адрес этого интерфейса и все будет чики -пики. (кстати - надо бы проверить! может таже лабуда). А с бродкастом видимо проблема в том, что бродкастузлу 255.255.255.255 удовлетворяют два пути (кстати, почему бы сразу в два не пульнуть - это же бродкаст).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 17 2006 17:47    Заголовок сообщения: Ответить с цитатой

Цитата:
при формировании пакета система должна знать адрес интерфейса, по которому будет отправлять - иначе и получается такая лабуда

Пакет формирует не система, а прикладная программа.
И знать, какой адрес нужно подставить в качестве адреса отправителя, должна она же.
И получит список IP-адресов (IP-интерфейсов), чтобы знать с каким из них связать сокет (bind) тоже должна программа.
_________________
Знание принципов компенсирует незнание фактов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
C37



Зарегистрирован: 09.03.2005
Сообщения: 311

СообщениеДобавлено: Пт Фев 17 2006 19:09    Заголовок сообщения: Ответить с цитатой

Что-то мне сдается, что broadcast должен быть не 255.255.255.255, а 192.168.238.255 и 192.168.0.255 соответственно для двух интерфейсов
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jolik



Зарегистрирован: 31.03.2004
Сообщения: 56

СообщениеДобавлено: Вт Фев 21 2006 18:50    Заголовок сообщения: Если кому еще топик интересен... Ответить с цитатой

Удалось решить только так:
1. получаю список IP адресов через GetIpAddrTable
2. меняю последний байт адреса на 255
3. посылаю через sendto

теперь через route проходит корректно - короче работает!
может кто знает как красивше сделать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
C37



Зарегистрирован: 09.03.2005
Сообщения: 311

СообщениеДобавлено: Ср Фев 22 2006 19:18    Заголовок сообщения: Ответить с цитатой

Настроить сеть по-человечески, т.е. дать правильный адрес broadcast дла каждой подсети. Тогда не придется программно исправлять ошибку общей настройки при отправке каждого пакета.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...