Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как послать широковещательный запрос в локальную сеть?

1.6K
28 декабря 2004 года
Grom2025
82 / / 20.03.2003
Есть задача, дописать в программу простенький чат,
работающий в локальной сети, запускать отдельный сервер(програмный) под чат незя, на socket'ах
пробовал но не могу определить кто подключен в
данный момент да и вообще, отправлять запросы
на список IP тоже не вариант т.к. IP раздаёт winroute в случайном порядке. Что можно сделать!
315
28 декабря 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Grom2025
Есть задача, дописать в программу простенький чат,
работающий в локальной сети, запускать отдельный сервер(програмный) под чат незя, на socket'ах
пробовал но не могу определить кто подключен в
данный момент да и вообще, отправлять запросы
на список IP тоже не вариант т.к. IP раздаёт winroute в случайном порядке. Что можно сделать!


Маска сети извесна? Тогда послать сообщение на последний адрес в сети. Это и будет броадкаст. Например сеть 192.168.0.0/255.255.255.0 Адрес для широковещательных сообщений: 192.168.0.255

1.6K
28 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by Nick_M

Маска сети извесна? Тогда послать сообщение на последний адрес в сети. Это и будет броадкаст. Например сеть 192.168.0.0/255.255.255.0 Адрес для широковещательных сообщений: 192.168.0.255



При попытке сделать ClientSocket->Open(); выдает сообщение "Asynchronous socket error 10049"...
Может быть компонент просто не умеет делать такие запросы?
Я смотрел на другой чат через файрвол, он использует в качестве адреса вообще 255.255.255.255 как он это делает не понятно но работает...

259
28 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Grom2025


в качестве адреса вообще 255.255.255.255 как он это делает не понятно но работает...


Это совсем круто. По всему Инету на всю планету.

243
29 декабря 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Grom2025


При попытке сделать ClientSocket->Open(); выдает сообщение "Asynchronous socket error 10049"...
Может быть компонент просто не умеет делать такие запросы?
Я смотрел на другой чат через файрвол, он использует в качестве адреса вообще 255.255.255.255 как он это делает не понятно но работает...


А броадкаст запросы в сети разрешены? Может в этом и есть вся загвоздка т.к. разрешать такое опасно.

1.6K
29 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by pacific_7

А броадкаст запросы в сети разрешены? Может в этом и есть вся загвоздка т.к. разрешать такое опасно.



Ну я так понимаю, что если чужой чат работает - значит броадкаст запросы разрешены.

315
29 декабря 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Grom2025


При попытке сделать ClientSocket->Open(); выдает сообщение "Asynchronous socket error 10049"...
Может быть компонент просто не умеет делать такие запросы?
Я смотрел на другой чат через файрвол, он использует в качестве адреса вообще 255.255.255.255 как он это делает не понятно но работает...


Штука в том, что широковещательная передача использует протокол не TCP (как я понимаю у тебя так), а UDP. Соответстенно никакого соединения не производится.

2
29 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by AlexandrVSmirno

Это совсем круто. По всему Инету на всю планету.


бродкасты не ходят через маршрутизаторы.

Цитата:
Originally posted by Nick_M

Штука в том, что широковещательная передача использует протокол не TCP (как я понимаю у тебя так), а UDP. Соответстенно никакого соединения не производится.


совершенно верно.

Grom2025читайте
http://www.zeiss.net.ru/docs/technol/tcpip/tcp12.htm
сначала надо изучить основы... а потом чаты писать. это кстати ко всем относится.
и я не пойму, почему бы вам не использовать NetBIOS имена компов?

2
29 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by pacific_7

А броадкаст запросы в сети разрешены? Может в этом и есть вся загвоздка т.к. разрешать такое опасно.


а почему? и как их запретить?

259
29 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by squirL
совершенно верно. только вот скажите, как в сети можно запретить броадкасты??? (это к предыдущему вашему посту)


Ошибочка. я такого не постил. Это не мое. А броадкасты через маршрутизаторы действительно не ходят.

2
29 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by AlexandrVSmirno

Ошибочка. я такого не постил. Это не мое. А броадкасты через маршрутизаторы действительно не ходят.



да я заметил. уже исправился.
а если действительно не ходят пугать человека зачем? дезинформация и саботаж.

259
29 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by squirL


да я заметил. уже исправился.
а если действительно не ходят пугать человека зачем? дезинформация и саботаж.


Согласен ну уж дюже крутой IP. Не люблю я такие адреса.

2
29 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by AlexandrVSmirno

Не люблю я такие адреса.


