capture.c
上传用户:fubang
上传日期:2009-06-18
资源大小:2071k
文件大小:7k
源码类别:

其他

开发平台:

Unix_Linux

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "capture.h"
  4. typedef HANDLE (*PROC1)(LPSTR);
  5. typedef HANDLE (*PROC2)(HANDLE,void *,int,int,void *);
  6. typedef int (*PROC3)(HANDLE);
  7. typedef int (*PROC4)(HANDLE,void *,void *);
  8. HANDLE hAdapter;
  9. HANDLE hContext;
  10. PROC1 PeekOpenAdapter;
  11. PROC2 PeekCreateCaptureContext;
  12. PROC3 PeekStartCapture;
  13. PROC3 PeekStopCapture;
  14. PROC3 PeekCloseAdapter;
  15. PROC4 PeekRequest;
  16. int load_peek( void )
  17. {
  18.     HMODULE hPeekdll;
  19.     if( ! ( hPeekdll = LoadLibrary( "Peek.dll" ) ) )
  20.     {
  21.         fprintf( stderr, "  LoadLibrary(Peek.dll) failed, make sure" 
  22.                  " this file is present in the current directory.n" );
  23.         return( 1 );
  24.     }
  25.     if( ! ( PeekOpenAdapter = (PROC1) GetProcAddress(
  26.                 hPeekdll, "PeekOpenAdapterA" ) ) )
  27.     {
  28.         fprintf( stderr, "  GetProcAddress(PeekOpenAdapterA) failedn" );
  29.         return( 1 );
  30.     }
  31.     if( ! ( PeekCreateCaptureContext = (PROC2) GetProcAddress(
  32.                 hPeekdll, "PeekCreateCaptureContext" ) ) )
  33.     {
  34.         fprintf( stderr, "  GetProcAddress(PeekCreateCaptureContext) " 
  35.                  "failedn" );
  36.         return( 1 );
  37.     }
  38.     if( ! ( PeekStartCapture = (PROC3) GetProcAddress(
  39.                 hPeekdll, "PeekStartCapture" ) ) )
  40.     {
  41.         fprintf( stderr, "  GetProcAddress(PeekStartCapture) failedn" );
  42.         return( 1 );
  43.     }
  44.     if( ! ( PeekRequest = (PROC4) GetProcAddress(
  45.                 hPeekdll, "PeekRequest" ) ) )
  46.     {
  47.         fprintf( stderr, "  GetProcAddress(PeekRequest) failedn" );
  48.         return( 1 );
  49.     }
  50.     if( ! ( PeekStopCapture = (PROC3) GetProcAddress(
  51.                 hPeekdll, "PeekStopCapture" ) ) )
  52.     {
  53.         fprintf( stderr, "  GetProcAddress(PeekStopCapture) failedn" );
  54.         return( 1 );
  55.     }
  56.     if( ! ( PeekCloseAdapter = (PROC3) GetProcAddress(
  57.                 hPeekdll, "PeekCloseAdapter" ) ) )
  58.     {
  59.         fprintf( stderr, "  GetProcAddress(PeekCloseAdapter) failedn" );
  60.         return( 1 );
  61.     }
  62.     return( 0 );
  63. }
  64. int show_cards( void )
  65. {
  66.     int keyidx;
  67.     int keylen;
  68.     int keytype;
  69.     int nbcards;
  70.     int card_index;
  71.     char keystr[128];
  72.     HKEY regkey1;
  73.     HKEY regkey2;
  74.     printf( "n  Known network adapters:nn" );
  75.     if( RegOpenKey( HKEY_LOCAL_MACHINE, "Software\Microsoft\"
  76.                     "Windows NT\CurrentVersion\NetworkCards",
  77.                     &regkey1 ) != ERROR_SUCCESS )
  78.     {
  79.         fprintf( stderr, "  RegOpenKey(KEY_LOCAL_MACHINE\Software\"
  80.                          "Microsoft\Windows NT\CurrentVersion\"
  81.                          "NetworkCards) failedn" );
  82.         return( 0 );
  83.     }
  84.     nbcards = keyidx = 0;
  85.     while( RegEnumKey( regkey1, keyidx++, keystr, 128 ) == ERROR_SUCCESS )
  86.     {
  87.         card_index = atoi( keystr );
  88.         sprintf( keystr, "Software\Microsoft\Windows NT\Current"
  89.                          "Version\NetworkCards\%d", card_index );
  90.         if( RegOpenKey( HKEY_LOCAL_MACHINE, keystr, &regkey2 ) !=
  91.                         ERROR_SUCCESS )
  92.         {
  93.             fprintf( stderr, "  RegOpenKey(KEY_LOCAL_MACHINE\Software\"
  94.                              "Microsoft\Windows NT\CurrentVersion\"
  95.                              "NetworkCards\%d) failedn", card_index );
  96.             continue;
  97.         }
  98.         keylen = sizeof( keystr );
  99.         if( RegQueryValueEx( regkey2, "Description", NULL,
  100.                              &keytype, keystr, &keylen ) !=
  101.                              ERROR_SUCCESS )
  102.         {
  103.             RegCloseKey( regkey2 );
  104.             fprintf( stderr, "  RegOpenKey(KEY_LOCAL_MACHINE\Software\"
  105.                              "Microsoft\Windows NT\CurrentVersion\"
  106.                              "NetworkCards\%d\Description) failedn",
  107.                              card_index );
  108.             continue;
  109.         }
  110.         RegCloseKey( regkey2 );
  111.         if( open_adapter( card_index ) != 0 )
  112.             continue;
  113.         PeekCloseAdapter( hAdapter );
  114.         printf( "  %2d  %sn", card_index, keystr );
  115.         nbcards++;
  116.     }
  117.     RegCloseKey( regkey1 );
  118.     if( nbcards > 0 ) printf( "n" );
  119.     return( nbcards );
  120. }
  121. int set_channel( int channel )
  122. {
  123.     unsigned long reqdata[139];
  124.     OVERLAPPED iodata;
  125.     memset( (void *) reqdata, 0, sizeof( reqdata ) );
  126.     memset( (void *) &iodata, 0, sizeof(  iodata ) );
  127.     iodata.hEvent = CreateEvent( 0, 0, 0, 0 );
  128.     reqdata[5] = 1;
  129.     reqdata[6] = 0xFF636713;
  130.     reqdata[7] = (unsigned long) &channel;
  131.     reqdata[8] = 4;
  132.     return( PeekRequest( hAdapter, reqdata, &iodata ) );
  133. }
  134. int open_adapter( int card_index )
  135. {
  136.     int keylen;
  137.     int keytype;
  138.     char keystr[128];
  139.     char devstr[128];
  140.     HKEY regkey2;
  141.     sprintf( keystr, "Software\Microsoft\Windows NT\Current"
  142.                      "Version\NetworkCards\%d", card_index );
  143.     if( RegOpenKey( HKEY_LOCAL_MACHINE, keystr, &regkey2 ) !=
  144.                     ERROR_SUCCESS )
  145.         return( 1 );
  146.     keylen = sizeof( keystr );
  147.     if( RegQueryValueEx( regkey2, "ServiceName", NULL,
  148.                          &keytype, keystr, &keylen ) !=
  149.                          ERROR_SUCCESS )
  150.     {
  151.         fprintf( stderr, "  RegOpenKey(KEY_LOCAL_MACHINE\Software\"
  152.                          "Microsoft\Windows NT\CurrentVersion\"
  153.                          "NetworkCards\%d\ServiceName) failed!n",
  154.                          card_index );
  155.         return( 1 );
  156.     }
  157.     sprintf( devstr, "\Device\%s", keystr );
  158.     hAdapter = PeekOpenAdapter( devstr );
  159.     return( hAdapter == INVALID_HANDLE_VALUE );
  160. }
  161. int start_monitor( void *callback )
  162. {
  163.     int ret;
  164.     if( hAdapter == INVALID_HANDLE_VALUE )
  165.     {
  166.         fprintf( stderr, "  Invalid adapter handlen" );
  167.         return( 1 );
  168.     }
  169.     hContext = PeekCreateCaptureContext( hAdapter, callback,
  170.                                          0x3E8000, 0x21, NULL );
  171.     if( PeekStartCapture( hContext ) != 0 )
  172.     {
  173.         PeekCloseAdapter( hAdapter );
  174.         fprintf( stderr, "  PeekStartCapture() failedn" );
  175.         return( 1 );
  176.     }
  177.    // ret = set_channel( 1 );
  178. rer= set_channel( arg.channels[0] );
  179.     if( ret == 0xC0010017 )
  180.     {
  181.         PeekStopCapture( hContext );
  182.         PeekCloseAdapter( hAdapter );
  183.         fprintf( stderr, "n  The selected adapter's driver is not com" 
  184.                          "patible with the PEEK protocol. See then  "  
  185.                          "aircrack documentation for more information"  
  186.                          " on how to install a compatible driver.nn"  
  187.                          "  Only Atheros, Aironet, Realtek (RTL8180) "  
  188.                          "and HermesI chipsets have a Peek driver.n"   
  189.                          "  There is NO Peek driver AT ALL for Prism,"  
  190.                          " Ralink, Marvel, TI or Centrino chipsets.n" );
  191.         ShellExecute( NULL, "OPEN", "http://www.wildpackets.com/"
  192.                       "support/product_support/airopeek/hardware",
  193.                       "", "", SW_SHOWNORMAL );
  194.         return( 1 );
  195.     }
  196.     if( ret != 0 )
  197.     {
  198.         PeekStopCapture( hContext );
  199.         PeekCloseAdapter( hAdapter );
  200.         fprintf( stderr, "  FATAL: failed to set the wireless channel, "
  201.                          "is something wrong with the card?n" );
  202. fprintf( stderr, "  Also make sure you have installed the correct "
  203.              "driver.n" );
  204.         return( 1 );
  205.     }
  206.     return( 0 );
  207. }
  208. void stop_monitor( void )
  209. {
  210.     PeekStopCapture( hContext );
  211.     Sleep( 1000 );
  212.     PeekCloseAdapter( hAdapter );
  213. }