Не могу послать Broadcast tcp-пакет
От: ENTiTY Россия пока нет
Дата: 03.06.03 20:20
Оценка:
делаю так:

SOCKET m_Socket=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

sockaddr_in m_HostSockAddr;

m_HostSockAddr.sin_family=AF_INET;
m_HostSockAddr.sin_port=::htons(1111);
m_HostSockAddr.sin_addr.s_addr=::htonl(INADDR_BROADCAST);

если делать:

BOOL bEnable=TRUE;

::setsockopt(m_Socket, SOL_SOCKET, SO_BROADCAST, (char*) &bEnable, sizeof(BOOL)); // выдает ошибку WSAENOPROTOOPT

без:

::connect(m_Socket,(sockaddr*) &m_HostSockAddr, sizeof(SOCKADDR)); // выдает ошибку WSAEADDRNOTAVAIL

Как сделать, чтобы работало? (в ::setsockopt() найти ничего не смог) и повозможности без использования ::bind()


04.06.03 05:23: Перенесено из 'C/C++'
Re: Не могу послать Broadcast tcp-пакет
От: noesis  
Дата: 04.06.03 05:51
Оценка:
Может все-таки UDP?
icq 323-145-728
Re[2]: Не могу послать Broadcast tcp-пакет
От: ENTiTY Россия пока нет
Дата: 04.06.03 07:38
Оценка:
Нет нужно именно tcp-broadcast, если возможно
Re: Не могу послать Broadcast tcp-пакет
От: Vamp Россия  
Дата: 04.06.03 08:16
Оценка:
TCP-броадкастов не существует в принципе.
Ибо протокол — ориентированный на ДВУСТОРОННЕЕ соединение.
Кстати, в ATM есть соединения типа 1 к n, так что если тебе очень нужно — пользуйся
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Не могу послать Broadcast tcp-пакет
От: Linuxoid  
Дата: 04.06.03 08:52
Оценка:
Здравствуйте, Vamp, Вы писали:

V>TCP-броадкастов не существует в принципе.

V>Ибо протокол — ориентированный на ДВУСТОРОННЕЕ соединение.
V>Кстати, в ATM есть соединения типа 1 к n, так что если тебе очень нужно — пользуйся

хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?
Re[3]: Не могу послать Broadcast tcp-пакет
От: ENTiTY Россия пока нет
Дата: 04.06.03 09:00
Оценка: :)
Здравствуйте, Linuxoid, Вы писали:

L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?


Вот я это и пытаюсь сделать, но как я понял это не возможно. Подключаясь на адресс 255.255.255.255 функция ::connect выдает ошибку.
Re[3]: Не могу послать Broadcast tcp-пакет
От: Vamp Россия  
Дата: 04.06.03 09:53
Оценка: 1 (1) +1
Здравствуйте, Linuxoid, Вы писали:

L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?


Молодой человек, вы откровенно бредите. Уж простите.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Не могу послать Broadcast tcp-пакет
От: Sashko Россия http://www.dc.baika.ru/
Дата: 05.06.03 01:44
Оценка:
> L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?
>
> Молодой человек, вы откровенно бредите. Уж простите.

Ну почему, если сильно постараться, и ручками сформировать TCP пакет (понятно что
все это баловство), а потом заслать его на broadcast адрес, он дойдет до всех хостов,
но там должен будет побит системой (драйвером TCP) как недоразумение (а может быть
да же раньше, на раутерах или еще каких умных устройствах находящихся на пути).
Мало ли какие пакеты могут шастать по сети.
Posted via RSDN NNTP Server 1.5
Re[5]: Не могу послать Broadcast tcp-пакет
От: Дмитрий Наумов  
Дата: 05.06.03 07:01
Оценка:
Здравствуйте, Sashko, Вы писали:

>> L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?

>>
>> Молодой человек, вы откровенно бредите. Уж простите.

S>Ну почему, если сильно постараться, и ручками сформировать TCP пакет (понятно что

S>все это баловство), а потом заслать его на broadcast адрес, он дойдет до всех хостов,
S>но там должен будет побит системой (драйвером TCP) как недоразумение (а может быть
S>да же раньше, на раутерах или еще каких умных устройствах находящихся на пути).
S>Мало ли какие пакеты могут шастать по сети.

Можно и спутник космический из металлолома собрать, надо ли?
... << RSDN@Home 1.0 beta 6a >>
Re[5]: Не могу послать Broadcast tcp-пакет
От: Vamp Россия  
Дата: 05.06.03 07:08
Оценка:
Я в упор не могу понять, что такое TCP пакет. Кто-нибудь может мне объяснить?
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Не могу послать Broadcast tcp-пакет
От: Sashko Россия http://www.dc.baika.ru/
Дата: 05.06.03 07:44
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

>>> L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?


>>> Молодой человек, вы откровенно бредите. Уж простите.


S>>Ну почему, если сильно постараться, и ручками сформировать TCP пакет (понятно что

S>>все это баловство
), а потом заслать его на broadcast адрес, он дойдет до всех хостов,
S>>но там должен будет побит системой (драйвером TCP) как недоразумение (а может быть
S>>да же раньше, на раутерах или еще каких умных устройствах находящихся на пути).
S>>Мало ли какие пакеты могут шастать по сети.

ДН>Можно и спутник космический из металлолома собрать, надо ли?