хм... вы меня пугаете. это прекрасный подход. вы мне напоминаете одного знакомого, который говорил, что нельзя ставить IP адрес машины 10.255.255.1 - мол "это против общепринятых правил"

259
29 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by squirL

хм... вы меня пугаете. это прекрасный подход. вы мне напоминаете одного знакомого, который говорил, что нельзя ставить IP адрес машины 10.255.255.1 - мол "это против общепринятых правил"


Да нет. Против адреса такого я вобщем ничего не имею, но был прецендент,стыдно но спутал с маской 255.255.255.255 (правда я тогда только начинал сетями заниматься).

2
29 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by AlexandrVSmirno

Да нет. Против адреса такого я вобщем ничего не имею, но был прецендент,стыдно но спутал с маской 255.255.255.255 (правда я тогда только начинал сетями заниматься).



а маска вам такая чем не нравиться? ;)

259
29 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by squirL


а маска вам такая чем не нравиться? ;)


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

1.6K
29 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by squirL

Grom2025читайте
http://www.zeiss.net.ru/docs/technol/tcpip/tcp12.htm
сначала надо изучить основы... а потом чаты писать. это кстати ко всем относится.
и я не пойму, почему бы вам не использовать NetBIOS имена компов?



Благодарю за ссылку! Изучаю !-)
А какие компоненты в Билдере могут работать через UDP? (идиотский вопрос но чат бы хотелось доделать до нового года, а у меня и без него завал) Может у кого примерчик есть?

259
29 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Grom2025


Благодарю за ссылку! Изучаю !-)
А какие компоненты в Билдере могут работать через UDP? (идиотский вопрос но чат бы хотелось доделать до нового года, а у меня и без него завал) Может у кого примерчик есть?


Это правда из Билдер6, но в пятерке наверное тоже есть:
TUdpSocket is the UDP component.

Unit

Sockets

Description

Use TUdpSocket to create UDP-based applications. Add a TUdpSocket object to a form or data module to turn an application into a UDP/IP client and server. TUdpSocket specifies a desired connection to a UDP/IP server, manages the connection when it is open, and terminates the connection when the application is through. It also listens for requests for UDP/IP connections from other machines and establishes connections when requests are received.

243
30 декабря 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by squirL

а почему? и как их запретить?


Пардон! Видимо я где-то крепко торможу вследствии недостатка (вернее отсутствия в этой области) практики, но:

Издательство "БХВ-Петербург", 2003 год, книга "Протоколы интернета" Александр Филимонов. Страница 79, "Способы защиты от атак с использованием ICMP Echo Request/Reply". Цитата:
"В качестве одного из такий эффективных мероприятий можно использовать запрещение приема и распространения сообщений типа Direct Broadcast. Эта мера является достаточно эфективной и простой для реализации. Использование данной меры рекомендовано документом, в соответствии с которым должны строиться правила функционирования маршрутизаторов в сети IP RFC - 1122. в Частности, в этом документе указано, что сообщения ICMP Echo Request типа direct broadcast, направленные в его адрес, могут быть уничтожены без формирования какого-либо диагностического сообщения."
Вышеприведенное наглая ложь?

1.6K
30 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by squirL
почему бы вам не использовать NetBIOS имена компов?



Простите за наивный вопрос, а как получить те самые заветные NetBIOS имена?

315
30 декабря 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Grom2025


Простите за наивный вопрос, а как получить те самые заветные NetBIOS имена?


API-шная функция BOOL GetComputerName(LPTSTR lpszName, LPDWORD lpdwBuffer). Возвращает имя netbios локального компьютера. Если используется ДНС нужна функция GetComputerNameEx
Первый параметр - указатель на буфер, в который поступает имя системы. Размер буфера должен быть минимум MAX_COMPUTERNAME_LENGTH + 1. Второй параметр - указатель на адрес, по которому находится определенное число символов в буфере до выполнения функции, а так-же число скопированных символов после выполнения.
При удаче возвращается TRUE.

2
30 декабря 2004 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by pacific_7

Вышеприведенное наглая ложь?


отнюдь. просто вы невнимательно читали написанное:

Цитата:
"В качестве одного из такий эффективных мероприятий можно использовать запрещение приема и распространения сообщений типа Direct Broadcast. Эта мера является достаточно эфективной и простой для реализации. Использование данной меры рекомендовано документом, в соответствии с которым должны строиться правила [COLOR=red]функционирования маршрутизаторов[/COLOR] в сети IP RFC - 1122. в Частности, в этом документе указано, что сообщения ICMP Echo Request типа direct broadcast, направленные в его адрес, могут быть уничтожены без формирования какого-либо диагностического сообщения."



