热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux网络入侵检测软件

本软件是本人的毕业设计“作品”。当年是因为Ubuntu而认识了Linux,进而知道了有个开源的图形界面开发工具——GTK+,机缘巧合之下在图书馆发现有一本刘文涛老师写的《Linux网络入侵检

 

本软件是本人的毕业设计“作品”。当年是因为Ubuntu而认识了Linux,进而知道了有个开源的图形界面开发工具——GTK+,机缘巧合之下在图书馆发现有一本刘文涛老师写的《Linux网络入侵检测系统》,翻开看看,觉得很好玩。Google之后,“歌”告诉我:没有人提供源代码?没有人自己尝试做过?……OK,哥自己干。

 

 

一、环境配置

1.由于本软件使用了libpcap,因此首先安装它(Update:目前2010.7.4为止,选择的是最新版本1.1.1,2014.3.16下载时是1.5.3版):

1)downoad libpcap: http://www.tcpdump.org/release/

 

2)install the dependence packages oflibpcap:

sudo apt-get install flex

sudo apt-get install bison

 

3)install libpcap:

unzip

./configure

make

sudo make install

 

4)install rpm:

sudo apt-get install rpm

or you may receive following message:

error while loading shared libraries:libpcap.so.1: cannot open shared object file...

                                                                                                                                 ||

                                                                                                                                 ||== /usr/local/lib/

 

5)run the program as root, or you mayrelease: 

  a. no suitable device found(function pcap_lookupdev());

  b. You don't have permissionto capture on that device (socket: Operation not permitted) (functionpcap_open(), pcap_open_live()).

 

2.安装tcpstat(到目前为止,选择的是最新版本1.5

因为使用了GENERIC_LINK_OTHERETHER_ADDR_LEN等变量以及is_ip_packet(),get_ip_proto()等函数,安装tcpstathttp://www.frenchfries.net/paul/tcpstat/

 

3.安装tcpdump(到目前为止,选择的是最新版本4.1.1

其实可以不用安装(*^__^*)嘻嘻……当时是因为用到了函数tcpport_string()etheraddr_string()才装的,但运行时出现莫名其妙的问题,于是就把与tcpport_string()相关的所有变量、函数整体“移植”到我的程序中,而把etheraddr_string()函数舍弃掉了,换用了其它的方法,具体的替换方式可以参考刘文涛老师的《Linux网络入侵检测系统》和我的代码。

 

4.安装CGTK/GNOME开发环境(熟练工种可以跳过此步^_^

sudo apt-get install build-essential

sudo apt-get install gnome-core-devel

GTK+的开发还得安装这个,以方便查看相关的API函数:sudo apt-get install devhelp

 

5.手动配置头文件路径(此步很重要)

2步安装了tcpstat,现在要“include”它,得手动配置相关文件,使得编译器在编译时能够识别相关变量、结构体等,具体做法是将相关文件拷贝至/usr/local/include目录下:

首先在终端切换至/usr/local/include目录(而不是/usr/include目录,因为此目录中的相关头文件是系统的,所以使用“用户自己的include目录”),接着输入以下命令:sudomkdir tcpstat,创建一个文件夹tcpstat

然后切换到该文件夹,输入以下命令:sudocp /home/ubuntu/Downloads/tcpstat-1.5/include/packetdump.h.(个人具体环境不同,相应的路径自己改变),将packetdump.h文件拷贝至tcpstat文件夹下,注意到在packetdump.h文件中引用了tcpstat.h,就如法炮制,把它也给拷过来。又注意到在tcpstat.h文件中引用了*.*文件,如法炮制(需要注意的是,诸如stdio.hnet/ethernet.h等系统自带的头文件就不用“炮”了,编译器知道去哪儿找这种头文件,需要“炮”的是ethernet_stub.h),接着接续“炮”……(总共“炮”了三个packetdump.htcpstat.hethernet_stub.h

接着在/usr/local/include目录下创建tcpstat-packetdump.h文件:sudogvim tcpstat-packetdump.h,在其中加入以下内容:#include

也许你会问:为什么这么干呢?不嫌麻烦吗?问的好!第1步安装成功libpcap后它会在/usr/local/include目录下创建一个pcap文件夹和三个头文件:pcap.hpcap-bpf.hpcap-namedb.h,大家看了这三个头文件的内容后就会明白的:-)

2步中提到使用了is_ip_packet(),get_ip_proto()等函数,由于这两个函数在安装好的tcpstat目录下的lib/utils.c文件中,下面继续“炮”:

utils.c文件拷贝至/usr/local/include/tcpstat目录下,接着在/usr/local/include目录下建一个tcpstat-utils.c文件,加入相应内容。

好了,一切就绪,切换到源代码目录下make(源代码将会在后面提供下载地址),咦~终端输出以下东东:

In file included from/usr/local/include/tcpstat/packetdump.h:33,

from/usr/local/include/tcpstat-packetdump.h:3,

from callback.h:11,

from main.c:3:

/usr/local/include/tcpstat/tcpstat.h:261:error: conflicting types for ‘inet_ntop’

/usr/include/arpa/inet.h:65: note:previous declaration of ‘inet_ntop’ was here

oh,由于头文件错综复杂,函数重复定义了,怎么办?将“炮”过去的tcpstat.h文件的第261行注释掉。同样的utils.c中也是这种问题,那就同样的注释掉。

 

6.万事具备,只欠你实践^_^

make之后,切换到root用户,接着输入./NIDS,敲下空格键,现在可以喝杯水了,当然有西瓜吃更好:-)

 

 

二、问题与改进

由于做毕设期间时间比较紧,因此只实现了ARPIPTCP协议的分析,诸如UDPICMPHTTPTCP连接过程等没有实现,还有就是没有和MySQL连接数据库。

在第3步中提到把etheraddr_string()函数舍弃掉了,换用了其它的方法,我记得是关于MAC地址输出的问题,由于干毕设进度,没有深究,或许有错误。

相较与刘老师的程序,改进的地方有:


1)使用GtkUIManager来实现界面中的菜单栏和工具栏(不过其中的很多功能都没有实现哦,在终端中有相应的文字输出),关于GtkUIManager可以参考http://live.gnome.org/GnomeLove_2fUIManagerTutorial  原来的链接失效了,现在是这个https://wiki.gnome.org/GnomeLove/UIManagerTutorial

2)Content页面中的内容显示看起来更舒服,每一行显示16个字节的内容,且可打印字符用彩色显示,不过奇怪的是在Ubuntu10.04下显示的内容不齐(Update:Ubunu 13.10下也是这样,发现将系统的默认字体Ubuntu改为DejaVu Sans Mono就很神奇的显示正常了微笑不知为毛Ubuntu字体显示会有问题,有时间再仔细研究),由于做毕设期间使用的9.10版,没有出现这种现象(不过在9.10下有时候程序会崩溃,由于时间原因,10.04下没发现,不知是GTK+bug还是我的程序的问题)。截图分别如下(上面是Ubuntu9.10下的截图,下面是Ubuntu10.04下的截图)

 

关于分行友好显示十六进制内容和可打印字符内容,借鉴于www.tcpdump.org/sniffex.c

3)Sniffer(下面的)和Content页面的内容都是动态显示的,即当捕获到一个数据包在界面显示时,屏幕会随着往下滚动。

比较奇怪的一个问题是Sniffer(上面的)和AlertEvent页面中的时间项与同一行的其它项显示的内容不在同一条直线上,而是往上偏点儿,不知是什么原因(Update:Ubuntu 13.10下依旧如此,怀疑也是字体问题?)。

由于时间的原因,刘老师书中所使用的旧的GtkClistwidget没有用新的GtkTreeView重写,这也是有待改进的地方。

另外就是没有使用pthread类方法,而是用的gdkthread类方法,而且只创建了一个线程,原书中的创建两个线程的妙处没那么多时间和精力去琢磨。

至于使用的网卡设备,可以根据具体条件自己修改后再编译运行,比如我提供的源代码中的是eth0,若是无线网卡就是wlan0,这个可以通过在终端输入ifconfig等命令查看活跃网卡。捕获到的数据包数量也可以自定义,我提供的源码中是100个。

 

 

下面是源代码的下载地址(注意其中的rules文件中每一行的每个“变量”之间仅以一个tab键隔开):

http://download.csdn.net/source/2514975


推荐阅读
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • linux qt打开常用文件格式,设置Linux Qt文件默认打开方式为QtCreator
    Linux自定义文件打开方式也可参照文本抱歉,本文前段时间写的ubuntu下的Qt工程文件默认打开方式是不好用的,因为其他的文本文件也会受到影响,强迫症患者,每次打开Qt工程都是先 ... [详细]
author-avatar
玛丽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有