Libnids---编写网络应用程序的利器

摘要:
一.前言Libnids是一个用于网络入侵检测开发的专业编程接口,它使用Libpcap进行数据包的捕获。同时,Libnids提供了TCP/IP数据流重组功能,因此省去了应用层自己考虑数据分片、重传等情况的麻烦。当然,libnids还有一项非常实用的功能,那就是:TCP端口扫描检测和异常数据包的检测功能。三.libnids概述网上关于libnids的文章很多,这里就不详细介绍。我主要说一些,使用libnids过程中,需要注意的一些情况。1)windows下libnids的安装安装libnids前需要安装winpcap和libnet。

一.前言

Libnids是一个用于网络入侵检测开发的专业编程接口,它使用Libpcap进行数据包的捕获。同时,Libnids提供了TCP/IP数据流重组功能,因此省去了应用层自己考虑数据分片、重传等情况的麻烦。它是模仿了Linux 2.0.x的IP协议栈进行数据处理,因此非常稳定可靠。当然,libnids还有一项非常实用的功能,那就是:TCP端口扫描检测和异常数据包的检测功能。

二.应用背景

最近对之前做过的一个关于BT数据流检测及追踪程序进行重构,最大的改变就是抛弃之前在应用程序中自己考虑数据分片、重传等情况的做法,而改用 libnids作为底层数据接收端,然后再把数据交给上层BT数据处理模块进行解析。当然,这样做有极大的好处。主要体现在:

1)程序架构变得清晰而简洁。由于使用libnids来接收数据,上层模块可以专注于BT协议的解析,而不用考虑数据本身是否可靠。

2)内存管理变得简单。之前因为考虑数据的分片及重传,需要对TCP数据进行缓存,既浪费了内存空间,又带来了内存管理的麻烦。

经过重构,程序不仅在代码量上得到极大的简化,而且相比之前,性能更高,并且更稳定。最重要的是,在梳理之后,整个程序变得条理清晰,无论是从可靠性还是扩展性方面讲,都得到极大的提升。

三.libnids概述

网上关于libnids的文章很多,这里就不详细介绍。libnids的源码包中也提供了好几个例子,基本上涵盖了它主要API的用法。并且由于开源,可以直接从源码中窥探个究竟。我主要说一些,使用libnids过程中,需要注意的一些情况。

1)windows下libnids的安装

安装libnids前需要安装winpcap和libnet。其中winpcap(linux下是libpcap)是一个专业的捕包开发工 具;libnet是专业的网络数据包构造和发送开发工具(libcurl也具有类似的功能)。顺便说一下,有很多强悍的开源工具,都是以lib开头,可以 学会使用,能够极大减轻开发任务。winpcap和libnet的具体安装过程可以参见参考文献[2][3]。libnids的源码中直接就有VS工程, 可以进行编译安装。

2)libnids中的几个陷阱

(1)struct tuple4结构体存储连接双方ip和端口信息。需要注意的是,这里的源地址与目的地址可能跟我们想的不太一样。它跟一次通信中是由client像 server发送数据还是server像client发送数据无关,而是由一次连接是由谁发起来决定源地址和目的地址的。通俗的讲,如果A给B发送数 据,A不一定是源,B不一定是目的。只有当本次连接是由A发起时,A才是源,B是目的。

(2)当tcp_stream中的nids_state为NIDS_JUST_EST时,必须把client.collect和server.collect置成非零的数值,才能够在状态为NIDS_DATA时接受数据并进行处理。否则,数据都会被抛弃。

(3)void nids_discard(struct tcp_stream *a_tcp,int num)函数的用法:如果你期望将要处理的数据长度为n,但是已经收到的数据包总长度为m,其中m<n。那么你可以把第二个参数设置为0,告诉libnids这次数据暂时不处理,给我缓存起来,等到新的数据到来时,一块处理。说白了,该函数的意思就是把第一个参数a_tcp中缓存的数据丢掉第二个参数num个字节,如果还有剩余的话,留到下一次处理。

四.总结

上面提到的问题是我在项目中遇到的具体问题,当然,libnids的功能很强大,我只是利用到了它的TCP/IP数据重组的功能。其他关于libnids 的具体信息,可以参见参考文献[4][5]。

五.参考文献:

1.http://libnids.sourceforge.net/

2.http://blog.hfq.me/windows-libnet.html

3.http://hi.baidu.com/kuangxiangjie/blog/item/19e2c23f7505a7ca7c1e7160.html/cmtid/735b4a609ee549cf8db10dac

4.http://blog.csdn.net/kl222/article/details/6248827

5.http://www.linuxnote.org/libnids-api-chinese-version.html

from: http://blog.csdn.net/xywlzd/article/details/7931429

免责声明:文章转载自《Libnids---编写网络应用程序的利器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android WebView 超大字号适配问题CSS中元素在某一行上 居中/居左/居右下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WinPcap权威指南(一)

WinPcap是一个开源的网络抓包模块,顾名思义,它只能工作在Windows下,但本文介绍的知识并不局限于任何操作系统和开发语言,因为网络协议本身是没有这些区别的。阅读本指南之前,请先下载WinPcap安装到自己的电脑上,目前WinPcap的最新版本是4.1.3,支持基于NT核心的所有操作系统(从NT4一直到Win8),读者可以从官方网站http:/...

在Visual Studio 2005中使用WinPcap编写程序的配置方法

下面简介一下如何在Visual Studio 2005中使用WinPcap编写程序。这里只是编写程序之前对Visual Studio 2005的配置,具体如何编写程序,请参看具体WinPcap的文档:http://www.winpcap.org/docs/docs_412/html/main.html。 本教程是参考http://www.winpcap.o...

NetAnalyzer笔记 之 十三 NetAnalyzer 6.0 的使用方法 -- 2.抓包与数据选择

1.  NetAnalyzer使用方法 1.1.数据获取 通过上面的说明,我们已经可以很快的获取到网络数据了,但是,仅仅知道上面内容却远远不够。 在NetAnalyzer中将数据加载到软件有三种方式。   数据文件   字节字符串录入   网卡采集   抓包开始菜单 在开始标签中数据包组合数据采集组包含了这三种功能点 数据文件,很多的数据采集软件都具备...

【转】SHarpPcap(winpcap基于c#封转的库)网络嗅探程序核心

1. 获得网络设备 由于一个系统的网络设备可能不止一个,因而使用了一个列表类来保存所有的设备,这里使用了一个静态方法进行操作 /* Retrieve the device list */ PcapDeviceList devices = SharpPcap.GetAllDevices(); 获取列表后,就能对设备进行操作了,其实设备分为2个子类,一类是N...

windows网络流量监控

NPCap 官网 https://nmap.org/npcap/ 这是抓包必须先安装的工具,具体的原因可以看 https://github.com/buger/goreplay/wiki/Running-on-Windows due to the nature of different networking layer of Windows stack....

网络报文抓取研究

1     引言 网络报文抓取是指通过对主机网络设备的探测,实现获取该网络当前传输的所有信息,并根据信息的源主机、目标主机、服务协议和端口等信息简单过滤掉不关心数据,然后提交给上层应用程序进行进一步处理。 2     网络数据包捕获原理 一个包捕获机制包含三个主要部分 1) 包捕获机制 不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异...