как я уже писал маршрутизаторы действительно не пропускают бродкасты. опять же внимательно перечитав этот отрывок, вы поймете, что "запрещение" бродкастов происходит на сетевом уровне. в пределах же локальной сети, не разбитой маршрутизаторами, широковещательный траффик ограничить можно только установкой управляемых свичей 3-го уровня и созданием VLAN. в этом случае свичами будет выполняться уже не коммутация (канальный уровень), а маршрутизация между VLAN. но в пределах одной VLAN - широковещательные запросы ходить будут по прежнему.
я ответил на ваш вопрос?

1.6K
30 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by Nick_M

API-шная функция BOOL GetComputerName(LPTSTR lpszName, LPDWORD lpdwBuffer). Возвращает имя netbios локального компьютера. Если используется ДНС нужна функция GetComputerNameEx
Первый параметр - указатель на буфер, в который поступает имя системы. Размер буфера должен быть минимум MAX_COMPUTERNAME_LENGTH + 1. Второй параметр - указатель на адрес, по которому находится определенное число символов в буфере до выполнения функции, а так-же число скопированных символов после выполнения.
При удаче возвращается TRUE.



Ну ладно получил я свой netbios name, чем мне это поможет, имен остальных компьютеров я не знаю
код в BCB5 выглядит вот так:

Код:
unsigned long qwe = 300;
//зачем мне пришлось сделать вот так?
_COMPUTER_NAME_FORMAT  aa;
wchar_t  cname[300];
  if(GetComputerNameExW(aa,cname,&qwe))
  {
    RzEdit1->Text = cname;
  }
  else
  {
    RzEdit1->Text = "error";
  };
243
31 декабря 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by squirL

я ответил на ваш вопрос?


