помогите с winPCAP

Тема в разделе "WASM.NETWORKS", создана пользователем hawk, 21 мар 2009.

  1. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    Здравствуйте.
    Я почитал множество документации и примеров по этой теме , но почему-то получить HANDLE сетевой получить не получается.
    Вот код:
    Код (Text):
    1. #include <windows.h>
    2.  
    3. #include <stdio.h>
    4.  
    5. #include <conio.h>
    6. #include <iostream.h>
    7.  
    8. #include <time.h>
    9.  
    10. #define        MAX_LINK_NAME_LENGTH   64
    11. typedef struct _ADAPTER  {
    12.     HANDLE hFile;               ///< \internal Handle to an open instance of the NPF driver.
    13.     TCHAR  SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened.
    14.     int NumWrites;              ///< \internal Number of times a packets written on this adapter will be repeated
    15.                                 ///< on the wire.
    16.     HANDLE ReadEvent;           ///< A notification event associated with the read calls on the adapter.
    17.                                 ///< It can be passed to standard Win32 functions (like WaitForSingleObject
    18.                                 ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some
    19.                                 ///< data. It is particularly useful in GUI applications that need to wait
    20.                                 ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy()
    21.                                 ///< function can be used to define the minimum amount of data in the kernel buffer
    22.                                 ///< that will cause the event to be signalled.
    23.    
    24.     UINT ReadTimeOut;           ///< \internal The amount of time after which a read on the driver will be released and
    25.                                 ///< ReadEvent will be signaled, also if no packets were captured
    26. }  ADAPTER, *LPADAPTER;
    27.  
    28.  
    29.  
    30.  
    31.  
    32. // задаем переменные
    33.  
    34. #define SIMULTANEOU_READS 10
    35.  
    36. #define MAX_ETHERNET_FRAME_SIZE 1514
    37.  
    38. #define Max_Num_Adapter 10 //максимальное число адаптеров
    39.  
    40.  WCHAR AdapterList[Max_Num_Adapter][1024];
    41.  
    42.  
    43.  
    44. void main()
    45. {
    46. LoadLibrary("Packet.dll");
    47.  
    48. LPADAPTER  lpAdapter = 0;
    49.     char packetbuff[5000];// буфер для данных пакета
    50.        int        i,npacks,Snaplen;
    51.        DWORD      dwErrorCode;
    52.        DWORD dwVersion;
    53.        DWORD dwWindowsMajorVersion;
    54.        // строки формата unicode (winnt)
    55.        WCHAR        AdapterName[512]; // строка, содержащая список сетевых адаптеров
    56.        WCHAR        *temp,*temp1;
    57.        // троки формата ascii (win95)
    58.        char         AdapterNamea[512]; // строка, содержащая список сетевых адаптеров  char          *tempa,*temp1a
    59.        int                 AdapterNum=0,Open;// номер адаптера
    60.        ULONG        AdapterLength; // длина
    61.        float  cpu_time;
    62.        printf("Генератор сетевого трафика v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)");
    63.        printf("\nОтправляет группу пакетов в сеть.");
    64.        AdapterNamea[0]=0; // инициализация переменной
    65.  
    66.      
    67.        if(AdapterNamea[0]==0){
    68.              AdapterLength=1024;
    69.              i=0;
    70.  
    71.  // Windows NT
    72.  
    73.                     //получаем список имен адаптеров, записанных в строку AdapterName
    74.  
    75.    FARPROC WDS=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketGetAdapterNames");  
    76.  __asm {
    77.    lea ebx,AdapterName
    78.    lea ecx,AdapterLength
    79.    push ecx
    80.    push ebx
    81.    mov eax,WDS
    82.    call eax
    83.    }
    84.  
    85. HANDLE hWipedFile;
    86.     hWipedFile = CreateFile("INPUT.txt",
    87.                             GENERIC_WRITE,
    88.                             FILE_SHARE_READ | FILE_SHARE_WRITE,
    89.                             NULL,
    90.                            CREATE_NEW,
    91.                             0,NULL);
    92.  
    93.                             unsigned long j[90];
    94.      WriteFile(hWipedFile,AdapterName,2000,j,NULL);
    95.  
    96.  
    97. char CPO[]="Attansic AtcL001 Gigabit Ethernet Controller (Microsoft's Packet Scheduler)";
    98.  
    99.  
    100. FARPROC WDL=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketOpenAdapter"); 
    101. int WER=9000;
    102.  __asm {
    103.    lea ecx,CPO
    104.    push ecx
    105.    mov ecx,WDL
    106.    call ecx
    107.    mov WER,eax
    108.    }
    109.  
    110.  
    111.              if (WER==0)
    112.  
    113.              {
    114.                  printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode);
    115.                  return;
    116.  
    117.              }    
    118.     cout<<"\n HHH    "<<hex<<WER;
    119.              
    120.  
    121.  
    122.  
    123. }
    124. getch();
    125. }
    В 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.
    Подскажите пожалуйста, что делать?В чем ошибка?
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Попробуй определить IP_ADAPTER_INFO.AdapterName через iphlpapi.dll!GetAdaptersInfo, добавить впереди \Device\NPF_, и только потом PacketOpenAdapter.
     
  3. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    Flasher, вы имеете ввиду передать PacketOpenAdapter вот такую строку?
    \Device\NPF_Attansic AtcL001 Gigabit Ethernet Controller (Microsoft's Packet Scheduler)
     
  4. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    спасибо Flasher, тут все получилось, а вот дальше не пойму.
    Разве может получаться , так потому что не взываеться PacketAllocatePacket ??
    Вроде все в норме, но отправки не получается.


    Код (Text):
    1. char CPO[]="\\Device\\NPF_{0BF2E9E9-1961-40E0-A1CC-756AF925859D}";
    2.  
    3.  
    4. FARPROC WDL=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketOpenAdapter");
    5. int VB5=0;
    6.  __asm {
    7.    lea ecx,CPO
    8.    push ecx
    9.    mov ecx,WDL
    10.    call ecx
    11.    mov VB5,eax
    12.  
    13.    }
    14.         char packet[1514];
    15.         packet[0]='\x011';
    16.         packet[1]='\x022';
    17.         packet[2]='\x033';
    18.         packet[3]='\x044';
    19.         packet[4]='\x055';
    20.         packet[5]='\x066';
    21.         packet[6]='\x00';
    22.         packet[7]='\x00';
    23. packet[8]='\x00';
    24. packet[9]='\x00';
    25. packet[10]='\x00';
    26. packet[11]='\x00';
    27. packet[12]='\x008';
    28. packet[13]='\x006';
    29. int gh=14;
    30. while(gh<1000)
    31. {
    32.   packet[gh]='\x00';
    33.   gh++;
    34. }
    35.  
    36.  
    37.  
    38.   FARPROC PIP=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketInitPacket");
    39.  __asm {
    40.    push 15
    41.   lea ecx,packet
    42.    push ecx
    43.    lea ecx,lpPacket
    44.    push ecx
    45.    mov ecx,PIP
    46.    call ecx
    47.    }
    48.  
    49.    FARPROC SEND=GetProcAddress(GetModuleHandle("Packet.dll"),"PacketSendPacket");
    50.    int ip=true;
    51.  __asm {
    52.     mov ecx,ip
    53.     push ecx
    54.    lea ecx,lpPacket
    55.    push ecx
    56.    lea ecx,lpAdapter
    57.    push ecx
    58.    mov ecx,SEND
    59.    call ecx
    60.    }
    61.  
    62.  
    63.                          
    64.  
    65.  
    66. }
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    hawk, а на Си написать и отладить в VC++ не судьба? Можешь скомпилить весь winpcap и отладчиком пройти...
     
  6. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    s0larian , а чё мне его отлаживать.
    ошибки не выдаёт-через ollyDbg смотрел-вроде норм
     
  7. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    буду юзать PacketAllocatePacket
     
  8. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Могет юзать pcap'овские функции ? Там проще с этим делом..
    Глянь тут
     
  9. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Что б в source mode, по-человечьи, пройти VS отладчиком по исходнику и посмотреть что не фурычит, а не мусорить в форуме.