Здравствуйте. Я почитал множество документации и примеров по этой теме , но почему-то получить HANDLE сетевой получить не получается. Вот код: Код (Text): #include <windows.h> #include <stdio.h> #include <conio.h> #include <iostream.h> #include <time.h> #define MAX_LINK_NAME_LENGTH 64 typedef struct _ADAPTER { HANDLE hFile; ///< \internal Handle to an open instance of the NPF driver. TCHAR SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened. int NumWrites; ///< \internal Number of times a packets written on this adapter will be repeated ///< on the wire. HANDLE ReadEvent; ///< A notification event associated with the read calls on the adapter. ///< It can be passed to standard Win32 functions (like WaitForSingleObject ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some ///< data. It is particularly useful in GUI applications that need to wait ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy() ///< function can be used to define the minimum amount of data in the kernel buffer ///< that will cause the event to be signalled. UINT ReadTimeOut; ///< \internal The amount of time after which a read on the driver will be released and ///< ReadEvent will be signaled, also if no packets were captured } ADAPTER, *LPADAPTER; // задаем переменные #define SIMULTANEOU_READS 10 #define MAX_ETHERNET_FRAME_SIZE 1514 #define Max_Num_Adapter 10 //максимальное число адаптеров WCHAR AdapterList[Max_Num_Adapter][1024]; void main() { LoadLibrary("Packet.dll"); LPADAPTER lpAdapter = 0; char packetbuff[5000];// буфер для данных пакета int i,npacks,Snaplen; DWORD dwErrorCode; DWORD dwVersion; DWORD dwWindowsMajorVersion; // строки формата unicode (winnt) WCHAR AdapterName[512]; // строка, содержащая список сетевых адаптеров WCHAR *temp,*temp1; // троки формата ascii (win95) char AdapterNamea[512]; // строка, содержащая список сетевых адаптеров char *tempa,*temp1a int AdapterNum=0,Open;// номер адаптера ULONG AdapterLength; // длина float cpu_time; printf("Генератор сетевого трафика v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)"); printf("\nОтправляет группу пакетов в сеть."); AdapterNamea[0]=0; // инициализация переменной if(AdapterNamea[0]==0){ AdapterLength=1024; i=0; // Windows NT //получаем список имен адаптеров, записанных в строку AdapterName FARPROC WDS=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketGetAdapterNames"); __asm { lea ebx,AdapterName lea ecx,AdapterLength push ecx push ebx mov eax,WDS call eax } HANDLE hWipedFile; hWipedFile = CreateFile("INPUT.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, 0,NULL); unsigned long j[90]; WriteFile(hWipedFile,AdapterName,2000,j,NULL); char CPO[]="Attansic AtcL001 Gigabit Ethernet Controller (Microsoft's Packet Scheduler)"; FARPROC WDL=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketOpenAdapter"); int WER=9000; __asm { lea ecx,CPO push ecx mov ecx,WDL call ecx mov WER,eax } if (WER==0) { printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); return; } cout<<"\n HHH "<<hex<<WER; } getch(); } В INPUT.txt вижу \Device\NPF_GenericDialupAdapter \Device\NPF_{ADF8A22E-BC30-45A4-83E8-8DC109F66965} Adapter for generic dialup and VPN capture Attansic AtcL001 Gigabit Ethernet Controller (Microsoft's Packet Scheduler) т.е. название сетевой определенно верно, но вот PacketOpenAdapter, что-то ничего не выдает , т.е. возвращает 0. Подскажите пожалуйста, что делать?В чем ошибка?
Попробуй определить IP_ADAPTER_INFO.AdapterName через iphlpapi.dll!GetAdaptersInfo, добавить впереди \Device\NPF_, и только потом PacketOpenAdapter.
Flasher, вы имеете ввиду передать PacketOpenAdapter вот такую строку? \Device\NPF_Attansic AtcL001 Gigabit Ethernet Controller (Microsoft's Packet Scheduler)
спасибо Flasher, тут все получилось, а вот дальше не пойму. Разве может получаться , так потому что не взываеться PacketAllocatePacket ?? Вроде все в норме, но отправки не получается. Код (Text): char CPO[]="\\Device\\NPF_{0BF2E9E9-1961-40E0-A1CC-756AF925859D}"; FARPROC WDL=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketOpenAdapter"); int VB5=0; __asm { lea ecx,CPO push ecx mov ecx,WDL call ecx mov VB5,eax } char packet[1514]; packet[0]='\x011'; packet[1]='\x022'; packet[2]='\x033'; packet[3]='\x044'; packet[4]='\x055'; packet[5]='\x066'; packet[6]='\x00'; packet[7]='\x00'; packet[8]='\x00'; packet[9]='\x00'; packet[10]='\x00'; packet[11]='\x00'; packet[12]='\x008'; packet[13]='\x006'; int gh=14; while(gh<1000) { packet[gh]='\x00'; gh++; } FARPROC PIP=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketInitPacket"); __asm { push 15 lea ecx,packet push ecx lea ecx,lpPacket push ecx mov ecx,PIP call ecx } FARPROC SEND=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketSendPacket"); int ip=true; __asm { mov ecx,ip push ecx lea ecx,lpPacket push ecx lea ecx,lpAdapter push ecx mov ecx,SEND call ecx } }
hawk, а на Си написать и отладить в VC++ не судьба? Можешь скомпилить весь winpcap и отладчиком пройти...
Что б в source mode, по-человечьи, пройти VS отладчиком по исходнику и посмотреть что не фурычит, а не мусорить в форуме.