Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 16

Поиск ip адресов, на которых запущена определенная программа

28.07.2015, 12:40. Показов 2950. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Необходимо написать программу, которая просканирует локальную сеть, опередит, на каком компьютере запущен процесс (допустим word.exe) и в диалоговом окне выведет на печать ip этих компьютеров.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2015, 12:40
Ответы с готовыми решениями:

Выполнять какое то действие пока запущена определённая программа
Всем доброго времени суток. Мне как-то нужно знать что запущена программа MediaGet. Я пытался зделать так: HWND hWnd; ...

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

Нужно на листе найти ячейки в которых находиться определенная строка
Извините за простой вопрос.Нужно на листе найти ячейки в которых находиться определенная строка, к примеру 'ИТОГ'.Начинаю просматривать...

8
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
28.07.2015, 16:50
Цитата Сообщение от Motor_Z Посмотреть сообщение
допустим word.exe
допустим ворд ехе никак не реагирует на запросы из сети - как вы собираетесь проверять запущен ли он?
0
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 16
28.07.2015, 17:29  [ТС]
хорошо. Разобьем задачу на составляющие. Как отправить широковещательный запрос с использованием broadcast и и получить в ответ ip адреса включенных в сеть компьютеров?
0
Заблокирован
29.07.2015, 09:02
На компах клиента стоит некая прога которая раз в н секунд мониторит выдачу диспетчера задач. Сервер спрашивает у каждого клиента по очереди список той проги (прога отвечает на запросы). И на основании списка дает ответ. По другому никак.
0
0 / 0 / 0
Регистрация: 29.07.2015
Сообщений: 1
29.07.2015, 22:03
Что-то на подобии вируса-шпиона))
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
30.07.2015, 00:05
Цитата Сообщение от Motor_Z Посмотреть сообщение
Как отправить широковещательный запрос с использованием broadcast и и получить в ответ ip адреса включенных в сеть компьютеров?
Вся программа тысяча строк, в топик не войдёт, размещаю пару функций, остальное в пакете.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
// Shvonscan.cpp
//
// Эта программа сканирует указанный диапазон IP адресов.
// При обнаружении цели - любого компьютера в сети,
// выдаёт такие данные, как: имя компьютера, доступные,
// открытые ресурсы и некоторую другую информацию.
//
 
#include "Shvonscan.h"
 