А почему бы и нет, а вдруг система рухнет, увидев броадкаст содержащий TCP header а не UDP header (может кто помнить как nuke'алась Windows95, там была ошибка в обработке приходящих пакетов, приводящая к умиранию сети, до следующей перезагрузки), как она наивно надеется. Конечно все это теоретически.
Re[6]: Не могу послать Broadcast tcp-пакет
От: Sashko Россия http://www.dc.baika.ru/
Дата: 05.06.03 07:45
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Я в упор не могу понять, что такое TCP пакет. Кто-нибудь может мне объяснить?


TCP пакет, это блок данных со стандартным заголовком. По сетке (допустим Ethernet) гуляют Ethernet фреймы, для TCP пакета фрейм будет выглядеть так

--------------------------------------------------------------
| ETHERNET HEADER | IP HEADER | TCP HEADER | tcp data area
--------------------------------------------------------------


Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет, в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет. Такой блок данных, пришедший по сетке, система должна распознать как TCP пакет и передать кому нужно (если нужно).
Re[7]: Не могу послать Broadcast tcp-пакет
От: Linuxoid  
Дата: 05.06.03 08:33
Оценка:
Здравствуйте, Sashko, Вы писали:

S>Здравствуйте, Дмитрий Наумов, Вы писали:


>>>> L>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?


>>>> Молодой человек, вы откровенно бредите. Уж простите.


S>>>Ну почему, если сильно постараться, и ручками сформировать TCP пакет (понятно что

S>>>все это баловство
), а потом заслать его на broadcast адрес, он дойдет до всех хостов,
S>>>но там должен будет побит системой (драйвером TCP) как недоразумение (а может быть
S>>>да же раньше, на раутерах или еще каких умных устройствах находящихся на пути).
S>>>Мало ли какие пакеты могут шастать по сети.

ДН>>Можно и спутник космический из металлолома собрать, надо ли?


S>А почему бы и нет, а вдруг система рухнет, увидев броадкаст содержащий TCP header а не UDP header (может кто помнить как nuke'алась Windows95, там была ошибка в обработке приходящих пакетов, приводящая к умиранию сети, до следующей перезагрузки), как она наивно надеется. Конечно все это теоретически.


Винда нюкалась пакетом, который содержал флаг URGENT_DATA. Она, бедная, просто не знала, что с такими пакетами делать. А еще была такая атака — шторм пакетов. Это когда на broadcast-адрес сети посылался один-единственный запросный пакет, и все компьютеры начинали одновременно на него отвечать, что приводило к перегрузке сети.
Re[4]: Не могу послать Broadcast tcp-пакет
От: Linuxoid  
Дата: 05.06.03 08:35
Оценка:
Здравствуйте, ENTiTY, Вы писали:

ENT>Здравствуйте, Linuxoid, Вы писали:


L>>хм..а что будет, если послать TCP-пакет на широковещательный адрес сети?


ENT>Вот я это и пытаюсь сделать, но как я понял это не возможно. Подключаясь на адресс 255.255.255.255 функция ::connect выдает ошибку.


а ты попробуй через RAW_SOCKET
Re[7]: Не могу послать Broadcast tcp-пакет
От: Vamp Россия  
Дата: 05.06.03 09:50
Оценка: -1
S>Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет
Вы в этом абсолютно уверены? Мне казалось, что никаких таких полей в заголовках не предусмотрено.
S>в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет.
То же самое.
Да здравствует мыло душистое и веревка пушистая.
Re[8]: Не могу послать Broadcast tcp-пакет
От: Дмитрий Наумов  
Дата: 05.06.03 09:57
Оценка:
Здравствуйте, Vamp, Вы писали:

S>>Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет

V>Вы в этом абсолютно уверены? Мне казалось, что никаких таких полей в заголовках не предусмотрено.
S>>в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет.
V>То же самое.

И то и другое абсолютная правда.
... << RSDN@Home 1.0 beta 6a >>
Re[8]: Не могу послать Broadcast tcp-пакет
От: Linuxoid  
Дата: 05.06.03 10:08
Оценка: +1
Здравствуйте, Vamp, Вы писали:

S>>Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет

V>Вы в этом абсолютно уверены? Мне казалось, что никаких таких полей в заголовках не предусмотрено.
S>>в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет.
V>То же самое. ???!!!
Байт 9-й в заголовке IP — поле "протокол". 6 = TCP
Re[8]: Не могу послать Broadcast tcp-пакет
От: Linuxoid  
Дата: 05.06.03 10:11
Оценка:
Здравствуйте, Vamp, Вы писали:

S>>Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет

V>Вы в этом абсолютно уверены? Мне казалось, что никаких таких полей в заголовках не предусмотрено.
S>>в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет.
V>То же самое.
Перед тем, как что-то написать, иногда бывает полезно подумать. А как, по-твоему, стек протоколов определяет, что находится внутри IP-пакета?!
Re[8]: Не могу послать Broadcast tcp-пакет
От: Sashko Россия http://www.dc.baika.ru/
Дата: 05.06.03 10:29
Оценка:
Здравствуйте, Vamp, Вы писали:

S>>Причем в Ethernet Header'е есть поле, в котором говориться, что внутри фрейма лежит IP пакет

V>Вы в этом абсолютно уверены? Мне казалось, что никаких таких полей в заголовках не предусмотрено.
S>>в свою очередь в IP Header'е есть поле в котором говориться что внутри IP пакета лежит TCP пакет.
V>То же самое.

Это самая простая и логичная вещь, прописывать в заголовке формат payload данных. Используется в многих протоколах. К примеру, в том же HTTP за это отвечает header Content-Type.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.