Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 2 / 1
Регистрация: 06.05.2011
Сообщений: 126

Использование UdpClient для отправки широковещательного пакета

26.06.2014, 19:59. Показов 3001. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приложение отправляет широковещательный пакет с помощью UdpClient.
Для этого инициализируется объект UdpClient, устанавливается порт и широковещательный адрес,
как показано в приведенном примере :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
................
using System.Net;
using System.Net.Sockets;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private IPEndPoint BroadcastEndPoint;
        private UdpClient udpClient;
        private int Port;
        byte[] Data = new byte[20];
 
        public Form1()
        {
            InitializeComponent();
 
            Port = 9090;
            // 10.0.10.225 (0a.00.0a.e1)
            IPAddress Address = new IPAddress(0xe10a000a);
            BroadcastEndPoint = new IPEndPoint(Address, Port);
            udpClient = new UdpClient(Port);
            udpClient.EnableBroadcast = true;
            udpClient.Client.SendTimeout = 100;
            udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Data[0] = 0x07;
            Data[1] = 0x08;
            Data[2] = 0x09;
            Data[3] = 0x0a;
            Data[4] = 0x0b;
            Data[5] = 0x0c;
            Data[6] = 0x0d;
            Data[7] = 0x0e;
            Data[8] = 0x0f;
            Data[9] = 0x10;
            Data[10] = 0x11;
            Data[11] = 0x12;
            Data[12] = 0x13;
            Data[13] = 0x14;
            Data[14] = 0x15;
            Data[15] = 0x16;
            Data[16] = 0x17;
            Data[17] = 0x18;
            Data[18] = 0x19;
            Data[19] = 0x1A;
 
            try
            {
                int r = udpClient.Send(Data, Data.Length, BroadcastEndPoint);
            }
            catch (Exception ex)
            { 
                string s = ex.Message;
            }
        }
    }
}
После этого приложение запускается и нажатием кнопки button1 вызываются посылки udpClient.Send()
широковещательных пакетов.

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

No Time Source Destination Protocol Length Info
-------------------------------------------------------------------------------------
...................... Broadcast ARP 42 Who was 10.0.10.225? Tell 10.0.10.7

И для них развернуто :

[+]->Frame
[+]->Ethernet
[+]->Address Resolution Protocol

Но секции [+]->Data здесь нет. Только 42 байтные заголовки. Что это может значить?
Может быть Wireshark так и должен работать и просто не отображает в подобных случаях
часть с данными или действительно пакет не пришел правильно? Или ошибка в передающей части программы (см. приведенный код)?

Отладчик в передающей части программы после прохождения строки

int r = udpClient.Send(Data, Data.Length, BroadcastEndPoint);

показывает, что 20 байт данных переданы, функция завершена успешно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2014, 19:59
Ответы с готовыми решениями:

создание SYN-пакета (любого) для отправки на несуществующие айпишники сети
суть вопроса такова: я пишу утилитку для выявления снифферков в сети локальной. один из тестов, который включил туда, основан на...

UdpClient + loopback interface. При создании UdpClient вываливатся SocketException
Вкратце. Делаю эмулятор сети. Создал через код в подключения Адаптер замыкания самого себя(Loopback adapter). Через netsh создаю 5...

Клиент-серверное приложение с использование классов UdpClient и multicast
Здравствуйте! Возможно ли создать подобие чата между клиентом и сервером, используя класс UdpClient и multicast? То есть сервер должен...

2
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
27.06.2014, 10:22
Примените фильтр для wireshark : ip.addr==broadcast, где broadcast = широковещательный адрес ващей сети.

Добавлено через 15 минут
Секции дата не должно быть

Добавлено через 1 минуту
Вы видите перехваченный пакет для ARp-запроса, ARP запросы формируются и обрабатываются операционной системой.
Во-первых надо фильтровать по UDP, а во вторых, как я написал выше, т.е. результирующий фильтр для wireshark будет
udp && ip.addr==broadcast

Добавлено через 4 минуты
и вот тут поправьте на всякий случай

C#
1
2
          IPAddress Address = new IPAddress(0xe10a000a);
            BroadcastEndPoint = new IPEndPoint(Address, Port);
на

C#
1
            BroadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);
0
2 / 2 / 1
Регистрация: 06.05.2011
Сообщений: 126
27.06.2014, 19:56  [ТС]
Но ведь если не приходят посланные UDP пакеты, то разве может установка фильтров для Wireshark привести к тому, что они появятся? Нет, конечно. Так что установка указанных фильтров не помогает. С другой стороны замена

C#
1
2
IPAddress Address = new IPAddress(0xe10a000a);
BroadcastEndPoint = new IPEndPoint(Address, Port);
на
C#
1
BroadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);
будет означать, что BroadcastEndPoint станет 255.255.255.255 - а нужно-то 10.0.10.225, поэтому такую замену
делать нельзя. Но пусть это все так - все равно не видно в wireshark ни одного UDP пакета.
Слышал, что может быть как-то влияет Касперский на все это? Тем не менее и в системе, где антивирусов нет,
то же самое. Или может быть нельзя принимать пакеты на том же компьютере, который их отправляет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2014, 19:56
Помогаю со студенческими работами здесь

Проблема с UdpClient (разрешается только одно использование адреса сокета)
Есть приложение, которое отсылает содержимое файла на указанный порт: using (UdpClient server = new UdpClient(port)) ...

Посылка широковещательного UDP пакета в LINUX-e
Что не так? sendto вернул значение 5, т.е. 5-ть байт было отослано на 255.255.255.255 А вот пакеты не отсылается. Сниффером этот пакет...

Использование Log4j для отправки сообщений по почте
Здравствуйте, Кто-нибудь смог настроить log4j (в паре с Tomcat) для отсылки сообщений об ошибках по почте? Использую такую...

Использование Flask для отправки регистрационного email'а
Добрый день. пишу подтверждение регистрации и столкнулся с небольшой проблемой. вот вырезка конфигурации отвечающая за отправку на...

Использование mmap() для получения/отправки через сокет
Есть сокет fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) Предполагается сделать setsockopt с параметрами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru