欢迎来到天天文库
浏览记录
ID:21160090
大小:89.00 KB
页数:10页
时间:2018-10-20
《用perl实现一个简单的nids》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、用PERL实现一个简单的NIDS~教育资源库 随着对网络安全需求的深入开发,基于网络的入侵检测技术已经成为一个重要且有意思的研究方向。想学习NIDS技术除了去读一些现成的资料和一些开源系统的源码,最好的办法莫过于自己去写一个NIDS程序,只有那样才能真正体会到一些NIDS的实现需求和设计妙处。 本质上说NIDS只是一种网络流量的分析工具,通过对网络流量的分析识别出一些已知或未知的攻击行为,一个最简单的NIDS完成的主要工作也就是抓包->协议解码->匹配,众所周知PERL是极其强大的脚本语言,尤其是它的字符串处理
2、能力可以方便地实现对于网络流量中恶意特征进行匹配。当然PERL毕竟只是脚本语言,它的执行效率不允许用于真正大流量生产性环境,但PERL的简单易学及强大功能对于实现一个简单的NIDS达到学习的目的无疑是非常好的,下面我介绍一个用PERL实现的简单NIDS框架,我们将在Linux下实现它,在其他操作系统上类似。 PERL的一个强大特性就在于它海量的CPAN模块库,很多你想实现的功能都可以找到现成的模块,你所要做的只是安装上那些模块即可,关于PERL的模块及面向对象特性的管理和使用在这就不介绍了,请参看相关资料,比如O'R
3、EILLY出版的《高级Perl编程》。在用PERL编写网络流量分析脚本之前,需要安装一些底层的抓包及基本的数据包解码模块,包括如下这些: .tcpdump.org/release/libpcap-0.8.1.tar.gz 底层基本的抓包库。 .cpan.org/authors/id/T/TI/TIMPOTTER/Net-Pcap-0.04.tar.gz libpcap的PERL接口。 .cpan.org/authors/id/T/TI/TIMPOTTER/Net-PcapUtils-0.01.tar.gz Net-
4、Pcap模块的ents/suggestionstostardustatxfocusdotorg # # #$Id:perl-ids.pl,v1.162004/03/0421:51:12stardustExp$ # #引用所有相关的模块 useNet::PcapUtils; useNetPacket::Etherqonitorlog=monitor.log; #以后台进程方式运行 daemon(); subdaemon{ unless(fork){ SniffLoop(); exit0; } exi
5、t1; } #抓包循环 subSniffLoop{ #进入工作目录 chdir($onitorlog); #设置文件读写为非缓冲模式 select(ATTACKLOG);$ ++;select(MONITORLOG);$ ++;select(STDOUT);$ ++; #设置信号处理函数,因为程序运行于后台,退出时需要利用信号处理函数做些清理工作 $SIG{INT}='HandleINT'; $SIG{TERM}='HandleTERM'; #进入抓包回调函数 Net::
6、PcapUtils::loop(sniffit,SNAPLEN=>1800,Promisc=>1,FILTER=>'tcporudp',DEV=>'eth0'); } subsniffit{ my($args,$header,$packet)=_; #解码IP包 $ip=NetPacket::IP->decode(eth_strip($pac123456下一页友情提醒:,特别!ket)); #TCP协议 if($ip->{proto}==IP_P
7、ROTO_TCP){ #解码TCP包 $tcp=NetPacket::TCP->decode($ip->{data}); #检查来自SMB客户端的包 if(($tcp->{dest_port}==139) ($tcp->{dest_port}==445)){ #如果目的端口是139或445,认为是SMB协议包,做相应的检查 SmbClientCheck($ip->{src_ip},$tcp->{src_port},$ip->{dest_ip},$tcp->{dest
8、_port},$tcp->{data}); }elsif($tcp->{dest_port}==21){ #如果目的端口是21,认为是FTP协议,做相应的检查 FtpClientCheck($ip->{src_ip},$tcp->{src_por
此文档下载收益归作者所有