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