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函数。
两个程序都捕捉不到包。
转载于:https://blog.51cto.com/yuzwei/1649599