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(目录)

扫描二维码关注公众号,回复: 3660552 查看本文章

先编译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下载



猜你喜欢

转载自blog.csdn.net/feixi7358/article/details/79817604