Форум программистов, компьютерный форум, киберфорум
Наши страницы
Бета-тестирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
1

NetWalker - инструмент для отладки сетевых приложений

16.10.2011, 16:16. Просмотров 4162. Ответов 17
Метки нет (Все метки)

В процессе изучения Qt решил написать такую небольшую программку, с помощью которой можно работать с сетью. Программа состоит из четырёх вкладок:

NetWalker - инструмент для отладки сетевых приложений

Работа с TCP - особая гордость Состоит из двух независимых частей - клиента и сервера. Для клиента можно указать IP адрес (имеется поддержка IPv4 и IPv6) и порт того компьютера, к которому хотите подключиться. У сервера указывается только порт... при этом он будет прослушивать этот порт на всех сетевых интерфейсах.
Ниже находится текстовое поле, в которое просто вводится сообщение.
Справа от него указывается, какой перевод строки использовать для сообщения: виндовый \r\n, юниксовый \n, маковский \r, извращённый \n\r или вообще не добавлять перенос строки.
Ещё правее указывается, в какой кодировке отправлять это сообщение.
Выше есть кнопка "Очистить", которая очищает текстовое поле от предыдущих сообщений (ваш К.О.).
Справа от этой кнопки указывается, в какой кодировке принимать входящие сообщения.
Среди кодировок есть вариант Hex... это означает, что данные будут отображаться в 16-ричном виде. Это очень удобно, если нужно работать с двоичными данными, которые в виде текста не получится ни прочитать, ни отправить.
Понимаю, что сделано немного запутанно, зато предоставляет гибкие возможности. Просто в сервере включите для прослушивания какой-нибудь свободный порт (например, 85), а в клиенте подключитесь к IP адресу 127.0.0.1 к тому же самому порту 85. И можно будет попробовать передавать и принимать сообщения в разных кодировках.

NetWalker - инструмент для отладки сетевых приложений

Работа с UDP - почти тоже самое, что и работа с TCP, тут сервер и клиент в одном целом. Для UDP можно явно указать локальный порт, от имени которого будут отправляться сообщения... этот же порт может их и принимать. Если его оставить нулём, то локальный порт будет выбираться автоматически. Так же в UDP нет подключений... сообщения просто отправляются безо всяких коннектов.

NetWalker - инструмент для отладки сетевых приложений

Поиск домена - поиск IP адреса по доменному имени и наоборот. Всё простенько и без наворотов. Пока даже нельзя указать другой DNS сервер... используется тот, который выберет операционная система.

NetWalker - инструмент для отладки сетевых приложений

Список соединений - показывает все текущие сетевые соединения Вашего компьютера с указанием приложения, которое держит это соединение. По сути дела, это тоже самого, что и утилита netstat. Эта вкладка работает только в виндовсе... для линукса пока не написал реализацию.


Хотелось бы узнать ваше мнение... нужна ли кому такая программа или нечего с ней возиться? Понадобится ли кому-нибудь поиск домена с указанием определённого DNS сервера? Имеет ли смысл писать реализацию "Список соединений" для линукса? Или может, посоветуете как сделать эту программу более удобной и функциональной?

Для тех, кто захочет скомпилировать программу под линукс (исходники тоже прилагаются), имейте ввиду, что в убунте из репозитариев устанавливается очень древний Qt... тут нужен, хотя бы, 4.7.0. Я писал под 4.7.4... но, теоретически, должно работать и под 4.8

Ниже приложены два архива: исходники (NetWalker_src.zip) и скомпилированная программа под Windows (NetWalker.zip). Установка не требуется.


------ 2016-04-06 ------

Добавил архив netwalker_src_20160406.rar ... изменения уже вспомнить не смогу, т.к. прошло уже 5 лет. Тут на скриншотах заметно, что нет поддержки SSL... теперь она добавлена. Было несколько исправлений ошибок. И теперь компилирую на Qt5. Qt4, вроде, тоже работает. Будет ли собираться под винду - не знаю... по идее, ничего сломаться не должно было, но проверить возможности не было. Проверял только в Линуксе на ядрах 3.13, 3.17 и 4.2.
16
Вложения
Тип файла: zip NetWalker_src.zip (358.4 Кб, 57 просмотров)
Тип файла: zip NetWalker.zip (5.69 Мб, 149 просмотров)
Тип файла: rar netwalker_src_20160406.rar (378.1 Кб, 19 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 16:16
Ответы с готовыми решениями:

Оптимальная IDE для отладки native C++ приложений
Посоветуйте, пожалуйста, оптимальную IDE для отладки native C++ приложений. Желательно...

Где все берут сервера для отладки клиент-серверных приложений?
Да, ребята, где? Вот чел написал прогу, я так понимаю же должен серверную часть закинуть на...

Посоветуйте ресурс/книгу для изучения сетевых приложений на perl
Добрый день. Поднадоело писать скрипты для каждодневных задач. Необходимо развиваться. Есть...

Как перестроить Visual Studio 2010 в режим построения приложений для работы (т е уйти из режима отладки )
Здравствуйте! Подскажите, пожалуйста, как перестроить Visual Studio 2010 (C#) в режим...

Найти исходники для книги "UNIX. Разработка сетевых приложений"
Привет. В книжке "UNIX. Разработка сетевых приложений" Стивенс написано, что исходники лежат на...

17
lolopolosko
1354 / 313 / 6
Регистрация: 21.11.2009
Сообщений: 992
16.10.2011, 17:18 2

Не по теме:

Интересная программа.
Сколько уже изучаешь Qt ?


Цитата Сообщение от Humanoid Посмотреть сообщение
Так же, хотелось бы узнать, будет ли работать список подключений в Windows 7 (а то есть некоторые сомнения).
Работает все отлично
1
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
16.10.2011, 17:30  [ТС] 3

Не по теме:

Цитата Сообщение от lolopolosko Посмотреть сообщение
Сколько уже изучаешь Qt ?
Точно не помню, но где-то с начала этого года. Просто времени не хватает и терпения... ленивый я очень :)



Цитата Сообщение от lolopolosko Посмотреть сообщение
Работает все отлично
Спасибо. А то я там несколько раз подбирал разные WinAPI... многие работают в XP, но не работают в Семёрке... другие наоборот. Похоже, что эти работают и там и там
0
Vourhey
Почетный модератор
6495 / 2270 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
17.10.2011, 12:27 4
Цитата Сообщение от Humanoid Посмотреть сообщение
Работа с TCP
Цитата Сообщение от Humanoid Посмотреть сообщение
Работа с UDP
Пользительная штука. Тоже такую набросал, когда нужно было тестировать свое сетевое приложение. Конечно, была заточена под это приложение. А тут все в одном и hex, и кодировки, спасибо. Приду домой - затещщу.

Добавлено через 2 часа 4 минуты
Не знаю, как насчет подключений и доменов, но идею работы с конекшнами, к примеру, можно развить. Можно сделать "мини-язык" для тестирования, чтобы можно было записать "если нам прислали то-то, отправить в ответ то-то, ждать ответа столько-то, если ответ такой-то (можно и регекспы сюда засунуть), отправить такие-то данные..." с логированием сообщений, временем ожидания и т. п.. Не знаю, насколько это востребовано, но для тестирования сетевого приложений было бы полезно, наверное...
1
Vourhey
Почетный модератор
6495 / 2270 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
30.10.2011, 16:12 5
Humanoid, при попытке выделения текста (там где посланные и принятые данные пишутся), при работе с соединениями падает на Win7 x64. Очень бы хотелось мочь выделить текст, а то иногда нужно отправлять ответ используя часть принятых данных.
1
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
30.10.2011, 17:42  [ТС] 6
Vourhey, сейчас попробовал на виртуальной машине запустил Win7 x64... не смог повторить. Это всегда происходит? Или после каких-то определённых действий? Сейчас попробую обновить семёрку... может, когда проявится.
0
Vourhey
Почетный модератор
6495 / 2270 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
30.10.2011, 18:10 7
Humanoid, хм...минутку, сейчас проверю...

Добавлено через 3 минуты
Да, происходит всегда, если зажимаю левую кнопку мыши над текстовым полем "клиент" и двигать ее начинаю.
Problem signature:
Problem Event Name: APPCRASH
Application Name: NetWalker.exe
Application Version: 0.0.0.0
Application Timestamp: 4e9abc1d
Fault Module Name: QtGui4.dll
Fault Module Version: 4.7.4.0
Fault Module Timestamp: 4e5523bc
Exception Code: c0000005
Exception Offset: 00212efe
OS Version: 6.1.7600.2.0.0.256.48
Locale ID: 1049
Unhandled exception at 0x65312efe in NetWalker.exe: 0xC0000005: Access violation reading location 0x04546af3.
Добавлено через 10 минут
Humanoid, попробуй вот так:
выбираем тсп, выставляем "без переноса" и UTF-16-LE у клиента и у сервера. И посылаем с клиента такую строчку, к примеру:
"sdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
после пылаем ее же обратно с сервера. Пробуем несколько раз мышкой выделить любой участок текста. После этих операций приложение падает, вроде как...
1
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
30.10.2011, 19:41  [ТС] 8
Во, получилось. Похоже, что когда отправляем в UTF-16LE, а принимаем в другой кодировке. Там должны получаться кракозябры, т.к. UTF-16 все символы двумя байтами кодируются... а они почему-то нормально отображаются... но при выделении происходит ошибка.
Интересно, что в WinXP всё правильно срабатывает: отображает кракозябры по две штуки и даёт их нормально выделить.
Но если отправлять в UTF-16 и принимать (выбор справа... над кнопкой "Отправить"... там где написано "входящие") тоже в UTF-16, то проблем нет. Как временное решение можно так делать... но надо будет поотлаживать.

Кстати, тут и по поводу скриптов пытался реализовать... но у меня в этом деле нет опыта. Пока получилось сделать рабочим такой скрипт:
Код
tcpserver.recived "GET / HTTP/1\.\d.\\r\\n\\r\\n"
  send "HTTP/1.1 200 OK\r\n"
  send "Connection: Close\r\n\r\n"
  send "This is html"
  close
end
Т.е. если TCP сервер получил пакет, который удовлетворяет регулярному выражению, то выполнять действия до "end". А действия простые... пока только send (отправить данные) и close (закрыть соединение). В общем, на мой взгляд, это полная ерунда получается. Без переменных, без циклов и т.п. оно вряд ли будет нужным.
0
Vourhey
Почетный модератор
6495 / 2270 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
30.10.2011, 21:40 9
Цитата Сообщение от Humanoid Посмотреть сообщение
Без переменных
без переменных да, без циклов, наверное, в большинстве случаев можно обойтись.
1
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
30.10.2011, 22:19 10
Цитата Сообщение от Humanoid Посмотреть сообщение
Пока даже нельзя указать другой DNS сервер... используется тот, который выберет операционная система.
Можно использовать глобальные сервера DNS гугла, наиболее достоверные якобы. Прога интерестная, будет время - отпишу очучения
1
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
30.10.2011, 22:46  [ТС] 11
Цитата Сообщение от Vourhey Посмотреть сообщение
без переменных да, без циклов, наверное, в большинстве случаев можно обойтись.
Когда будет свободное время, надо будет помедитировать на эту тему. Была когда-то мысля как переменные реализовать... но тогда решил, что ещё рано о них думать и прогнал эту мыслю

Вот, вроде исправил ту ошибку. Оказалось, что Win7 не дружит с нулевыми символами. В WinXP нулевые символы отображаются как квадратики, а Win7 их просто игнорирует. И, видимо, на это ещё накладываются всякие навороты из Qt, из-за чего в конечном итоге происходил глюк. В общем, теперь нулевые символы просто заменяю на вопросительные знаки. Первый пост пока не буду трогать... кто использует исходники, то почти в самом конце функции MainWindow::ReadData() просто исправьте
C++
1
TextEdit->insertPlainText(coder->toUnicode(buf));
на
C++
1
TextEdit->insertPlainText(coder->toUnicode(buf).replace('\0','?'));
Выкладываю только exe'шник... остальные библиотеки нужны из первого поста. Они остались те же самые.

Цитата Сообщение от Alligieri Посмотреть сообщение
Можно использовать глобальные сервера DNS гугла, наиболее достоверные якобы.
Сейчас используется системная функция определения IP адреса. Т.е. ОС сама решает, будет ли она обращаться к DNS, возьмёт ли значение из кеша или из файла hosts. А была мысль просто отправлять запрос к любому DNS серверу, какой укажет пользователь... и тогда отображать именно ответ этого сервера.
0
Vourhey
Почетный модератор
6495 / 2270 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
31.10.2011, 10:32 12
Humanoid, под переменными можно сделать, например, как в перле...типа:
(\w+);(\d+)
и в переменные $1 и $2 попадают, соответственно, из первой скобки и второй, и их можно вставить в ответ...

Добавлено через 2 минуты
Цитата Сообщение от Humanoid Посмотреть сообщение
Вот, вроде исправил ту ошибку.
Данке шон, вечером гляну
0
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
01.03.2012, 16:38  [ТС] 13
Обновил. Добавлены простенькие скрипты, которые позволяют автоматически реагировать при приёме определённых данных. Написал небольшое описание, как пользоваться (в папке doc). Например, скрипт
Код
tcpserver.recived "GET (\S+) HTTP\/1\.[0|1].+(User-Agent\: ([^\r\n]+))?.*\r\n\r\n"i
	print "HTTP сервер...\n"
	send "HTTP/1.1 200 OK\r\n"
	send "Content-Type: text/html; charset=utf-8\r\n"
	send "Connection: Close\r\n"
	send "Server: NoServer\r\n\r\n"
	send "<!DOCTYPE html><html><head><title></title></head><body><h3>Скрипт работает</h3><br />\r\nВы запросили страницу <b>"
	send %1
	send "</b><br />\r\nИ используете браузер: <b>"
	send %3
	send "</b><br />\r\n"
	send "Полный вид заголовков:<br />\r\n<pre style=\"border: solid 1px gray;\">"
	send %0
	send "</pre></body></html>"
	close
	print "\nСкрипт завершён\n"
end
Сработает вот так:
2
Миниатюры
NetWalker - инструмент для отладки сетевых приложений  
dodler
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 10
15.03.2015, 17:33 14
отличная программулина, часто пользуюсь)
нажал спасибо
0
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
15.03.2015, 20:31  [ТС] 15
dodler, надо же... не ожидал, что кто-то использует. Спасибо за отзыв... очень приятно
Тогда сегодня-завтра постараюсь проверить работоспособность под виндой и выложу версию, где добавлена вкладка со списком соединений (что-то вроде команды netstat). Только там я начал использовать Qt5, а она тянет за собой больше dll'ок. Хотя, может получится собрать с Qt4... не проверял совместимость.
0
sharukan
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 1
06.04.2016, 11:34 16
Отличная штука для отладки своих сетевых приложений, автору респект за подарок кода, сэкономило кучу времени.
PS: а чем пользуются профессионалы если нужен терминал TCP, неужели все свои пишут? Не нашел готовых решений.
0
Humanoid
Почетный модератор
10009 / 3892 / 350
Регистрация: 12.06.2008
Сообщений: 11,437
06.04.2016, 21:13  [ТС] 17
Цитата Сообщение от sharukan Посмотреть сообщение
а чем пользуются профессионалы если нужен терминал TCP, неужели все свои пишут? Не нашел готовых решений.
Когда-то давно ещё на винде была Essential Net Tools (или какое-то похожее название). Но она была изначально платная и возможности были очень простые. Каких-то стандартных и бесплатных программ такого типа не знаю.

Уже несколько раз обещал обновить, но каждый раз забывал. Выкладываю исходник. VirtualBox почему-то не запускается после обновления, поэтому собрать и проверить под виндой не могу. В первом сообщении добавлен архив netwalker_src_20160406.rar
Если кто-нибудь будет собрать под винду, то, пожалуйста, сообщите о результатах.
0
BastionDev
0 / 0 / 0
Регистрация: 25.10.2017
Сообщений: 1
25.10.2017, 18:51 18
Искал утилиту для отладки сокетов. Отлично работает, писать с нуля не хотелось, сэкономил время. Большой респект!
0
25.10.2017, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2017, 18:51

Построение сетевых приложений
Всем привет. Недавно задался вопросом. Как же верно строить приложения. Допустим наш клиент...

Программирование сетевых приложений
Очень хочу научиться писать нормальные клиент-сервера программы для linux на c++. Читал про сокеты...

Программирование сетевых приложений
Добрый день, уважаемые форумчани! Ищу людей которые разрабатывали сетевые приложения под Windows....


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru