Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1040377
  • 博文数量: 264
  • 博客积分: 6005
  • 博客等级: 大校
  • 技术积分: 2798
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 20:15
文章分类

全部博文(264)

文章存档

2011年(42)

2010年(213)

2009年(4)

2008年(2)

2007年(3)

分类:

2008-07-27 20:06:03

============================================================

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;
}


阅读(3927) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~