Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/46: Рейтинг темы: голосов - 46, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18

Драйвер LLDP для Windows XP

09.07.2010, 07:16. Показов 9615. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста алгоритм написания драйвера по сабжу.
Суть вопроса отправки пакетов в сеть с определенным временным интервалом. Опыта написания драйверов нет, но есть острая необходимость. Буду признателен за любую информацию.
С протоколом LLDP знаком (структура пакета и т.д.)
Писаться будет на С (DDK).

Добавлено через 21 час 31 минуту
Все, разобрался. Вопрос снимается. Тему можно закрыть.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2010, 07:16
Ответы с готовыми решениями:

Программа / драйвер для сжатия оперативной памяти в Windows XP (Windows NT 5.X)
Требуется софтовое сжатие (именно сжатие, а не дефрагментация, упорядочивание, опрос программ о количестве памяти, которая им не нужна) для...

Ищу драйвер для HP LaserJet 1200 Series PCL для Windows 7
Подскажите пожалуйста где можно найти драйвер для HP LaserJet 1200 Series PCL для Windows 7

Драйвер для Windows 7
Я все же решил обновится до Win 7.Я все делаю основательно,и поэтому я скачал советник по переходу и все проверил.Мне не хватает дров на...

36
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
11.08.2010, 15:14
Студворк — интернет-сервис помощи студентам
Спасибо большое! Сейчас попробую
1
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
11.08.2010, 15:27  [ТС]
Цитата Сообщение от Sht1rlitz Посмотреть сообщение
Спасибо большое! Сейчас попробую
Да не за что...))))
Чем богаты - тем и рады...)))
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
11.08.2010, 15:49  [ТС]
Вот тут видно, что пакет и данные долетают до адресата...)))
0
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
12.08.2010, 18:26
Спасибо, SoftCreator! Всё получилось, что требовали Чуть позже отретуширую код и выложу!
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
13.08.2010, 08:32  [ТС]
Да не за что. Поздравляю! А я вот еще не реализовал всего, чего надо. Было бы интересно конечно код глянуть. А то я что-то забуксовал на определении ID адаптера (не MAC а именно ID, который в реестре прописан). Вопрос в определении активного ethernet адаптера (остальные не интересуют). Через реестр непонятно как определять, что это именно ethernet. Ведь адаптеров может быть несколько (IEEE 1394, bluetooth и т.д.) и в каком они порядке прописаны в реестре непонятно. Но буду ковырять дальше.
P.S. Будешь выкладывать код, не скупись на комментарии, а то я в СИ не силен...))))
0
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
13.08.2010, 14:27
SoftCreator, постараюсь Я вот всё ещё никак не пойму, зачем тебе в реестр лезть-то? Чем пример из 6 поста плох-то? Он использует библиотеку, которой сама винда пользуется; и там отображаются активные адаптеры! Вот у меня вкл. 1394, WiFi и обычный Eth. Прога успешно вывела последние 2, проигнорив 1394.
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
13.08.2010, 14:40  [ТС]
У тебя прога выдала что? МАК? А мне надо идентификатор. Вот в чем дело...
0
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
13.08.2010, 14:58
Вероятно я не догоняю, что означает идентификатор. В той библиотеке есть структурка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef struct _IP_ADAPTER_INFO
 { 
               struct _IP_ADAPTER_INFO *Next; 
               DWORD ComboIndex; 
               char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; 
               char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];  
               UINT AddressLength;  
               BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];  
               DWORD Index;  
               UINT Type;  
               UINT DhcpEnabled;  
               PIP_ADDR_STRING CurrentIpAddress;  
               IP_ADDR_STRING IpAddressList;  
               IP_ADDR_STRING GatewayList;  
               IP_ADDR_STRING DhcpServer;  
               BOOL HaveWins;  
               IP_ADDR_STRING PrimaryWinsServer; 
               IP_ADDR_STRING SecondaryWinsServer;  
               time_t LeaseObtained;  
               time_t LeaseExpires; 
 
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
Вот в ней AdapterName - на мой взгляд, самый что ни на есть уникальный идентификатор. Я уж не говорю, что из неё достаётся и IP и MAC. Может, конечно, я совсем туплю...
Тут подробнее про структуру: http://www.komsoft.ru/pma/sniffer.htm

P.S. Лично у меня карточка открывается именно через AdapterName. Извиняюсь, если не врубаюсь в суть твоей проблемы.
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
19.08.2010, 09:34  [ТС]
Ну видимо не так понимаешь или я не так объясняю...))))
Ну да ладно, проехали, как говорится.
Сделал по другому. По ходу решил и проблему с несколькими адаптерами. Из реестра выбираю зарегистрированные адаптеры и перебираю их все. На те, которые активные, отправляю пакет. Пока вроде все работает...)))
Если интересно поделюсь кодом.
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
24.08.2010, 11:55  [ТС]
Видать ушла у человека работа в зачет, больше не появляется...)))
0
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
31.08.2010, 12:05
Сорри, я уезжал на недельку просто! Я постараюсь выложить тут потом исходники, вдруг кому-нибудь пригодятся. Времени пока что как-то не находится
0
 Аватар для ATAMAN200
9 / 9 / 0
Регистрация: 14.08.2010
Сообщений: 148
22.09.2010, 18:04
Вот так будет компилироваться
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
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "pcap.h"
#include "conio.h"
#pragma comment (lib, "wpcap.lib")
#pragma comment (lib, "Packet.lib")
void main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
u_char packet[100];
int i;
 
    /* Check the validity of the command line */
    if (argc != 2)
    {
        printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]);
        return;
    }
 
    /* Open the output device */
    if ( (fp= pcap_open_live(argv[1],100,1000,NULL,errbuf) ) == NULL)
    {
        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]);
        return;
    }
 
    /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */
    packet[0]=1;
    packet[1]=1;
    packet[2]=1;
    packet[3]=1;
    packet[4]=1;
    packet[5]=1;
 
    /* set mac source to 2:2:2:2:2:2 */
    packet[6]=2;
    packet[7]=2;
    packet[8]=2;
    packet[9]=2;
    packet[10]=2;
    packet[11]=2;
 
    /* Fill the rest of the packet */
    for(i=12;i<100;i++)
    {
        packet[i]=(u_char)i;
    }
 
    /* Send down the packet */
    if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
    {
        fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp));
        return;
    }
 
    return;
getch();
}
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
28.09.2010, 15:14  [ТС]
Вот полностью рабочий вариант lldp-клиента. Каждые 5 минут отсылает имя компа, мак-адрес, айпишник, серийник биоса. При корректном выключении компа отсылает пакет с TTL=0 (стирает данные с роутера). При некорректном данные висят там 65535 секунд (чуть больше 18 часов).

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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#define HAVE_REMOTE
#include <pcap.h>
#include <windows.h>
#include "TChar.h" 
#include <winsock2.h>
#include <winsock.h>
#include <iphlpapi.h>
#include <wsipx.h>
#include <WSNwLink.h>
#include <conio.h>
#include <cstdlib>
#include <NB30.h>
#include <string.h> 
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#include <strsafe.h>
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "Netapi32.lib")
#pragma comment(lib, "wbemuuid.lib")
 
using namespace std;
 
//------------------------------------------
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
//------------------------------------------
 
//--------------- Описание переменных и констант -----------------
 
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
 
int LogOff=0;
 
char SystemName[512]={NULL};
char *CompNameRet;
char *CompIP;
int *mcad;
int t=0;
int j=0;
char *MBID;
int indexpack, numpack;
char romaname[255];
const int WSVer = 0x101;
u_char packet[1024]={NULL};
int qqq[6];
char Buf[128];
char *mb_sn;
char zzz[256], eee;
TCHAR arrMBSN[1024];
int AdapterNumber;
typedef int (__cdecl *MYPROC)(LPWSTR); 
int counter=0;
char HostIP[12]={NULL};
//----------------------------------------------------------------
 
