if_promisc.c

来自「网络流量生成工具,开源软件,也可以作为网络流量检测软件使用」· C语言 代码 · 共 61 行

C
61
字号
/*  * $smu-mark$  * $name: if_promisc.c$  * $author: Salvatore Sanfilippo <antirez@invece.org>$  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$  * $license: This software is under GPL version 2 of license$  * $date: Fri Nov  5 11:55:48 MET 1999$  * $rev: 2$  */ #include <sys/types.h>#include <sys/ioctl.h>#include <string.h>#include <stdio.h>#include <netinet/in.h>#include <sys/socket.h>#include <net/if.h>#include "hping2.h"#include "globals.h"int if_promisc_on(int s){	struct ifreq ifr;	strncpy(ifr.ifr_name, ifname, IFNAMSIZ);	if ( ioctl(s, SIOCGIFFLAGS, &ifr) == -1) {		perror("[open_sockpacket] ioctl(SIOCGIFFLAGS)");		return -1;	}	if (!(ifr.ifr_flags & IFF_PROMISC)) {		ifr.ifr_flags |= IFF_PROMISC;		if ( ioctl(s, SIOCSIFFLAGS, &ifr) == -1) {			perror("[open_sockpacket] ioctl(SIOCSIFFLAGS)");			return -1;		}	}	return 0;}int if_promisc_off(int s){	struct ifreq ifr;	strncpy(ifr.ifr_name, ifname, IFNAMSIZ);	if ( ioctl(s, SIOCGIFFLAGS, &ifr) == -1) {		perror("[open_sockpacket] ioctl(SIOCGIFFLAGS)");		return -1;	}	if (ifr.ifr_flags & IFF_PROMISC) {		ifr.ifr_flags ^= IFF_PROMISC;		if ( ioctl(s, SIOCSIFFLAGS, &ifr) == -1) {			perror("[open_sockpacket] ioctl(SIOCSIFFLAGS)");			return -1;		}	}	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?