Chinaunix首页 | 论坛 | 博客
  • 博客访问: 924665
  • 博文数量: 194
  • 博客积分: 7991
  • 博客等级: 少将
  • 技术积分: 2067
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-09 22:03
文章分类

全部博文(194)

文章存档

2010年(8)

2009年(71)

2008年(109)

2007年(6)

我的朋友

分类: LINUX

2008-02-21 14:10:22

 

示例代码来自PF_RING:

static int set_if_promisc(const char *device, int set_promisc) {
    int sock_fd;
    struct ifreq ifr;
    
    if(device == NULL) return(-3);
    
    sock_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    if(sock_fd <= 0) return(-1);
    
    memset(&ifr, 0, sizeof(ifr));
    strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
    if(ioctl(sock_fd, SIOCGIFFLAGS, &ifr) == -1) {
        close(sock_fd);
        return(-2);
    }    
    
    if(set_promisc) {
        if((ifr.ifr_flags & IFF_PROMISC) == 0) ifr.ifr_flags |= IFF_PROMISC;
    } else {
        /* Remove promisc */
        if((ifr.ifr_flags & IFF_PROMISC) != 0) ifr.ifr_flags &= ~IFF_PROMISC;
    }
    
    if(ioctl(sock_fd, SIOCSIFFLAGS, &ifr) == -1)
        return(-1);
    
    close(sock_fd);
    return(0);
}

sxg

阅读(1637) | 评论(0) | 转发(0) |
0

上一篇:[转]与妻书

下一篇:反转一个单链表

给主人留下些什么吧!~~