============================================================
maoyong:2008.7.27
这是一个抓包程序的的回调函数,我自己写的一个抓包程序的片段,要求是回调函数使用者可以添加任意自己想要的参数。这里我用了一个数据结构,由于数据结构是一个32位的指针,所以用户可以回调函数使用者可以自己填写数据结构,从而获得需要的参数。
这里省略了大部分代码,以免得boss不高兴。
(呵呵莫怪莫怪,如果有人对抓包比较感兴趣建议自己查看libpcap源代码。)
============================================================
//关键部分,这里只要定义下,不用实现,实现可以有,调用者按照自己需要填写。
struct user_param;
typedef void (*handler)(char *package, int package_len, struct user_param *param);
int package_loop(char *device, handler call_back, struct user_param *param)
{
// 省略.....
while(1) {
recv_byte = recvfrom(sock_fd, buf, 1024, MSG_TRUNC,(struct sockaddr *) &from, &fromlen);
if (recv_byte > 0) {
eh = (struct eth_header *)buf;
if((ntohs(eh->type) == 0x88ba)
|| (ntohs(eh->type) == 0x8100)
) {
(*call_back)(buf, recv_byte, param);
}
}
buf[0] = '\0';
} while (recv_byte == -1 && errno == EINTR );
close(sock_fd);
return 0;
}
阅读(3962) | 评论(0) | 转发(0) |