1. 程式人生 > >windows下編譯snort

windows下編譯snort

編譯環境WIN10-x64,VS2013+Cygwin(要安裝bison、flex、sed)

從snort官網上下載  daq-2.0.6.tar.gz\snort-2.9.11.1.tar.gz

https://www.snort.org/downloads#snort-downloads


分別解壓,並將daq-2.0.6重新命名為daq並放在snort的第一層資料夾中


用VS2013開啟snort.dsw

snort-2.9.11.1\src\win32\WIN32-Prj(目錄)

先編譯daq報如下錯誤


修改如下

 再次編譯daq,報如下錯誤


此時是因為VS2013自帶的系統檔案in6addr.h

(路徑C:\Program Files (x86)\Windows Kits\8.1\Include\shared)

的聯合體成員數不夠


修改如下

再次編譯daq,還是出錯



修改方法(步驟有點多,請仔細看)

右鍵daq的屬性 新增VC++目錄—>包含目錄

$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)..\..\;$(SolutionDir)..\..\sfutil\;$(SolutionDir)..\..\..\daq\api\;



再在daq_common.h中引入  #include “sf_ip.h”  如下圖所示


進入sf_ip.h檔案加入

#ifdefined(WIN32) && !defined(__cplusplus) && !defined(inline)

#define inline__inline

#endif

 如下圖所示

再次編譯daq專案,成功如下圖


先編譯一下dynamic_preprocessors 會生成一些預設目錄(接下來會用到,不編譯就不會有include目錄)

 將reload_api.h 從\snort-2.9.11.1\src\   複製到\snort-2.9.11.1\src\dynamic-preprocessors\include\  目錄中

將sfmemcap.h/sfmemcap.c  從\snort-2.9.11.1\src\sfutil\  複製到\snort-2.9.11.1\src\dynamic-preprocessors\include\  之後修改\include\sfmemcap.c檔案內容,註釋#include”util.h”

將 reg_test.h/reg_test.c 從\snort-2.9.11.1\src\   複製到 \snort-2.9.11.1\src\dynamic-preprocessors\include\  目錄中

修改\snort-2.9.11.1\src\dynamic-preprocessors\dcerpc2\spp_dce2.c檔案如下圖所示


修改\snort-2.9.11.1\src\dynamic-preprocessors\include\sf_dynamic_preprocessor.h檔案

\snort-2.9.11.1\src\dynamic-plugins\sf_dynamic_preprocessor.h檔案   (相同的檔案)

成下圖所示

修改\snort-2.9.11.1\src\win32\WIN32-Includes\config.h檔案如下圖所示

將\snort-2.9.11.1\src\   中的 reload.c/.h和pkt_tracer.c/.h新增到snort專案中                                        

並修改pkt_tracer.c 檔案

新增

/*inet_ntop*/

staticconstchar*

inet_ntop_v4(constvoid*src,char*dst,size_tsize)

{

   constchardigits[]="0123456789";

   inti;

   structin_addr*addr=(structin_addr*)src;

   u_longa=ntohl(addr->s_addr);

   constchar*orig_dst=dst;

 

   if(size<INET_ADDRSTRLEN){

      errno=ENOSPC;

      returnNULL;

   }

   for(i=0;i<4;++i){

      intn=(a>>(24-i*8))&0xFF;

      intnon_zerop=0;

 

      if(non_zerop||n/100>0){

         *dst++=digits[n/100];

         n%=100;

         non_zerop=1;

      }

      if(non_zerop||n/10>0){

         *dst++=digits[n/10];

         n%=10;

         non_zerop=1;

      }

      *dst++=digits[n];

      if(i!=3)

         *dst++='.';

   }

   *dst++='\0';

   returnorig_dst;

}

 

#ifdefHAVE_IPV6

staticconstchar*

inet_ntop_v6(constvoid*src,char*dst, size_t size)

{

   constchar xdigits[]="0123456789abcdef";

   int i;

   conststruct in6_addr *addr =(struct in6_addr *)src;

   const u_char *ptr = addr->s6_addr;

   constchar*orig_dst = dst;

   int compressed =0;

 

   if(size < INET6_ADDRSTRLEN){

      errno = ENOSPC;

      return NULL;

   }

   for(i =0; i <8;++i){

      int non_zerop =0;

 

      if(compressed ==0&&

         ptr[0]==0&& ptr[1]==0&&

         i <=5&&

         ptr[2]==0&& ptr[3]==0&&

         ptr[4]==0&& ptr[5]==0){

 

         compressed =1;

 

         if(i ==0)

            *dst++=':';

         *dst++=':';

 

         for(ptr +=6, i +=3;

            i <8&& ptr[0]==0&& ptr[1]==0;

            ++i, ptr +=2);

 

         if(i >=8)

            break;

      }

 

      if(non_zerop ||(ptr[0]>>4)){

         *dst++= xdigits[ptr[0]>>4];

         non_zerop =1;

      }

      if(non_zerop ||(ptr[0]&0x0F)){

         *dst++= xdigits[ptr[0]&0x0F];

         non_zerop =1;

      }

      if(non_zerop ||(ptr[1]>>4)){

         *dst++= xdigits[ptr[1]>>4];

         non_zerop =1;

      }

      *dst++= xdigits[ptr[1]&0x0F];

      if(i !=7)

         *dst++=':';

      ptr +=2;

   }

   *dst++='\0';

   return orig_dst;

}

#endif/* HAVE_IPV6 */

 

constchar*

inet_ntop(intaf,constvoid*src,char*dst,size_tsize)

{

   switch(af){

   caseAF_INET:

      returninet_ntop_v4(src,dst,size);

#ifdefHAVE_IPV6

   case AF_INET6:

      return inet_ntop_v6(src, dst, size);

#endif

   default:

      errno=EAFNOSUPPORT;

      returnNULL;

   }

}

/*inet_ntop end*/

到如下位置



此處省略了幾步,具體的步驟可在資源中下載完整的筆記!

編譯好的snort.exe


完整筆記前往

https://download.csdn.net/download/feixi7358/10327433

下載

想要編譯好的原始碼,可以前往

https://download.csdn.net/download/feixi7358/10327554  下載

想要編譯好的snort.exe,可前往https://download.csdn.net/download/feixi7358/10327445下載