libnids的基本运行流程:initialize、register callbacks、run、react。分别对应函数:nids_init()、register_callback_tcp或register_callback_ip或register_callback_udp、nids_run()、nids_kill_tcp()


nids_run(),TCP stream object:TCP state、client data、server data、source IP,port、dest IP,port、seq,ack,etc...

                     UDP packet:source IP,port、dest IP,port、UDP payload

                     IP packet:struct IP packet、contains upper、layers


libnids TCP states:NIDS_JUST_ESTABLISHED、NIDS_DATA、NIDS_RESET,NIDS_CLOSE、NIDS_TIMED_OUT


在register_callback_tcp函数中调用的函数的主要功能就是,将源ip和端口以及目的ip和端口传到buffer中,然后根据TCP状态来判断接下来的操作。


在运行无错误的那个程序(new.c)时遇到了比较常见的问题,捕捉不到包。

1.可能因为no suitable device found,但是有时在运行时加上sudo,运行后很快退出或者捕捉不到包。尝试了几个device值,都无用。


2.关闭了校验和的计算

struct nids_chksum_ctl temp;

 temp.netaddr=0;

 temp.mask=0;

 temp.action=0;

 nids_register_chksum_ctl(&temp,1);

但是还是捕捉不到包


3.删除/etc/udev/rules.d/70-persistent-net.rules文件,重启系统。没用


4.将虚拟网卡全部禁用,只留本机的网卡,没用。。。


对于那个以前有错误的程序(old.c),删除struct pcap_if,因为重复定义。在main中同样不需要为alldevs和seconddev重新声明,避免重复定义。在tcp_protocol_callback函数中代码,如上述的程序中所示。在此函数前面加上上述程序的char_to_ascii定义。对应头文件加上。

修改之后,此程序(no)和上述程序唯一的区别在于main函数。


两个程序都捕捉不到包。