Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ответ от сервера-фантома 
:(
    Опции темы
borisbn
Дата 15.12.2013, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Здравствуйте.
Имеется программа-клиент. Написана на Qt-сокетах. Её задача - подключиться к программе-серверу и слать ему сообщения по событию и по таймеру. Попытки подключения производятся всё время, пока оно не будет установлено. Также при запросе от сервера она должна ему ответить. Всё отлично работает, если программа-сервер запущена. Если же программа-сервер не запущена - начинаются чудеса: нерегулярно (иногда через час работы программы, иногда - через 10..15 минут) мне приходит сообщение, что есть подключение к серверу. А затем ко мне приходят те же пакеты, которые я на этот сервер отсылал. Т.е. получается некий loopback. Когда это возникает, я смотрел программой tcpview на предмет кто же это мог быть. tcpview показывает, что таки действительно есть некий процесс system, который является сервером, который "слушает" порт, на который стучалась моя программа.
Теперь, собственно вопрос (он, похоже из области фантастики, но всё же...): может ли система создать сервер для "бедолаги", которой никто не отвечает, и зациклить на неё её же сообщения?
Щаз перечитал - бред полный, но я уже готов поверить всему )))

Environment: Windows XP Prof (впрочем, такое наблюдалось и на других Windows - Win7, WinServer 2003), Qt 4.8.4, MinGW 4.8.0.

Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 15.12.2013, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 15.12.2013, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



borisbn, это происходит при разных номерах портов? SP все установлены?
PM MAIL   Вверх
GremlinProg
Дата 16.12.2013, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 1
Всего: 106



Четвертая мысль: если что-то сложное не работает, надо собрать из него что-то простое. Если что-то простое работает, значит нужно дальше аналогичным методом вычленять из оставшегося ошибку.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
borisbn
Дата 16.12.2013, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Спасибо всем откликнувшимся. Прошу прощения, что задержался - работы много...

Цитата(feodorv @  15.12.2013,  16:54 Найти цитируемый пост)
вирус. Но, скорее всего, нет...

Исключено. Чистая виртуалка
Цитата(feodorv @  15.12.2013,  16:54 Найти цитируемый пост)
фаервол или антивирус, которые так специфически определяют угрозу компьютеру. Возможно...

Исключено. Фаервол я абсолютно точно отключил, а антивирус и не ставил

Цитата(feodorv @  15.12.2013,  16:54 Найти цитируемый пост)
нужно точно установить, что это за процесс такой, который висит на серверном порту... (Номер порта не какой-нибудь особенный?) То есть с помощью разных утилит докопаться до имени и пути этого процесса. 

Номер порта 3333. Может, конечно, и особенный... Я хз.

Цитата(baldina @  15.12.2013,  18:38 Найти цитируемый пост)
borisbn, это происходит при разных номерах портов? SP все установлены? 

Хмммм... Сменил на 13335 - вроде не происходило такого. Буду ещё экспериментировать. SP стоит 2-й (т.е. не все).

До того, как я сменил номер порта, в то время, как я получал эти фантомные ответы, tcpview показывал для моего процесса в колонке Remote Address - localhost:3333, а в колонке Local Address - linesm-cuprl:3333. Что, в общем-то, тоже непонятно. Когда я сменил номер порта на 13335, картина стала такой
user posted image

Это сообщение отредактировал(а) borisbn - 16.12.2013, 19:41


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 17.12.2013, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Ситуация, конечно, несколько идиотская)))) Я тут ниже побурчу немножко, тоже по-идиотски)))


Цитата(borisbn @  15.12.2013,  13:23 Найти цитируемый пост)
мне приходит сообщение, что есть подключение к серверу

По картинке: пока соединения не видно, только запросы на соединение. И запросы идут на локальный хост - это правильно? Или запросы уходят на другой узел, а на картинке как раз странно написано "localhost"?


Цитата(borisbn @  15.12.2013,  13:23 Найти цитируемый пост)
Написана на Qt-сокетах.

Насколько Вы доверяете этим самым Qt-сокетам? Быть может, в их реализации присутствует какая-то ошибка. Если схему подключения тупо переписать на обычных сокетах (не думаю, что это сложная задача для тестовых целей), то возникнет ли подобная ситуация? Недоверие возникло потому что:
Цитата(borisbn @  15.12.2013,  13:23 Найти цитируемый пост)
впрочем, такое наблюдалось и на других Windows - Win7, WinServer 2003



Понаблюдайте за номерами исходящих портов, когда возникает незапланированное подключение. Возможно, какой-нибудь сетевой сервис в Windows так странно реагирует на ICMP-сообщение "Port Unreachable", если исходящий порт из какого-то "интересного" диапазона. Это бы объяснило:
Цитата(borisbn @  15.12.2013,  13:23 Найти цитируемый пост)
нерегулярно (иногда через час работы программы, иногда - через 10..15 минут)
так как значение исходящего порта меняется при каждой попытке подключения. Хотя, конечно, об этом уже было бы известно)))


Последняя зелёная строка совсем не понятна, fmt_ukv - это тоже Ваш процесс? Почему порт 20005? Почему несколько одновременных запросов на cоnnect от одной и той же программы? 


Проверьте конфигурацию сети, мало ли что. Проверьте сетевой трафик, что уходит, что приходит. Есть ли ICMP-ответ?




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
borisbn
Дата 17.12.2013, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
По картинке: пока соединения не видно, только запросы на соединение.

Это я протупил.. Сделал скриншот после изменения порта (читай после разрыва соединения. Кстати, "останки" этого соединения остались - первая строка на скрине).

Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
 И запросы идут на локальный хост - это правильно?

Да. Я пытаюсь соединиться с 127.0.0.1:3333

Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
Насколько Вы доверяете этим самым Qt-сокетам? Быть может, в их реализации присутствует какая-то ошибка. Если схему подключения тупо переписать на обычных сокетах (не думаю, что это сложная задача для тестовых целей), то возникнет ли подобная ситуация?

Самое интересное, что сначала я делал на обычных сокетах, а потом, когда начался этот идиотизм - переделал на Qt... Последнему, в общем-то, полного доверия нет, но как-то не верится, что там такая ошибка - зацикливание сообщений...
Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
Последняя зелёная строка совсем не понятна, fmt_ukv - это тоже Ваш процесс?

fmt_ukv - да. мой.
Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
Почему порт 20005?

Не знаю. Первое, что в голову пришло.
Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
Почему несколько одновременных запросов на cоnnect от одной и той же программы? 

Ну... такая логика программы. В общем, так нужно. А почему бы и нет ?

Ок... Беру таймаут и сделаю то, с чего нужно было начинать - напишу простенький тест и погоняю его. Хотя, всё равно не понятно... Боевая программа достаточно маленькая и простая...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 17.12.2013, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



borisbn, судя по скриншоту, все работает нормально: видны нормальные запросы на соединение, на которые пока никто не ответил.
System Process:0 это IdleProcess, в данном случае просто остатки соединения: соединение еще не закрыто (не было fin, таймаут еще не подошел), но процессов, его обслуживающих, уже нет.
Это не то что бы нормальная, но вполне объяснимая ситуация.

Добавлено через 21 секунду
вот кстати

Добавлено через 1 минуту и 19 секунд
Цитата(feodorv @  17.12.2013,  02:48 Найти цитируемый пост)
Возможно, какой-нибудь сетевой сервис в Windows так странно реагирует на ICMP-сообщение "Port Unreachable"

как-то слабо в это верится
PM MAIL   Вверх
borisbn
Дата 17.12.2013, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Цитата(baldina @  17.12.2013,  13:00 Найти цитируемый пост)
судя по скриншоту, все работает нормально

Цитата(borisbn @  17.12.2013,  09:28 Найти цитируемый пост)
Это я протупил.. Сделал скриншот после изменения порта (читай после разрыва соединения.

До разрыва соединения первая строчка была посередине, состояние было ESTABLISHED и процесс был не System, а мой.
Цитата(baldina @  17.12.2013,  13:00 Найти цитируемый пост)
вот кстати

Про "останки" соединения понял. Спасибо. Но это не объясняет, откуда оно вообще взялось...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 17.12.2013, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(borisbn @  17.12.2013,  13:13 Найти цитируемый пост)
ESTABLISHED и процесс был не System, а мой

а ваш процесс точно только запрашивает соединение?
PM MAIL   Вверх
borisbn
Дата 17.12.2013, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Цитата(baldina @  17.12.2013,  14:59 Найти цитируемый пост)
а ваш процесс точно только запрашивает соединение? 

Вообще-то - нет. Он ещё создаёт 2 сервера, но на портах 10009 и 20003. И уж точно эти серверы не разворачивают сообщения назад.
Я прошу прощения - у меня сейчас цейтнот на работе. Как будет поспокойнее - сделаю простенький тест и попробую повторить.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 18.12.2013, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(borisbn @  17.12.2013,  16:08 Найти цитируемый пост)
Он ещё создаёт 2 сервера

Периодически создаёт (то есть может ли иногда закрывать сокеты по каким-то своим причинам, а потом переоткрывать сокеты) или один раз вначале создаёт, и на этом всё?

Добавлено через 58 секунд
Цитата(baldina @  17.12.2013,  14:00 Найти цитируемый пост)
как-то слабо в это верится 

Ну да)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
borisbn
Дата 18.12.2013, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



> один раз вначале создаёт, и на этом всё
Ну... Как и положено серверу, при подключении клиента сокет создаётся автоматически и удаляется при разрыве соединения. В моём случае клиенты подключались один раз и больше не отключались. По каким-либо другим причинам/событиям сервер не пересоздаётся. 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 18.12.2013, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(borisbn @  18.12.2013,  07:51 Найти цитируемый пост)
Как и положено серверу, при подключении клиента сокет создаётся автоматически и удаляется при разрыве соединения.

Я имел в виду прослушивающий сокет  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
feodorv
Дата 18.12.2013, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(feodorv @  17.12.2013,  03:48 Найти цитируемый пост)
так как значение исходящего порта меняется при каждой попытке подключения.

Тут меня немного осенило. Не может ли возникать такая ситуация, когда номер исходящего порта клиентского сокета совпадает с номером серверного порта, на который устанавливается соединение? То есть порт 3333 на локальной машине свободен (сервер не запущен), в результате последовательной смены номера клиентского порта этот номер становится 3333; идёт запрос на соединение с этим же портом, у Виндовуса едет крыша, и он устанавливает соединение клиентского сокета с ним самим же под видом серверного сокета. В результате все данные, которые клиент посылает на сервер, принимаются этим же сокетом (как серверной стороной), но под видом ответа от сервера (так как сокет воспринимается клиентом как клиентский, а отнюдь не серверный)  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.