//------------- Определяем имя компьютера --------------------------
char* CompName() {
    WSADATA wsaData;
    WORD wVerReq;
    wVerReq = MAKEWORD(1, 1);
    int err = WSAStartup(wVerReq, &wsaData);
        if (err) exit(1);
            if (gethostname((char *)&romaname, 255)) exit(1);
    WSACleanup();
    char* pName=new char(127);
    pName=&romaname[0];
return pName;
}
//------------------------------------------------------------------OK
 
//-------------- Определяем IP компьютера --------------------------
char* ComputerIP(){
    WSADATA wsaData;
    hostent *h;
char *IPBufPointer;
if (WSAStartup(WSVer, &wsaData) == 0)
{
if (gethostname(&Buf[0], 128) == 0)
    {
    h = gethostbyname(&Buf[0]);
        if (h != NULL)
            IPBufPointer=inet_ntoa (*(reinterpret_cast<in_addr *>(*(h->h_addr_list)))),0,0;
            h->h_addr_list;
    }
    WSACleanup();
    }
return IPBufPointer;
}
//------------------------------------------------------------------OK
 
//------------- Определяем MAC-адрес компьютера --------------------
int *GetMacAddr(int NA){
    NCB Ncb;
    UCHAR uRetCode;
    int *www;
    memset( &Ncb, 0, sizeof(Ncb) );
    Ncb.ncb_command = NCBRESET;
    Ncb.ncb_lana_num = NA;
    
    uRetCode = Netbios( &Ncb );
    if  (!uRetCode==0)
    {
        printf( "The NCBRESET return code is: 0x%x \n", uRetCode );
    }
 
    memset( &Ncb, 0, sizeof (Ncb) );
    Ncb.ncb_command = NCBASTAT;
    Ncb.ncb_lana_num = NA;
    strcpy( (char *)Ncb.ncb_callname, "* " );
    Ncb.ncb_buffer = (UCHAR *) &Adapter;
    Ncb.ncb_length = sizeof(Adapter);
    uRetCode = Netbios( &Ncb );
    if (!uRetCode==0) {
        printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );
    }
    if ( uRetCode == 0 ){
 
        int addr_adapt;
        for (addr_adapt=0;addr_adapt<6;addr_adapt++){
            qqq[addr_adapt]=Adapter.adapt.adapter_address[addr_adapt];
        }
    }
    www=qqq;
return www;
}
//-------------------------------------------------------------------OK
 
//--------------------- Серийник материнки --------------------------
char *GetMotherBoardID(){
    BSTR rrr;
    char result;
    HRESULT hres;
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);                                                                                // Инициализация COM
    hres =  CoInitializeSecurity(NULL, -1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);     // Установка уровня безопасности COM
    hres =  CoInitializeSecurity(
    NULL, 
    -1,                          // Аутентификация COM 
    NULL,                        // Аутентификация сервисов
    NULL,                        // Резерв
    RPC_C_AUTHN_LEVEL_DEFAULT,   // Текущая аутентификация
    RPC_C_IMP_LEVEL_IMPERSONATE, // Текущее соотношение  
    NULL,                        // Информация аутентификации
    EOAC_NONE,                   // Дополнительные соглашения 
    NULL                         // Резерв
    );
    //Начальный локатор к WMI
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance(CLSID_WbemLocator,0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);
    // Соединение с WMI используем IWbemLocator::ConnectServer метод
    IWbemServices *pSvc = NULL;
    // Соединение с областью имен root\cimv2 
    // используем текщего пользователя и получаем указатель pSvc
    // чтобы делать вызовы IWbemServices.
    hres = pLoc->ConnectServer(
         _bstr_t(L"ROOT\\CIMV2"), // Путь к объекту в области имен WMI
         NULL,                    // Имя пользователя. NULL = текущий пользователь
         NULL,                    // Пароль пользователя. NULL = текущий
         0,                       // Локаль. NULL текукщая
         NULL,                    // Флаги безопасности.
         0,                       // Авторизация (например Kerberos)
         0,                       // Объект контекста
         &pSvc                    // Указатель прокси для IWbemServices
         );
    // Установка уровней безопасности для прокси
        hres = CoSetProxyBlanket(
       pSvc,                        // Указатель на прокси
       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
       NULL,                        // Имя сервера
       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
       NULL,                        // идентификация клиента
       EOAC_NONE                    // соглашения прокси
    );
        // Используем указательIWbemServices, чтобы сделать запрос к WMI 
        IEnumWbemClassObject* pEnumerator = NULL;
        hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t( "SELECT SerialNumber FROM Win32_BIOS"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,&pEnumerator);
        // Выборка данных из запроса
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
                
        while (pEnumerator)
            {
                HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
                    if(0 == uReturn)
                        {
                            break;
                        }
        VARIANT vtProp;
        // Получим значение серийника 
        hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
        mb_sn=(char *)vtProp.bstrVal;
        rrr=vtProp.bstrVal;
        result=(WideCharToMultiByte(CP_ACP,0,rrr,-1,zzz,128,NULL,NULL));
        mb_sn=&zzz[0];
        VariantClear(&vtProp);
    }
    // Освободим память
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    pclsObj->Release();
    CoUninitialize();
return mb_sn;
}
//-------------------------------------------------------------------OK
 
 
// -------------------------------------- Определяем номер адаптера ---------------------------------------------
int GetNumAdapt(char DevName[], char StrSource[]){
 
char tmpStr[512]={NULL};
int NumSym=0;int num=0;int pr=0;
int ind[sizeof(NumSym)]={0};
int g=0;int aNum=0;int cxz=0;int cnt=0;int j;int ii;
 
for (num=0; num<strlen(StrSource); num++)
{
    if(StrSource[num]== '{'){ind[NumSym]=num;NumSym++;}
}
 
for (j=0;j<NumSym;j++)
{
    for (ii=ind[j];ii<ind[j]+38;ii++){tmpStr[g]=StrSource[ii];g++;}
    tmpStr[g]=NULL;
 
for (cxz=0;cxz<38;cxz++)
    {
        if (tmpStr[cxz]==DevName[cxz]){cnt++;}
        
    }
        if (cnt=38){aNum=j;}
        g=0;cnt=0;
        memset(tmpStr,NULL, sizeof(tmpStr));
}
return aNum;
}
//----------------------------------------------------------------------------------------------------------------OK
 