Да - big спасиб! Не сказать, что не внимательно читал. Просто не понял сразу, чем отличается приведенный случай от обсуждаемого здесь. Теперь дошло. Трудновато бывает все осмысливать только по книжкам :(.
Еще раз спасибо.

315
31 декабря 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Grom2025


Ну ладно получил я свой netbios name, чем мне это поможет, имен остальных компьютеров я не знаю


А дальше отослать широковещательное сообщение с собственными координатами. И пусть остальные компьютеры его ловят и обрабатывают, отвечают tcp-сообщениями.

1.6K
31 декабря 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by Nick_M

А дальше отослать широковещательное сообщение с собственными координатами. И пусть остальные компьютеры его ловят и обрабатывают, отвечают tcp-сообщениями.



Спасибо, понял. Теперь остаётся вопрос как послать широковещательный запрос, пробовал на компоненте TNMUDP, файрвол показывает соединение UDP ip 255.255.255.255 (192.168.1.255 ...) пробовал всякие адреса, запрос всё равно не возвращается... (

Упс извиняюсь сейчас попробовал с адресом ip 192.168.1.255 запрос вернулся как и надо было!!!

Спасибо Nick_M!!! Но всётаки интересно почему не проходит ip 255.255.255.255?

P/S Всех с новым годом!!!

315
31 декабря 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Grom2025


Спасибо, понял. Теперь остаётся вопрос как послать широковещательный запрос, пробовал на компоненте TNMUDP, файрвол показывает соединение UDP ip 255.255.255.255 (192.168.1.255 ...) пробовал всякие адреса, запрос всё равно не возвращается... (

Упс извиняюсь сейчас попробовал с адресом ip 192.168.1.255 запрос вернулся как и надо было!!!

Спасибо Nick_M!!! Но всётаки интересно почему не проходит ip 255.255.255.255?

P/S Всех с новым годом!!!


Кстати UDP-пакеты могут по ходу теряться...
Вообще если есть возможность организовать сервер, то лучше это сделать. Отпадает необходимость в широковещательных пакетах.

2
04 января 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Nick_M

Кстати UDP-пакеты могут по ходу теряться...



глупо... :(

315
11 января 2005 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by squirL


глупо... :(


Почему?

2
11 января 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Nick_M

Почему?



потому что теряться могут и TCP пакеты. а в локальной сети, о которой мы говорим... какова должна быть загрузка сети, чтобы UDP не смог доставить пакет???

2.3K
11 января 2005 года
ART-CODE
134 / / 15.11.2004
Настоятельно рекомендую приобрести книгу
"Эффективное программирование TCP/IP"
из серии "библиотека программиста"
там шаг за шагом в лабораторных работах подводят к пониманию работы протоколов.
В часности есть наглядый пример того, что потери пакетов не всегда зависят от пропускной пособности сети: возможы потери пакетов даже когда клиент и сервер работают на одной машине.

На прочтение книги потеряешь неделю, но
без этого написать устойчиво работающюю сетевую программу нельзя.

Насчет чата по UDP -
IMHO нафига это надо ?
очень скоро у тебя появятся пользователи с ноутбуками, подключающимися через интернет
и хорошо было-бы , чтобы они могли обмениваться сообщениями с офиными компьютерами,
а еще через некоторое время поятвится второй офис, он то-же должен будет обмениваться сообщениями
и тут вспомни про маршрутизаторы :)

Обычное TCP соединение легко проходит через прокси -сервера: на Server/Client Socket писать надо.

Решение проблемы динамических адресов:

-1-
Выделить в сети сервер не так уж это сложно и страшно :)

-2-
DHCP настроить на выдачу адресов не в cлучайном порядке, а по MAC - адресам - каждому MAC - всегда только свой IP. Получится у каждого компа Всегда одинаковый IP, назанчаемый динамически.

-3-
Сколько компов в сети ? 10-25 ?
что мешает выполнить автоматический поиск чат-сервера в выбраном диапазоне адресов?
Времени займет менее 1 сек.
динамически создать ~25 асинхронных сокетов , настроеных на попытку соединения с разными IP, когда один из них соединится, все остальные прибить.

2
11 января 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by ART-CODE
Настоятельно рекомендую приобрести книгу
"Эффективное программирование TCP/IP"
из серии "библиотека программиста"
там шаг за шагом в лабораторных работах подводят к пониманию работы протоколов.
В часности есть наглядый пример того, что потери пакетов не всегда зависят от пропускной пособности сети: возможы потери пакетов даже когда клиент и сервер работают на одной машине.

На прочтение книги потеряешь неделю, но
без этого написать устойчиво работающюю сетевую программу нельзя.



молодца! я ее уже давно всем рекомендую :) правда я бы еще рекомендовал почитать TCP/IP Illustrated Стивенса...

315
12 января 2005 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by squirL


потому что теряться могут и TCP пакеты. а в локальной сети, о которой мы говорим... какова должна быть загрузка сети, чтобы UDP не смог доставить пакет???


TCP-пакеты конечно-же могут теряться, но тогда произойдет повторная отправка без участия программы.

2
12 января 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Nick_M

TCP-пакеты конечно-же могут теряться, но тогда произойдет повторная отправка без участия программы.



повторяю - в локальной сети вероятность потери ничтожна.

323
12 января 2005 года
Sergun
228 / / 20.09.2000
Вообще лучше конечно сделать выделенный сервер и не парится, в итоге ты все равно к этому придешь...
Насчет UDP... вероятность потери пакетов все же есть, были реальные опыты которые это показывают, даже без сети (на одной машине)...
И в конце концов.. что такое TCP? это усовершеннствованый так сказать UDP, который поддерживает постоянное соединение и реализует механизм гарантированной доставки пакетов (в отличие от UDP), в UDP тебе придется это делать самому...
315
12 января 2005 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Sergun
Вообще лучше конечно сделать выделенный сервер и не парится, в итоге ты все равно к этому придешь...
Насчет UDP... вероятность потери пакетов все же есть, были реальные опыты которые это показывают, даже без сети (на одной машине)...
И в конце концов.. что такое TCP? это усовершеннствованый так сказать UDP, который поддерживает постоянное соединение и реализует механизм гарантированной доставки пакетов (в отличие от UDP), в UDP тебе придется это делать самому...


Абсолютно согласен. Я в пробовал сделать нечто типа чата на основе UDP. Тестировал одновременно на 3-х компьютерах. Пакеты терялись и компы видели друг друга в случайном порядке. Дальше разбираться было некогда...

2
12 января 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Sergun
реализует механизм гарантированной доставки пакетов (в отличие от UDP), в UDP тебе придется это делать самому...



чуть поправлю, если позволите. TCP реализует механизм подтверждения TCP датаграмм, а не гарантированную доставку.
по сабжу - на rsdn.ru лежала неплохая статья по написанию своего WinPopup.

1.6K
21 января 2005 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by squirL


повторяю - в локальной сети вероятность потери ничтожна.



Странно это конечно, но пакеты UDP теряются почти все, при отсылке сообщения мне с другого клиента, приходят мои же (которые я сам отправлял) обрезанные сообщения... короче говоря я ничего толком не понял, за ссылку на книжку спасибо!(надеюсь удастся её достать)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог