问题描述
我用winpcap+libnids解析tcp包。现在用wpcap捕获帧没有问题。但是换作libnids后,编译运行都没有错误,就是抓不到tcp的包,这可能是什么原因呢?(我用的是libnids1.19中的例子程序).............voidsniff_callback(structtcp_stream*a_tcp,void**this_time_not_needed){.............}intmain(){pcap_if_t*alldevs;pcap_if_t*d;intinum;inti=0;char*pi;charpo[100];//pcap_t*adhandle;charerrbuf[PCAP_ERRBUF_SIZE];char*net_interface;/*获取本机设备列表*/if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1){fprintf(stderr,"Errorinpcap_findalldevs:%sn",errbuf);exit(1);}/*打印列表*/for(d=alldevs;d;d=d->next){printf("%d.%s",++i,d->name);if(d->description)printf("(%s)n",d->description);elseprintf("(Nodescriptionavailable)n");}if(i==0){printf("nNointerfacesfound!MakesureWinPcapisinstalled.n");return-1;}printf("Entertheinterfacenumber(1-%d):",i);scanf("%d",&inum);if(inum<1||inum>i){printf("nInterfacenumberoutofrange.n");/*释放列表*/pcap_freealldevs(alldevs);return-1;}/*跳转到选中的适配器*/for(d=alldevs,i=0;i<inum-1;d=d->next,i++){//printf("d->name:%sn",d->name);}//d=alldevs->next;printf("d->name:%sn",d->name);pi=d->name;pi=pi+sizeof("rapcap://Device\")-1;printf("pi:%sn",pi);for(i=0;i<100;i++)po[i]='';strcpy(po,"\Device\");printf("%sn",po);strcat(po,pi);printf("%sn",po);net_interface=po;//此时就存储了我的网卡name指针nids_params.device=po;if(!nids_init()){fprintf(stderr,"%sn",nids_errbuf);exit(1);}nids_register_tcp(sniff_callback);nids_run();return0;}
解决方案
解决方案二:
nids_register_tcp(sniff_callback);你只是注册了一个回调函数,并没有写tcp怎么处理啊。
解决方案三:
同问,tcp回调函数根本就没有调用到