//------------------------ Передача пакета --------------------------
int SendPaket() {
 
    HKEY hKey;
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string 
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    DWORD    cchClassName = MAX_PATH;  // size of class string 
    DWORD    cSubKeys=0;               // number of subkeys 
    DWORD    cbMaxSubKey;              // longest subkey size 
    DWORD    cchMaxClass;              // longest class string 
    DWORD    cValues;              // number of values for key 
    DWORD    cchMaxValue;          // longest value name 
    DWORD    cbMaxValueData;       // longest value data 
    DWORD    cbSecurityDescriptor; // size of security descriptor 
    FILETIME ftLastWriteTime;      // last write time 
 
    DWORD i, retCode; 
 
    pcap_t *fp;
    char *PrePath="rpcap://\\device\\NPF_";
    char DeviceName[512];
    char tmpDM[512];
    char errbuf[PCAP_ERRBUF_SIZE];
    AdapterNumber=0;
    i=0;
    char qwe[512]={NULL};
    char *MyIP;
 
// ------------------------------------- Выборка зарегистрированных адаптеров -------------------------------------------------------------------
    if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\DNSRegisteredAdapters",0,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS )
    {
        retCode = RegQueryInfoKey(
        hKey,                    // key handle 
        achClass,                // buffer for class name 
        &cchClassName,           // size of class string 
        NULL,                    // reserved 
        &cSubKeys,               // number of subkeys 
        &cbMaxSubKey,            // longest subkey size 
        &cchMaxClass,            // longest class string 
        &cValues,                // number of values for this key 
        &cchMaxValue,            // longest value name 
        &cbMaxValueData,         // longest value data 
        &cbSecurityDescriptor,   // security descriptor 
        &ftLastWriteTime);       // last write time 
            if (cSubKeys)
            {
                for (i=0; i<cSubKeys; i++) 
                    { 
                    cbName = MAX_KEY_LENGTH;
                    retCode = RegEnumKeyEx(hKey, i,achKey, &cbName, NULL, NULL, NULL, &ftLastWriteTime); 
                    if (retCode == ERROR_SUCCESS) 
                        {
                            strcpy(tmpDM, PrePath);
                            int itmpstr=0;
                            int t=0;
                            for (t=0; t<sizeof(achKey); t++)
                            {
                                DeviceName[t]=(char)achKey[t];
                                qwe[t]=(char)achKey[t];
                            }
                            strcat(tmpDM,DeviceName);
 
HKEY rKey;
BYTE Reget[512]={NULL};
DWORD RegetPath = sizeof(Reget);
char lstDev[512]={NULL};
//char * ptrStr;
 
 
RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Linkage", 0, KEY_QUERY_VALUE, &rKey);
RegQueryValueEx(rKey, L"Route", NULL, NULL, Reget, &RegetPath);
RegCloseKey(rKey);
 
int u=0;
int s=0;
for (u=0; u<sizeof(Reget); u++)
    {
    if (!Reget[u]==0)
        {
            lstDev[s]=Reget[u];
            s++;
        }
    }
    
    lstDev[s+1]=NULL;
 
    fp= pcap_open(tmpDM,1024,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf);
        if (!fp==NULL)
            {
                AdapterNumber=GetNumAdapt(DeviceName, lstDev);
                mcad=GetMacAddr(AdapterNumber);
                CompNameRet=CompName();
                CompIP=ComputerIP();
                MBID=GetMotherBoardID();
                MyIP=ComputerIP();
                for (i=0;i<12;i++)
                {
                HostIP[i]=(char)MyIP[i];
                }
                counter=0;
                for (counter=0;counter<strlen(CompNameRet);counter++)
                {
                    SystemName[counter]=CompNameRet[counter];
                }
                SystemName[counter+1]=NULL;
 
    // Формируем пакет 
                // Вставка в пакет destination MAC он постоянный
                packet[0]=0x01;
                packet[1]=0x80;
                packet[2]=0xc2;
                packet[3]=0x00;
                packet[4]=0x00;
                packet[5]=0x0E;
                numpack=1;
                indexpack=5;
 
                // Вставка в пакет source MAC
                int i;
                for (i=0;i<6;i++)
                    {
                        indexpack+=1;packet[indexpack]=mcad[i];
                    }
                    numpack=2;
 
                                // Вставка идентификатора LLDP Ethertype
                                indexpack+=1;packet[indexpack]=0x88;
                                indexpack+=1;packet[indexpack]=0xcc;
                                
                                // =============== Обязательные TLV ====================
                                // Вставка в пакет Chassis ID
                                indexpack+=1;packet[indexpack]=0x02; // Тип
                                indexpack+=1;packet[indexpack]=0x07; // Длина
                                indexpack+=1;packet[indexpack]=0x04; // subtype - MAC
                                indexpack+=1;packet[indexpack]=mcad[0];
                                indexpack+=1;packet[indexpack]=mcad[1];
                                indexpack+=1;packet[indexpack]=mcad[2];
                                indexpack+=1;packet[indexpack]=mcad[3];
                                indexpack+=1;packet[indexpack]=mcad[4];
                                indexpack+=1;packet[indexpack]=mcad[5];
                                numpack=3;
                                
                                // Port ID
                                indexpack+=1;packet[indexpack]=0x04;
                                indexpack+=1;packet[indexpack]=0x07; // Тип и длина
                                indexpack+=1;packet[indexpack]=0x03; // sybtype Port ID
                                indexpack+=1;packet[indexpack]=mcad[0];
                                indexpack+=1;packet[indexpack]=mcad[1];
                                indexpack+=1;packet[indexpack]=mcad[2];
                                indexpack+=1;packet[indexpack]=mcad[3];
                                indexpack+=1;packet[indexpack]=mcad[4];
                                indexpack+=1;packet[indexpack]=mcad[5];
                                numpack=4;
                                
                                // TTL
                                switch (LogOff)
                                {
                                case 0:
                                    indexpack+=1;packet[indexpack]=0x06;// Тип и длина
                                    indexpack+=1;packet[indexpack]=0x02;
                                    indexpack+=1;packet[indexpack]=0xff;// Значение
                                    indexpack+=1;packet[indexpack]=0xff;
                                break;
 
                                case 1:
                                    indexpack+=1;packet[indexpack]=0x06;// Тип и длина
                                    indexpack+=1;packet[indexpack]=0x02;
                                    indexpack+=1;packet[indexpack]=0x00;// Значение
                                    indexpack+=1;packet[indexpack]=0x00;
                                break;
                                }
                                numpack=5;
                                // =====================================================
 
                                // Вставка в пакет имени компьютера
                                indexpack+=1;packet[indexpack]=0x0a; // Тип
                                indexpack+=1;packet[indexpack]=strlen(SystemName);    // Длина
                                int ind;
                                for (ind=0;ind<strlen(SystemName);ind++)
                                    {   
                                    indexpack+=1;
                                    packet[indexpack]=(WCHAR )romaname[ind];
                                    }
                                numpack=6; 
 
                                // Вставка серийника материнки
                                indexpack++;packet[indexpack]=0x0c;
                                indexpack++;packet[indexpack]=strlen(MBID);
                                counter=0;
                                for (counter=0;counter<strlen(MBID);counter++)
                                {
                                    indexpack++;
                                    packet[indexpack]=MBID[counter];
                                }
                                numpack=7;
 
                                // Вставка в пакет IP компьютера
                                indexpack++;packet[indexpack]=0x0d;
                                indexpack++;packet[indexpack]=strlen(HostIP);
                                counter=0;
                                for (counter=0;counter<strlen(HostIP);counter++)
                                {
                                    indexpack++;
                                    packet[indexpack]=HostIP[counter];
                                }
                                numpack=8;
 
 
 
                                //****************************
                                //  ***  The End of Frame  ***
                                //****************************
                                indexpack+=1;packet[indexpack]=0x00;
                                indexpack+=1;packet[indexpack]=0x00;
                                //**************************** 
 
    // Отправка пакета 
                                
                            if (pcap_sendpacket(fp, packet, 1024 ) != 0)
                                {
                                    fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp));
                                    return 0;
                                }
                            }
                        }
                }
        }
}
return 0;
}
//-------------------------------------------------------------------OK
 
 
//---------------- Отлов завершения работы/сессии ------------------
BOOL __stdcall Ctrl_Handler(DWORD Msg)
{
switch (Msg)
{
case CTRL_LOGOFF_EVENT: // Использую логофф, ибо все равно срабатывает при выключении компа, а проверять удобнее
    LogOff=1;
    SendPaket();
    exit(0);  
break;
}
return true;
}
//------------------------------------------------------------------OK
 
 
//---------------- ВХОД -------------------------------
int main(int argc, CHAR* argv[]){
 
    SetConsoleCtrlHandler(&Ctrl_Handler, true ); // Инициализация ловушки завершения работы/сессии
 
    int time=0;
 
do
    {
        SendPaket();
        Sleep(300000);
    } while ( time=1 );
 
 
    
return 0;
}
//-----------------------------------------------------OK
P.S. Теперь стоит задача реализовать это в виде службы (сервиса) windows.
1
 Аватар для ATAMAN200
9 / 9 / 0
Регистрация: 14.08.2010
Сообщений: 148
28.09.2010, 17:17
Мощная вещь осталось только продумать как эту мощную вещь помещять в службы и что бы PE при запуске сам себя копировал куда нибудь

Добавлено через 56 секунд
Да и ещё что бы отсылал всю инфу на "мыло".
0
2 / 2 / 0
Регистрация: 08.07.2010
Сообщений: 18
29.09.2010, 09:04  [ТС]
После "беглого" анализа есть мысль написать простенькую службу, которая будет по таймеру запускать этого клиента. Останется только выяснить хватит ли прав у этой службы или клиента отсылать броадкастовые данные если юзер в логоффе (еще не залогинился).
А по поводу отсылать на мыло пошукай в сети, я кажись встречал уже готовые решения (исходники).
0
 Аватар для ATAMAN200
9 / 9 / 0
Регистрация: 14.08.2010
Сообщений: 148
29.09.2010, 17:13
Цитата Сообщение от softcreator Посмотреть сообщение
После "беглого" анализа есть мысль написать простенькую службу, которая будет по таймеру запускать этого клиента. Останется только выяснить хватит ли прав у этой службы или клиента отсылать броадкастовые данные если юзер в логоффе (еще не залогинился).
А по поводу отсылать на мыло пошукай в сети, я кажись встречал уже готовые решения (исходники).
Да я давно уже реализовал эту идею мне не нать.
Только у меня ip адреса при подкючение к интернету отсылает на мыло.
0
2 / 2 / 0
Регистрация: 15.07.2010
Сообщений: 24
09.11.2010, 20:48
Извиняюсь за задержку с ответом - дел много.
Тема, как я понял в своё время была исчерпана, но на всякий случай для ищущих решил выложить тут свой проект. Внутри лежит билдеровский (2009) проджект, драйвер и небольшое ридми В плане интерфейсной части приложение сыровато. В плане требований стандарта LLDP всё было учтено (с точки зрения поставленной мне задачи, конечно). Прога без нареканий прошла испытания на предприятии, где у меня проходила практика. По крайней мере, мне так сказали
Вложения
Тип файла: rar lldp.rar (4.05 Мб, 90 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2010, 20:48
Помогаю со студенческими работами здесь

Драйвер VIA для Windows 7
s3g via unichrome pro driver SiSoftware Sandra Видеоадаптер Дисплей : \\.\DISPLAY1 Совместим с VGA : Да Наименование...

Необходимо написать драйвер для тачпада для windows 7 x64
Здравствуйте, дорогие форумчане.Я недавно купил ноутбук asus x556uf поставил win 7 при установке винды тачпад нормально работал вот после...

Помогите найти драйвер для видео Radeon 9100 для Windows 7 x86
Помогите найти драйвер для видео Radeon 9100 для Windows 7 x86, искал везде и не нашел и что делать с видео если такого драйвера всё таки...

Модифицировать драйвер для Canon Laser Shot LBP-1120 для Windows 7 x64
Люди добрые, помогите! Нигде в просторах сети нет драйвера для Canon Laser Shot LBP-1120 для Windows 7 x64, знаю что возможно их написать...

Оочень ищу драйвер для сетевой карты Ethernet Network Controller для Windows XP, SP 3
Коды ID оборудования (1a3e09be-1e45-494b-9174-d7385b45bbf5)/NVNET_DEV0057


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru