Модераторы: 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   Вверх
baldina
Дата 19.12.2013, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



гы. возможно. у windows динамические порты 1025-5000.
Код

netsh int ipv4 set dynamicport tcp start=<xxx> num=<yyy>

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


Эксперт
****


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

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



Цитата(feodorv @  18.12.2013,  21:44 Найти цитируемый пост)
Тут меня немного осенило

Да. Я тоже об этом думал. И это, кстати, подтверждается тем, что когда это фантомное соединение устанавливается, исходящий порт становится равным 3333. А то, что на 13335 я этого не видел, возможно, говорит о том, что я просто не дождался этой ситуации. Щаз попробую на каком-нибудь 1400, чтобы быстрее воспроизвести.

Цитата(baldina @  19.12.2013,  00:47 Найти цитируемый пост)
netsh int ipv4 set dynamicport tcp start=<xxx> num=<yyy>

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


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


Эксперт
****


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

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



Цитата(borisbn @  19.12.2013,  09:42 Найти цитируемый пост)
на 13335 я этого не видел

Так на 13335 можно и не увидеть, так как
Цитата(baldina @  19.12.2013,  01:47 Найти цитируемый пост)
у windows динамические порты 1025-5000

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


Цитата(borisbn @  19.12.2013,  09:42 Найти цитируемый пост)
Не очень понял, что это....

Что-то из этой области...


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


Эксперт
****


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

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



Цитата(borisbn @  19.12.2013,  08:42 Найти цитируемый пост)
Цитата(baldina @  19.12.2013,  00:47 )
netsh int ipv4 set dynamicport tcp start=<xxx> num=<yyy>
Не очень понял, что это....

это способ установить диапазон исходящих портов в win

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


Эксперт
****


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

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



Цитата(baldina @  19.12.2013,  10:31 Найти цитируемый пост)
это способ установить диапазон исходящих портов в win

Это я понял )) Кстати, я уже нарыл, что в XP это делается только через реестр. В netsh таких команд нет.
Ещё я вычитал, что в XP диапазон этих "эфемерных" портов - 1025...5000. Так что я могу спокойно уйти за этот диапазон и надеяться, что больше мне Windows """"помогать""" не будет ))


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


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

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



Порты то у Винды с 1025 динамические, да не очень.
Всего в 10 циферках от 3333 порта сидит 3343, который приписан к службе каталогов.
Кроме этого, по всему диапазону динамических портов распределяются под RPC (мне малоизвестным динамическим образом, в руководствах написано, что сначала идут запросы на три порта 12х, где постоянные службы перенаправляют уже на указанные порты). Можете уточнить у админа, диапазон портов "от 1045 до упора" админы могут ещё урезать c целью ограничить именно диапазон портов, разрешённых именно для RPC. Но, думаю, что здесь дело вообще в другом.
Порт 3333 стандартный динамический порт под Windows, который встречается во многих примерах "возьмём, например, 3333 порт, и ..". Вероятнее всего, что где-то на серваке стоит дыра в чьей-то программе или, ещё проще, чья-то программа раз в полчаса-час пробует юзать этот порт и тут вы встречаетесь.

Для большей точности надо отьюзать порт 3332 или 3331. Если картина не повторится, значит, надо ставить в известность админа, пусть сам разбирается, какая прога у него проявляет активность по порту 3333.


Это сообщение отредактировал(а) akizelokro - 6.1.2014, 16:20


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
akizelokro
Дата 7.1.2014, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

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



Притом, совершенно непонятно, почему в XP динамические порты только до 5000.
может, эта йцифра как "историческое наследие" ("шоб було" и "этапы большого пути"), а дальше лень всем стало кучу руководств переписывать?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
akizelokro
Дата 7.1.2014, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

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



Меня всегда мущали рассуждения, то в Винде XP порты от 1025, хотя я млин всегда считал что то ли от 1045, то ли от 1048


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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