Linux namespace

linux下命名空间是一种环境隔离的方法,基于内核态,通过命名空间可以将一些进程抽象到不同的容器中,使得各个容器彼此隔离,但是隔离之后相互间能否存在一些共享,就看你创建namespace的选项了

目前namespaces官方有如下种类:

 Mount namespaces	CLONE_NEWNS
 UTS namespaces	 	CLONE_NEWUTS
 IPC namespaces	 	CL[......]

Read more

不同CPU指令集添加编译选项

今天在处理程序在不同CPU架构,不同的指令集上编译的运行问题,其实没跨平台,算不上交叉编译,但需要将gcc按照不同cpu指令集在编译过程中提供给gcc选项,基本内容可以从gcc的man page里查找,下面是man里根据SSE4.2为标准的部分内容

core2
       Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 a[......]

Read more

TCP重组process_tcp

nids_run调用了pcap_loop,无止境地循环抓包,抓到的包传给回调函数nids_pcap_handle来处理,而回调函数最终都会调用gen_ip_proc来根据不同类型协议的包进行处理重组,process_tcp,process_udp等等

首先是IP和TCP的结构体,可能不同的linux操作系统定义不同,下面头文件CentOS6.4里的定义

IP结构体:/usr/include/net[……]

Read more

哈希表

一般的表,如果需要查找某个关键字的记录,就得从表头开始,挨个地比较记录a[i]和key的值是否相等,如果相等就算成功找到了,返回i;假如是有序表来查找,可以通过a[i]和key来二分查找,直到找到相应的i;最终为了找到那个i,其实也就是相对的下标,再通过顺序存储的存储位置来计算,也就是第一个元素内存存储位置加上i-1个单元位置LOC(ai)=LOC(a1)+(i-1)*c,得到最后内存地址

由此可[……]

Read more

libnids-1.24关于libglib错误引发对执行流程的思考

最近在自己PC上安装的虚拟机VMware里安装的CentOS7.0操作系统,在编译和使用libnids-1.24的时候,一直会出现奇怪的警告,最开始仅仅是编译的时候报警,库文件还是能正常生成,但是在使用用例的时候,调用库的时候还是会报错,也就是这问题不解决没法继续了;可服务器上CentOS6.4编译运行都无异常(可参考上篇),但是刚刚在疑惑中,仔细调试了一把,就更奇怪了,关于一个disable的选[……]

Read more

libnids安装和用例

原始的libnids是基于libpcap和libnet的,因此在安装的时候,必须要安装这两个模块才行,当然假如你是基于libnids来开发,不需要libnet,可以看下文档写的,disabled掉libnet,或者直接将libnids里的需要的源文件拔出来,供自己用

下面是原始官方的版本,libnids-1.24,libnet-1.19,libpcap-1.3.0,安装顺序和过程如下

依赖的版本有[……]

Read more

libnids处理流程

通常用的最多的是process_tcp,tcp_callback之类的,但是调用流程是啥样的,也许有人要说用source insight寻找函数call即可,但是估计会让人失望,不出意外只能查看到init过程中才包含有process_tcp,花点时间研究下整个过程

下面的源码全部基于libnids-1.24版本

1:libnids初始化

假如你程序基于libnids来实现的,首先要进行初始化,调用[……]

Read more

libnids常见函数

1:基本函数

int nids_init(void);

函数调用成功返回1,失败返回0;无参数

这个函数功能是对libnids进行初始化,也就是所有基于libnids的程序最开始调用的函数;包含的内容有打开网络接口,打开文件,编译设置过滤规则,判断链路层类型以及其它初始化

部分源码包含的函数调用

665     init_procs();
666     tcp_init(nids_params.n[......]

Read more