UNIX网络编程:网络数据包检测
副标题[/!--empirenews.page--]
网络数据包检测 数据包捕获(sniffer):是指在网络上进行数据收集的行为,需要通过网卡来完成。 三种访问方式: BSD Packet Filter(BPF) SVR4 Datalink Provider Interface(DLPI) linux SOCK_PACKET interface libpcap库 安装: apt-get install libpcap-dev 常用API 捕获数据包 查找缺省的用来捕获数据网络设备 char * pcap_lookupdev ( char * errbuf )//出错时保存系统返回的错误信息。 返回值: 成功时返回指向设备名称的指针, 失败返回NULL 查找指定设备的网络号和子网掩码 int pcap_lookupnet( const char * device,//指向设备名称的指针 bpf_u_int32 * netp,//指向获取的网络号的指针 bpf_u_int32 * maskp,//指向获取的子网掩码的指针 char * errbuf)//出错时保存系统返回的错误信息 返回值: 成功返回0, 失败返回-1,并保存错误信息到errbuf中。 打开一个网络设备用于捕获数据包 pcap_t * pcap_open_live( const char * device,//指向设备名称的指针 int snaplen, //捕获的数据包的长度 int promisc,//网络接口工作模式 int to_ms,//读取数据包时的超时 char * errbuf)//出错时保存系统错误信息 返回值: 成功返回捕获数据包的句柄 失败返回NULL并保存错误信息到errbuf中 捕获下一帧数据 const u_char * pcap_next ( pcap_t * p//pcap_open_live返回的句柄 struct pcap_pkthdr * h)保存捕获的数据包属性的结构体指针 返回值: 成功时返回捕获的数据帧的指针, 失败或无数据返回NULL。 循环捕获多帧数据并处理 typedef void ( * pcap_handler )( u_char *user, const struct pcap_pkthdr * h,const u_char *bytes); int pcap_loop( pcap_t * p,//pcap_open_live返回的句柄 int cnt,//要捕获的数据帧的个数 pcap_handler callback,//捕获到一帧数据时执行的处理函数 u_char * user )//传递给callback的参数 查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/ (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |