Перейти к содержанию
    

мониторинг TCP-соединения

Раньше подобного не делал. Есть две задачи, которые нужно решить в одной программе. 1) Прием/передача данных по TCP при этом устройство и программа знают IP друг друга. 2) Программа мониторит общение устройства с другим компьютером. Устройство Server, программа Client. Есть ли возможность мониторить пакеты именно те, которые проходят непосредственно между устройством и другим компьютером программой работающей на третьем компьютере? Может можно как-то настроить сетевую карту? Да и как это все будет выглядеть в виде программного кода в VisualStudio201 C# пока не очень представляю. По идее эти две задачи можно разделить на две программы, наврядли обе эти функции понадобятся на одном компьютере одновременно. Вот и прошу помощи/подсказок. Готовые программы типа WireShark не подойдут, т.к. при мониторинге нужно правильно интерпретировать данные в пакете. Просто набор чисел не интересен. Нужен контроль телеметрии. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше подобного не делал. Есть две задачи, которые нужно решить в одной программе. 1) Прием/передача данных по TCP при этом устройство и программа знают IP друг друга. 2) Программа мониторит общение устройства с другим компьютером. Устройство Server, программа Client. Есть ли возможность мониторить пакеты именно те, которые проходят непосредственно между устройством и другим компьютером программой работающей на третьем компьютере? Может можно как-то настроить сетевую карту? Да и как это все будет выглядеть в виде программного кода в VisualStudio201 C# пока не очень представляю. По идее эти две задачи можно разделить на две программы, наврядли обе эти функции понадобятся на одном компьютере одновременно. Вот и прошу помощи/подсказок. Готовые программы типа WireShark не подойдут, т.к. при мониторинге нужно правильно интерпретировать данные в пакете. Просто набор чисел не интересен. Нужен контроль телеметрии. Спасибо.

Wireshark предоставляет не просто набор чисел. Эта программа "знает" множество стандартизированных протоколов, в т.ч. и телеметрии.

 

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Wireshark предоставляет не просто набор чисел. Эта программа "знает" множество стандартизированных протоколов, в т.ч. и телеметрии.

Ну вот скажем пришел пакет с 256 байтами. Мне нужно (например) первые три интерпретировать в число, два последующих разобрать так чтоб видеть какие флаги стоят. Еще другие числа показать и подписать. И т.д. Не уверен, что получится без самописного монитора. Да и сообщения хорошо бы в информационную строчку генерировать, логи вести нужные, а не все подряд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот скажем пришел пакет с 256 байтами. Мне нужно (например) первые три интерпретировать в число, два последующих разобрать так чтоб видеть какие флаги стоят. Еще другие числа показать и подписать. И т.д. Не уверен, что получится без самописного монитора. Да и сообщения хорошо бы в информационную строчку генерировать, логи вести нужные, а не все подряд.

конечно, для этого вам надо писать программу самому. я лищь замолвил свово за wireshark. В нём удобно разбирать пакеты стандартизированых протоколов, тестировать свои программы... вобщем удобный снифер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удобный, не спорю. Однако специфика диктует свои условия. Попутно вопрос, как в VisualStudio 2010 C# организовать прием/передачу буфера в (ну пусть 1024) байта. Порт и IP должны настраиваться т.к. могут меняться. С остальным, думаю разберусь для начала. Ну и в части мониторинга с третьего компьютера пока не ясно. Как это сделать, если это возможно? Сразу признаюсь, уровень опыта в этих делах маловат, но связь по UDP раз сделал. Не без помощи. Вот как оно в TCP?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще появсился вопрос. Вот если у меня 2 сетевые карточки. Одна смотрит в интернет, а вторая в прибор. Как мне сказать программе, что использовать нужно ту, которая смотрит в прибор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У них разные IP.

Это я понимаю. А програмно как это будет не знаю. Вот чтоб интернет не тормозил я менял приоритет. А можно ли как-то прямо в программе указать, что связь нужно производить только с указанной карточки? Раньше я видел, что IP подхватывался текущий. Теперь их два. Вот и интересует какими средствами я привязываю программу к нужной карточке? Собственно и про мониторинг пока ничего не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но связь по UDP раз сделал

Видать не делали. Есть такое понятие - сокет. Без него вы ничего не напишите. Надо изучать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

1) в протоколе TCP нет пакетов. это к сведению.

2) не важно в си бимоле или каком бэйсик - как правило везде напрямую или лёгкая оболочка над форточной реализацией сокета.

3) по поводу двух карточек... вы через апи енумерите набор каналов связи (это может быть какая нить сетевуха и через USB воткнута - как пример),

выбираете нужную. указываете при открытии-связывании сокета. далее как везде...

4) если по сети общаются две станции, то третья может и не услышать поток (не зависимо от локальных настроек). см. понятие маршрутиризатор...

5) помимо сетевых заморочек, и юая - вам потребуется разобраться с многопоточностью и синхронизацией.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Видать не делали. Есть такое понятие - сокет. Без него вы ничего не напишите. Надо изучать.

Про сокет тоже в курсе. Благо помогли увидеть как надо его открыть/закрыть и пользовать. В ТСР должно быть аналогично, но по нему опыта нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Как бы не пришлось еще его делать...

 

тут есть товарищ (читай господин) iosik - вот у него опыт по использованию многопортовых готовых решений.

частенько он приводит ссылку на свой ресурс в сети - думаю там можно подчерпнуть обзорного и наверное бОльшего плана инфу,

по таким вещам.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...