Libnids---编写网络应用程序的利器
一.前言
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
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---编写网络应用程序的利器的更多相关文章
- [转]提高 Linux 上 socket 性能,加速网络应用程序的 4 种方法
原文链接:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在 ...
- 使用 Java 开发兼容 IPv6 的网络应用程序
根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从 ...
- 提高 Linux 上 socket 性能 加速网络应用程序的 4 种方法
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信.与其他 API 一样,您可以通过一些方法使用 Soc ...
- CSharpGL(11)用C#直接编写GLSL程序
CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...
- 在Linux上编写C#程序
自从C#开源之后,在Linux编写C#程序就成了可能.Mono-project就是开源版本的C#维护项目.在Linux平台上使用的C#开发工具为monodevelop.安装方式如下: 首先需要安装一些 ...
- 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n
35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...
- Netty 异步的、事件驱动的网络应用程序框架和工具
Netty是由JBOSS提供的一个Java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 项目地址:https://githu ...
- 如何让VS2013编写的程序
总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...
- 编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值
编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值 1 #import <Foundation/Foundation.h> 2 3 int main( ...
随机推荐
- PC-老鸟装机
老鸟装机 一.硬件安装莫疏忽 1>安装硬盘有讲究 1.单硬盘+单光驱 IDE1----硬盘(Mastet接口) IDE2----光驱(Mastet接口) ...
- Robotium学习笔记三
以下是从网络上抄录的一些Robotium注意事项 1)有些button没有string,没有text,只能通过index来click这样很不直观,而且button的index并不是固定的,有可能随着控 ...
- CSS入门基础
认识CSS 传统HTML设计网页版面的缺点 CSS的特点 CSS的排版样式 13.1 认识CSS CSS的英文全名是Cascading Style Sheets,中文可翻译为串接式排版样式,并且CSS ...
- github上值得关注的前端项目
https://segmentfault.com/a/1190000002804472
- JQuery- 解析JSON数据
我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法.上例中得到的JSON数据如下,是一个嵌套JSON: {,,"nickname&qu ...
- 【Android - 进阶】之事件分发机制
参考资料: View事件分发:http://blog.csdn.net/pi9nc/article/details/9281829 ViewGroup事件分发:http://blog.csdn.net ...
- Mybatis上路_06-使用Java自动生成
目录[-] 1.编写Generator执行配置文件: 2.在MyEclipse中建空web项目: 3.编写并执行Java程序: 4.查看并修改生成的文件: 5.测试,使用生成的文件查询: 1)导入My ...
- eclipse设置快捷键sysout+Alt+/后出System.out.println!亲測可用!
曾经一直用myeclipse,没有这方面的顾虑,如今换到了eclipse,非常多要自己设置了,比方非常多快捷键. 最经常使用的,执行到sysout ,eclipse总是不自己主动补全,非常是恼火!!! ...
- 在TextView使用部分颜色文字
/** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...
- pixel实践
安装pixel .安装node.js wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz 本地测试下载的是这个版本,如果要高版本的话可以找高版本 ...