DWORD GStartIP;
DWORD GEndIP;
BOOL GRand;
DWORD GLocalIP;
DWORD GDelay = 100;
WORD GLocalPort = MAGICPORT;
WORD GDestPort = MAGICPORT;
WORD GPacketID = 1;
int GRetry = 3;
DWORD GBroadcastIP = INADDR_BROADCAST;
DWORD GNetmask;
char* GFoundFilename;
char* GLogFilename;
unsigned char GHexvals[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
 
 
void __cdecl EntryThread(void* parg)
{
    SOCKET udpsock = *((SOCKET*)parg);
    DWORD CurrentIP = GStartIP;
    unsigned char outbuff[1024];
    char checkips[256];
    int x;
    char zeroblock[256];
    memset(zeroblock,0,sizeof(zeroblock));
    DWORD d = OnFormPacket(outbuff);
    SOCKADDR_IN sockaddr;
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(GDestPort);
    while( ntohl(CurrentIP) <= ntohl(GEndIP) )
    {
        memset(checkips,1,sizeof(checkips));
        if( (ntohl(GStartIP) & 0xFFFFFF00) == (ntohl(CurrentIP) & 0xFFFFFF00) ) 
            for (x = 0; x < (int)((ntohl(GStartIP) & 0x000000FF)); ++x)
                checkips[x] = 0;
 
        if( (ntohl(GEndIP) & 0xFFFFFF00) == (ntohl(CurrentIP) & 0xFFFFFF00) )
            for( x = (ntohl(GEndIP) & 0x000000FF) + 1; x < sizeof(checkips); ++x )
                checkips[x] = 0;
 
        while( memcmp(checkips,zeroblock,sizeof(checkips))!=0 )
        {
            x = 0;
            if( GRand ) {// Сканировать в случайном порядке ?
                x = rand()%sizeof(checkips);
                while (checkips[x] == 0)
                    x = rand()%sizeof(checkips);
            } else {
                for( x = 0; checkips[x] == 0 && x < sizeof(checkips); ++x );
            }
            checkips[x] = 0;
            sockaddr.sin_addr.s_addr = htonl((ntohl(CurrentIP)&0xFFFFFF00) | x);
            int nRetry = 0;
            while( nRetry < GRetry && Send(udpsock,(const char*)outbuff, d, &sockaddr )==SOCKET_ERROR ) {
                ++nRetry;
                fprintf(stdout,"Error %u sending to %s, Resending...\n",WSAGetLastError(),inet_ntoa(sockaddr.sin_addr));
                Sleep(500);
            }
            if( GDelay )// Задержка при отправке пакета.
                Sleep(GDelay);
        }
        CurrentIP = htonl((ntohl(CurrentIP) & 0xFFFFFF00) + 0x00000100); // increment IP by 1 class C
    }
    fprintf(stdout,"*** Scan done\n");
    GEndIP = 0;
    fflush(stderr);
    fflush(stdout);
    _endthread();
}
 
 
int main(int argc, char* argv[])
{
    int x;
    for( x=1; x<argc; ++x )
    {
        if( argv[x][0]=='-' )
        {
            // Указать способ сканирования (необязательно).
            if( _stricmp(argv[x],"-RAND")==0 )
                GRand = TRUE;
 
            // Подсказка, пример запроса.
            else if( _stricmp(argv[x], "-EXAMPLES")==0 ) {
                Examples();
            }
 
            // Указать определённый IP интерфейс (необязательно).
            else if( _stricmp(argv[x],"-LOCALIP")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -LOCALIP\n");
                    Usage();
                }
                ++x;
                GLocalIP=inet_addr(argv[x]);
                if( GLocalIP==INADDR_NONE ) {
                    fprintf(stdout,"Bad IP: \"%s\"\n", argv[x]);
                    Usage();
                }
            }
            
            // Указать локальный порт для приёма данных (необязательно).
            // Полезно, если порт (по умолчанию 137) используется.
            else if( _stricmp(argv[x],"-PORT")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -PORT\n");
                    Usage();
                }
                ++x;
                GLocalPort = atoi(argv[x]);
            }
            // Указать удаленный порт опроса системы (необязательно).
            // Полезно, использовать отличный по умолчанию 137,
            // в некоторых случаях можно попробовать 139.
            else if( _stricmp(argv[x],"-DESTPORT")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -DESTPORT\n");
                    Usage();
                }
                ++x;
                GDestPort = atoi(argv[x]);
            }
 
            // Указать диапазон адресов (требуется).
            // ( пример: 127.0.0.1 127.0.2.255 )
            else if( _stricmp(argv[x],"-RANGE")==0 ) {
                if( x > argc - 3 ) {
                    fprintf(stdout,"Missing argument for -RANGE\n");
                    Usage();
                }               
                ++x;
                // Начальный IP-адрес.
                GStartIP=inet_addr(argv[x]);
                if( GStartIP==INADDR_NONE ) {
                    fprintf(stdout,"Bad IP: \"%s\"\n",argv[x]);
                    Usage();
                }
                ++x;
                // Конечный IP-адрес.
                GEndIP=inet_addr(argv[x]);
                if( GEndIP==INADDR_NONE) {
                    fprintf(stdout,"Bad IP: \"%s\"\n",argv[x]);
                    Usage();
                }
            }
 
            // Задержка при отправке пакета (необязательно).
            // По умолчанию 100 миллисекунд.
            else if( _stricmp(argv[x],"-DELAY")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -DELAY\n");
                    Usage();
                }
                ++x;
                GDelay = atoi(argv[x]);
            }
 
            // Число раз повторов, отправки пакета,
            // при неудачной отправки пакета (необязательно).
            // По умолчанию, три попытки.
            else if( _stricmp(argv[x],"-RETRY")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -RETRY\n");
                    Usage();
                }
                ++x;
                GRetry = atoi(argv[x]);
            }
 
            // Записывать все полученные данные в файл (необязательно).
            else if( _stricmp(argv[x],"-LOG")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -LOG\n");
                    Usage();
                }
                ++x;
                GLogFilename = argv[x];
            }
 
            // Записывать имена найденых серверов в файл (необязательно).
            else if( _stricmp(argv[x],"-FOUND")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -FOUND\n");
                    Usage();
                }
                ++x;
                GFoundFilename = argv[x];
            }
 
            // Указать широковещательную маску подсети (необязательно).
            else if( _stricmp(argv[x],"-BCASTIP")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -BCASTIP\n");
                    Usage();
                }
                ++x;
                GBroadcastIP=inet_addr(argv[x]);
                if( GBroadcastIP==INADDR_NONE ) {
                    fprintf(stdout,"Bad IP: \"%s\"\n",argv[x]);
                    Usage();
                }
 
            }
 
            // Указать маску подсети (необязательно).
            else if( _stricmp(argv[x],"-NETMASK")==0 ) {
                if( x > argc - 2 ) {
                    fprintf(stdout,"Missing argument for -NETMASK\n");
                    Usage();
                }
                ++x;
                GNetmask = inet_addr(argv[x]);
                if( GNetmask==INADDR_NONE ) {
                    fprintf(stdout,"Bad IP: \"%s\"\n",argv[x]);
                    Usage();
                }
 
            // Прочее.
            } else if( _stricmp(argv[x],"-?")==0 || _stricmp(argv[x],"-HELP")==0 ) {
                if( x > argc - 2 ) Usage();
            } else {
                fprintf(stdout,"Bad option: \"%s\"\n",argv[x]);
                Usage();
            }
        } else {
            fprintf(stdout,"Bad argument: \"%s\"\n",argv[x]);
            Usage();
        }
    }
 
    if( InitWinsock() ) {
        fprintf(stdout,"Cannot start WinSock\n");
        return 1;
    }
    
    srand(GetTickCount());
    StartScan();
    WSACleanup();
    system("pause");
    return 0;
}
Shvonscan.zip
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
30.07.2015, 06:22
Цитата Сообщение от Shvonder Посмотреть сообщение
ntohl(CurrentIP) <= ntohl(GEndIP)
Можно же просто сравнить, зачем ещё дополнительно байты двигать?
Вообще есть такая утилита nmap. Легка в освоении, очень мощная. Я так "клад" нашёл.

Добавлено через 3 минуты
Цитата Сообщение от askurandrio Посмотреть сообщение
На компах клиента стоит некая прога которая раз в н секунд мониторит выдачу диспетчера задач. Сервер спрашивает у каждого клиента по очереди список той проги (прога отвечает на запросы). И на основании списка дает ответ. По другому никак.
Надо мониторить не выдачу, а запуск и остановку процессов. Для снижения нагрузки на сеть можно параметризовать запрос именем интересующего процесса.
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
30.07.2015, 10:33
Цитата Сообщение от Enno Посмотреть сообщение
Можно же просто сравнить, зачем ещё дополнительно байты двигать?
Это демо, урезанная часть, работа по поиску как вы говорите "клад" не раскрыта, незачем это здесь, да и не ищу их уже давно, с тех пор когда узнал про Legion первой версии из журнала Компьютерра за 1998 год.
0
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 16
30.07.2015, 15:32  [ТС]
Всем спасибо за ответы) Было принято решение отправить широковещательный запрос от клиента. С Сервера же отправить в ответ свой ip клиенту)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2015, 15:32
Помогаю со студенческими работами здесь

Запущена ли программа
Я не хочу дать пользователю запустить ещё одну мою программу если она уже запущенна

запущена ли программа
как определить запущена ли программа (например calc.exe) по окну или через процессы

Проверить, запущена ли программа
Такая ситуация у меня свой сервер на нем стоит программа, и она по каким то причинам сама закрывается каждые 2 часа. Как проверить...

Откуда запущена программа
Доброго времени суток. подскажите пожалуйста как узнать рабочую директорию программу, т.е. папку из которой программа запущена? ...

Запущена ли программа в сети
Добрый вечер. Допустим, есть одна программа. Можно ли как-то определить, запущены ли другие её копии в сети?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru