Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: мониторинг TCP-соединения
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
smk
Раньше подобного не делал. Есть две задачи, которые нужно решить в одной программе. 1) Прием/передача данных по TCP при этом устройство и программа знают IP друг друга. 2) Программа мониторит общение устройства с другим компьютером. Устройство Server, программа Client. Есть ли возможность мониторить пакеты именно те, которые проходят непосредственно между устройством и другим компьютером программой работающей на третьем компьютере? Может можно как-то настроить сетевую карту? Да и как это все будет выглядеть в виде программного кода в VisualStudio201 C# пока не очень представляю. По идее эти две задачи можно разделить на две программы, наврядли обе эти функции понадобятся на одном компьютере одновременно. Вот и прошу помощи/подсказок. Готовые программы типа WireShark не подойдут, т.к. при мониторинге нужно правильно интерпретировать данные в пакете. Просто набор чисел не интересен. Нужен контроль телеметрии. Спасибо.
megajohn
думаю, что нужно читать API на winpcap
Dubov
Цитата(smk @ Apr 23 2014, 10:42) *
Раньше подобного не делал. Есть две задачи, которые нужно решить в одной программе. 1) Прием/передача данных по TCP при этом устройство и программа знают IP друг друга. 2) Программа мониторит общение устройства с другим компьютером. Устройство Server, программа Client. Есть ли возможность мониторить пакеты именно те, которые проходят непосредственно между устройством и другим компьютером программой работающей на третьем компьютере? Может можно как-то настроить сетевую карту? Да и как это все будет выглядеть в виде программного кода в VisualStudio201 C# пока не очень представляю. По идее эти две задачи можно разделить на две программы, наврядли обе эти функции понадобятся на одном компьютере одновременно. Вот и прошу помощи/подсказок. Готовые программы типа WireShark не подойдут, т.к. при мониторинге нужно правильно интерпретировать данные в пакете. Просто набор чисел не интересен. Нужен контроль телеметрии. Спасибо.

Wireshark предоставляет не просто набор чисел. Эта программа "знает" множество стандартизированных протоколов, в т.ч. и телеметрии.
smk
Цитата(Dubov @ Apr 23 2014, 10:14) *
Wireshark предоставляет не просто набор чисел. Эта программа "знает" множество стандартизированных протоколов, в т.ч. и телеметрии.

Ну вот скажем пришел пакет с 256 байтами. Мне нужно (например) первые три интерпретировать в число, два последующих разобрать так чтоб видеть какие флаги стоят. Еще другие числа показать и подписать. И т.д. Не уверен, что получится без самописного монитора. Да и сообщения хорошо бы в информационную строчку генерировать, логи вести нужные, а не все подряд.
Dubov
Цитата(smk @ Apr 23 2014, 11:33) *
Ну вот скажем пришел пакет с 256 байтами. Мне нужно (например) первые три интерпретировать в число, два последующих разобрать так чтоб видеть какие флаги стоят. Еще другие числа показать и подписать. И т.д. Не уверен, что получится без самописного монитора. Да и сообщения хорошо бы в информационную строчку генерировать, логи вести нужные, а не все подряд.

конечно, для этого вам надо писать программу самому. я лищь замолвил свово за wireshark. В нём удобно разбирать пакеты стандартизированых протоколов, тестировать свои программы... вобщем удобный снифер
smk
Удобный, не спорю. Однако специфика диктует свои условия. Попутно вопрос, как в VisualStudio 2010 C# организовать прием/передачу буфера в (ну пусть 1024) байта. Порт и IP должны настраиваться т.к. могут меняться. С остальным, думаю разберусь для начала. Ну и в части мониторинга с третьего компьютера пока не ясно. Как это сделать, если это возможно? Сразу признаюсь, уровень опыта в этих делах маловат, но связь по UDP раз сделал. Не без помощи. Вот как оно в TCP?
smk
Еще появсился вопрос. Вот если у меня 2 сетевые карточки. Одна смотрит в интернет, а вторая в прибор. Как мне сказать программе, что использовать нужно ту, которая смотрит в прибор?
DpInRock
У них разные IP.
smk
Цитата(DpInRock @ Apr 23 2014, 14:05) *
У них разные IP.

Это я понимаю. А програмно как это будет не знаю. Вот чтоб интернет не тормозил я менял приоритет. А можно ли как-то прямо в программе указать, что связь нужно производить только с указанной карточки? Раньше я видел, что IP подхватывался текущий. Теперь их два. Вот и интересует какими средствами я привязываю программу к нужной карточке? Собственно и про мониторинг пока ничего не понятно.
tdocs.su
Схожую историю обсуждаем сейчас здесь - http://electronix.ru/forum/index.php?showtopic=120469 Вернее, решение задачки схожее. Любой снифер, разбирающий пакеты, строится на основе конечного автомата. Иначе никак.

В VisualStudio наверняка полно соотвествующих исходных модулей с готовым кодом различных "сетевых" структур пакетов. По их подобию можно создавать свои структуры, чтобы проще было разбирать то, что сваливается в буфер (передается поверх самого TCP).

ЗЫ. Коммуникационные задачки, конечно, кашмар кашмарный sm.gif Тут только конечный автомат... А строиться он должен на основе RFC 1180. Можно, кстати, поискать в сети исходники снифферов, должно помочь.
DpInRock
Цитата
но связь по UDP раз сделал

Видать не делали. Есть такое понятие - сокет. Без него вы ничего не напишите. Надо изучать.
kolobok0
Цитата(smk @ Apr 23 2014, 14:57) *
..Как мне сказать программе, что использовать нужно ту, которая смотрит в прибор?


1) в протоколе TCP нет пакетов. это к сведению.
2) не важно в си бимоле или каком бэйсик - как правило везде напрямую или лёгкая оболочка над форточной реализацией сокета.
3) по поводу двух карточек... вы через апи енумерите набор каналов связи (это может быть какая нить сетевуха и через USB воткнута - как пример),
выбираете нужную. указываете при открытии-связывании сокета. далее как везде...
4) если по сети общаются две станции, то третья может и не услышать поток (не зависимо от локальных настроек). см. понятие маршрутиризатор...
5) помимо сетевых заморочек, и юая - вам потребуется разобраться с многопоточностью и синхронизацией.



smk
Про маршрутизацию в курсе. Нужен концентратор. Глянул на цены - не понравилось. Как бы не пришлось еще его делать...

Цитата(DpInRock @ Apr 23 2014, 21:45) *
Видать не делали. Есть такое понятие - сокет. Без него вы ничего не напишите. Надо изучать.

Про сокет тоже в курсе. Благо помогли увидеть как надо его открыть/закрыть и пользовать. В ТСР должно быть аналогично, но по нему опыта нет.
kolobok0
Цитата(smk @ Apr 24 2014, 12:36) *
...Как бы не пришлось еще его делать...


тут есть товарищ (читай господин) iosik - вот у него опыт по использованию многопортовых готовых решений.
частенько он приводит ссылку на свой ресурс в сети - думаю там можно подчерпнуть обзорного и наверное бОльшего плана инфу,
по таким вещам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.