亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bpf_filter.c

?? 數據鏈路層的數據截取,主要用于各種型號網卡數據流的獲取
?? C
字號:
/*- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 *	The Regents of the University of California.  All rights reserved. * * This code is derived from the Stanford/CMU enet packet filter, * (net/enet.c) distributed as part of 4.3BSD, and code contributed * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence * Berkeley Laboratory. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)bpf.c	7.5 (Berkeley) 7/15/91 */#if !(defined(lint) || defined(KERNEL) || defined(_KERNEL))static const char rcsid[] _U_ =    "@(#) $Header: /tcpdump/master/libpcap/bpf/net/bpf_filter.c,v 1.44 2003/11/15 23:24:07 guy Exp $ (LBL)";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifdef WIN32#include <pcap-stdinc.h>#else /* WIN32 */#include <sys/param.h>#include <sys/types.h>#include <sys/time.h>#define	SOLARIS	(defined(sun) && (defined(__SVR4) || defined(__svr4__)))#if defined(__hpux) || SOLARIS# include <sys/sysmacros.h># include <sys/stream.h># define	mbuf	msgb# define	m_next	b_cont# define	MLEN(m)	((m)->b_wptr - (m)->b_rptr)# define	mtod(m,t)	((t)(m)->b_rptr)#else# define	MLEN(m)	((m)->m_len)#endif#endif /* WIN32 */#include <pcap-bpf.h>#if !defined(KERNEL) && !defined(_KERNEL)#include <stdlib.h>#endif#define int32 bpf_int32#define u_int32 bpf_u_int32#ifndef LBL_ALIGN/* * XXX - IA-64?  If not, this probably won't work on Win64 IA-64 * systems, unless LBL_ALIGN is defined elsewhere for them. * XXX - SuperH?  If not, this probably won't work on WinCE SuperH * systems, unless LBL_ALIGN is defined elsewhere for them. */#if defined(sparc) || defined(__sparc__) || defined(mips) || \    defined(ibm032) || defined(__alpha) || defined(__hpux) || \    defined(__arm__)#define LBL_ALIGN#endif#endif#ifndef LBL_ALIGN#ifndef WIN32#include <netinet/in.h>#endif#define EXTRACT_SHORT(p)	((u_short)ntohs(*(u_short *)p))#define EXTRACT_LONG(p)		(ntohl(*(u_int32 *)p))#else#define EXTRACT_SHORT(p)\	((u_short)\		((u_short)*((u_char *)p+0)<<8|\		 (u_short)*((u_char *)p+1)<<0))#define EXTRACT_LONG(p)\		((u_int32)*((u_char *)p+0)<<24|\		 (u_int32)*((u_char *)p+1)<<16|\		 (u_int32)*((u_char *)p+2)<<8|\		 (u_int32)*((u_char *)p+3)<<0)#endif#if defined(KERNEL) || defined(_KERNEL)# if !defined(__hpux) && !SOLARIS#include <sys/mbuf.h># endif#define MINDEX(len, _m, _k) \{ \	len = MLEN(m); \	while ((_k) >= len) { \		(_k) -= len; \		(_m) = (_m)->m_next; \		if ((_m) == 0) \			return 0; \		len = MLEN(m); \	} \}static intm_xword(m, k, err)	register struct mbuf *m;	register int k, *err;{	register int len;	register u_char *cp, *np;	register struct mbuf *m0;	MINDEX(len, m, k);	cp = mtod(m, u_char *) + k;	if (len - k >= 4) {		*err = 0;		return EXTRACT_LONG(cp);	}	m0 = m->m_next;	if (m0 == 0 || MLEN(m0) + len - k < 4)		goto bad;	*err = 0;	np = mtod(m0, u_char *);	switch (len - k) {	case 1:		return (cp[0] << 24) | (np[0] << 16) | (np[1] << 8) | np[2];	case 2:		return (cp[0] << 24) | (cp[1] << 16) | (np[0] << 8) | np[1];	default:		return (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | np[0];	}    bad:	*err = 1;	return 0;}static intm_xhalf(m, k, err)	register struct mbuf *m;	register int k, *err;{	register int len;	register u_char *cp;	register struct mbuf *m0;	MINDEX(len, m, k);	cp = mtod(m, u_char *) + k;	if (len - k >= 2) {		*err = 0;		return EXTRACT_SHORT(cp);	}	m0 = m->m_next;	if (m0 == 0)		goto bad;	*err = 0;	return (cp[0] << 8) | mtod(m0, u_char *)[0]; bad:	*err = 1;	return 0;}#endif/* * Execute the filter program starting at pc on the packet p * wirelen is the length of the original packet * buflen is the amount of data present * For the kernel, p is assumed to be a pointer to an mbuf if buflen is 0, * in all other cases, p is a pointer to a buffer and buflen is its size. */u_intbpf_filter(pc, p, wirelen, buflen)	register struct bpf_insn *pc;	register u_char *p;	u_int wirelen;	register u_int buflen;{	register u_int32 A, X;	register int k;	int32 mem[BPF_MEMWORDS];#if defined(KERNEL) || defined(_KERNEL)	struct mbuf *m, *n;	int merr, len;	if (buflen == 0) {		m = (struct mbuf *)p;		p = mtod(m, u_char *);		buflen = MLEN(m);	} else		m = NULL;#endif	if (pc == 0)		/*		 * No filter means accept all.		 */		return (u_int)-1;	A = 0;	X = 0;	--pc;	while (1) {		++pc;		switch (pc->code) {		default:#if defined(KERNEL) || defined(_KERNEL)			return 0;#else			abort();#endif		case BPF_RET|BPF_K:			return (u_int)pc->k;		case BPF_RET|BPF_A:			return (u_int)A;		case BPF_LD|BPF_W|BPF_ABS:			k = pc->k;			if (k + sizeof(int32) > buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				A = m_xword(m, k, &merr);				if (merr != 0)					return 0;				continue;#else				return 0;#endif			}			A = EXTRACT_LONG(&p[k]);			continue;		case BPF_LD|BPF_H|BPF_ABS:			k = pc->k;			if (k + sizeof(short) > buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				A = m_xhalf(m, k, &merr);				if (merr != 0)					return 0;				continue;#else				return 0;#endif			}			A = EXTRACT_SHORT(&p[k]);			continue;		case BPF_LD|BPF_B|BPF_ABS:			k = pc->k;			if (k >= buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				n = m;				MINDEX(len, n, k);				A = mtod(n, u_char *)[k];				continue;#else				return 0;#endif			}			A = p[k];			continue;		case BPF_LD|BPF_W|BPF_LEN:			A = wirelen;			continue;		case BPF_LDX|BPF_W|BPF_LEN:			X = wirelen;			continue;		case BPF_LD|BPF_W|BPF_IND:			k = X + pc->k;			if (k + sizeof(int32) > buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				A = m_xword(m, k, &merr);				if (merr != 0)					return 0;				continue;#else				return 0;#endif			}			A = EXTRACT_LONG(&p[k]);			continue;		case BPF_LD|BPF_H|BPF_IND:			k = X + pc->k;			if (k + sizeof(short) > buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				A = m_xhalf(m, k, &merr);				if (merr != 0)					return 0;				continue;#else				return 0;#endif			}			A = EXTRACT_SHORT(&p[k]);			continue;		case BPF_LD|BPF_B|BPF_IND:			k = X + pc->k;			if (k >= buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				n = m;				MINDEX(len, n, k);				A = mtod(n, u_char *)[k];				continue;#else				return 0;#endif			}			A = p[k];			continue;		case BPF_LDX|BPF_MSH|BPF_B:			k = pc->k;			if (k >= buflen) {#if defined(KERNEL) || defined(_KERNEL)				if (m == NULL)					return 0;				n = m;				MINDEX(len, n, k);				X = (mtod(n, char *)[k] & 0xf) << 2;				continue;#else				return 0;#endif			}			X = (p[pc->k] & 0xf) << 2;			continue;		case BPF_LD|BPF_IMM:			A = pc->k;			continue;		case BPF_LDX|BPF_IMM:			X = pc->k;			continue;		case BPF_LD|BPF_MEM:			A = mem[pc->k];			continue;		case BPF_LDX|BPF_MEM:			X = mem[pc->k];			continue;		case BPF_ST:			mem[pc->k] = A;			continue;		case BPF_STX:			mem[pc->k] = X;			continue;		case BPF_JMP|BPF_JA:			pc += pc->k;			continue;		case BPF_JMP|BPF_JGT|BPF_K:			pc += (A > pc->k) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JGE|BPF_K:			pc += (A >= pc->k) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JEQ|BPF_K:			pc += (A == pc->k) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JSET|BPF_K:			pc += (A & pc->k) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JGT|BPF_X:			pc += (A > X) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JGE|BPF_X:			pc += (A >= X) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JEQ|BPF_X:			pc += (A == X) ? pc->jt : pc->jf;			continue;		case BPF_JMP|BPF_JSET|BPF_X:			pc += (A & X) ? pc->jt : pc->jf;			continue;		case BPF_ALU|BPF_ADD|BPF_X:			A += X;			continue;		case BPF_ALU|BPF_SUB|BPF_X:			A -= X;			continue;		case BPF_ALU|BPF_MUL|BPF_X:			A *= X;			continue;		case BPF_ALU|BPF_DIV|BPF_X:			if (X == 0)				return 0;			A /= X;			continue;		case BPF_ALU|BPF_AND|BPF_X:			A &= X;			continue;		case BPF_ALU|BPF_OR|BPF_X:			A |= X;			continue;		case BPF_ALU|BPF_LSH|BPF_X:			A <<= X;			continue;		case BPF_ALU|BPF_RSH|BPF_X:			A >>= X;			continue;		case BPF_ALU|BPF_ADD|BPF_K:			A += pc->k;			continue;		case BPF_ALU|BPF_SUB|BPF_K:			A -= pc->k;			continue;		case BPF_ALU|BPF_MUL|BPF_K:			A *= pc->k;			continue;		case BPF_ALU|BPF_DIV|BPF_K:			A /= pc->k;			continue;		case BPF_ALU|BPF_AND|BPF_K:			A &= pc->k;			continue;		case BPF_ALU|BPF_OR|BPF_K:			A |= pc->k;			continue;		case BPF_ALU|BPF_LSH|BPF_K:			A <<= pc->k;			continue;		case BPF_ALU|BPF_RSH|BPF_K:			A >>= pc->k;			continue;		case BPF_ALU|BPF_NEG:			A = -A;			continue;		case BPF_MISC|BPF_TAX:			X = A;			continue;		case BPF_MISC|BPF_TXA:			A = X;			continue;		}	}}/* * Return true if the 'fcode' is a valid filter program. * The constraints are that each jump be forward and to a valid * code.  The code must terminate with either an accept or reject. * 'valid' is an array for use by the routine (it must be at least * 'len' bytes long). * * The kernel needs to be able to verify an application's filter code. * Otherwise, a bogus program could easily crash the system. */intbpf_validate(f, len)	struct bpf_insn *f;	int len;{	register int i;	register struct bpf_insn *p;	for (i = 0; i < len; ++i) {		/*		 * Check that that jumps are forward, and within		 * the code block.		 */		p = &f[i];		if (BPF_CLASS(p->code) == BPF_JMP) {			register int from = i + 1;			if (BPF_OP(p->code) == BPF_JA) {				if (from + p->k >= (unsigned)len)					return 0;			}			else if (from + p->jt >= len || from + p->jf >= len)				return 0;		}		/*		 * Check that memory operations use valid addresses.		 */		if ((BPF_CLASS(p->code) == BPF_ST ||		     (BPF_CLASS(p->code) == BPF_LD &&		      (p->code & 0xe0) == BPF_MEM)) &&		    (p->k >= BPF_MEMWORDS || p->k < 0))			return 0;		/*		 * Check for constant division by 0.		 */		if (p->code == (BPF_ALU|BPF_DIV|BPF_K) && p->k == 0)			return 0;	}	return BPF_CLASS(f[len - 1].code) == BPF_RET;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美无乱码久久久免费午夜一区 | 日韩一级在线观看| 精品一区二区综合| 国产精品毛片久久久久久| 欧美色视频在线观看| 久久不见久久见中文字幕免费| 亚洲欧美日韩国产中文在线| 欧美日韩国产综合草草| 免费精品99久久国产综合精品| 亚洲国产精品av| 日韩无一区二区| 欧美丰满少妇xxxxx高潮对白| 国产福利一区二区三区视频 | 欧美性猛交xxxxxx富婆| 国产成人av电影在线| 婷婷国产在线综合| ㊣最新国产の精品bt伙计久久| 日韩欧美国产系列| 欧美久久久久中文字幕| 91福利国产精品| 91国偷自产一区二区使用方法| 国产成a人亚洲| 国产成人在线视频播放| 国产专区综合网| 另类综合日韩欧美亚洲| 久久激情五月激情| 美脚の诱脚舐め脚责91| 成人黄色在线看| 国产乱子伦视频一区二区三区 | 亚洲综合色成人| 欧美日韩精品二区第二页| 色先锋资源久久综合| 99久久免费视频.com| 91在线码无精品| 欧美性大战久久久久久久蜜臀| 在线视频一区二区免费| 欧美猛男gaygay网站| 91精品国产综合久久精品| 日韩欧美国产电影| 中文字幕av一区 二区| 自拍偷在线精品自拍偷无码专区| 亚洲欧美经典视频| 紧缚奴在线一区二区三区| 成人成人成人在线视频| 欧美日韩一区二区三区不卡| 亚洲人成人一区二区在线观看| 欧美日韩电影一区| 7799精品视频| 精品国产凹凸成av人网站| 国产视频视频一区| 午夜视黄欧洲亚洲| 91国偷自产一区二区开放时间 | av综合在线播放| 日韩一区二区视频在线观看| 国产精品久久久久永久免费观看 | 欧美日韩免费一区二区三区视频| 欧美日韩一区二区三区视频| 久久精品一区二区| 国产精品系列在线播放| 91在线观看下载| 日韩免费看的电影| 136国产福利精品导航| 美女一区二区视频| 欧美色成人综合| 中文字幕中文字幕一区二区| 国产乱对白刺激视频不卡| 欧美日韩免费在线视频| 一区二区三区四区乱视频| caoporm超碰国产精品| 亚洲国产精品激情在线观看| 国产一区视频在线看| 久久一区二区视频| 丁香亚洲综合激情啪啪综合| 337p日本欧洲亚洲大胆精品| 午夜激情久久久| 91香蕉视频mp4| 国产精品久久久久aaaa| 东方aⅴ免费观看久久av| 国产日韩欧美精品在线| 极品少妇xxxx偷拍精品少妇| 日韩欧美成人午夜| 日本欧美一区二区三区乱码 | 91精品国产麻豆| 日韩高清不卡一区二区| 日韩精品一区二区三区中文不卡| 免费在线看成人av| 欧美本精品男人aⅴ天堂| 国产精品69毛片高清亚洲| 国产精品久久久久久久久图文区| 91久久精品一区二区三区| 免费成人结看片| 国产精品久久久一本精品| 北条麻妃国产九九精品视频| 亚洲激情图片小说视频| 欧美一区二区视频在线观看2022| 日韩成人午夜电影| 国产精品水嫩水嫩| 欧美一卡二卡在线| 国产日韩欧美激情| 欧美丰满一区二区免费视频| 不卡的av在线| 极品销魂美女一区二区三区| 日韩一区日韩二区| 欧美xxx久久| 欧美揉bbbbb揉bbbbb| 国产精一区二区三区| 亚洲图片欧美色图| 中文无字幕一区二区三区| 欧美成人精品1314www| 欧美精品 日韩| 色8久久人人97超碰香蕉987| 国产成人精品影院| 日本女人一区二区三区| 亚洲黄色免费网站| 中文字幕亚洲不卡| 久久久精品欧美丰满| 欧美大胆人体bbbb| 日韩午夜在线观看| 3d动漫精品啪啪一区二区竹菊 | 欧美日韩色综合| 99精品一区二区| 99久久亚洲一区二区三区青草 | 午夜成人在线视频| 一区二区三区欧美亚洲| 国产精品久久久久久妇女6080| 久久精品这里都是精品| 久久夜色精品一区| 国产视频一区在线播放| 亚洲人成在线播放网站岛国| 亚洲人成在线观看一区二区| 国产精品青草久久| 国产精品毛片大码女人 | 91精品婷婷国产综合久久竹菊| 成人av电影在线| 成人免费高清视频在线观看| 成人免费高清在线| 久久久亚洲精品一区二区三区| 欧美成人女星排行榜| 久久九九影视网| 日本一区二区视频在线| 亚洲精品伦理在线| 久久av老司机精品网站导航| 国产a精品视频| 欧美中文字幕一区二区三区| 91精品婷婷国产综合久久性色| 欧美精品一区二区三区在线播放| 日本一区二区三区免费乱视频| 亚洲男女毛片无遮挡| 久久精品72免费观看| 成人免费视频免费观看| 91国产免费观看| 日韩欧美国产一区二区在线播放| 国产亚洲精品bt天堂精选| 日韩中文字幕亚洲一区二区va在线| 久久精品国产**网站演员| av成人免费在线| 在线电影欧美成精品| 亚洲国产精品av| 精品一区二区三区久久| 欧美精品一级二级| 午夜精品久久久久久不卡8050| 成人在线视频首页| 91麻豆精品国产91久久久更新时间| 1000部国产精品成人观看| 极品美女销魂一区二区三区 | 这里只有精品99re| 亚洲九九爱视频| 成人免费视频国产在线观看| 精品国产自在久精品国产| 免费人成精品欧美精品| 欧美日韩综合色| 亚洲欧洲综合另类| 97精品久久久久中文字幕| 日本一区二区免费在线观看视频 | 久久久国产午夜精品 | 波多野结衣欧美| 国产在线看一区| 欧美日韩大陆在线| 日本视频在线一区| 欧美三级乱人伦电影| 亚洲va国产天堂va久久en| 欧美日韩国产bt| 精品一区二区在线视频| 精品蜜桃在线看| 国产一区二区三区视频在线播放| 日韩欧美亚洲另类制服综合在线| 视频一区二区国产| 欧美一二三区在线| 成人高清av在线| 亚洲免费观看在线视频| 国产成人精品免费| 夜夜精品视频一区二区| 欧美性感一区二区三区| 五月婷婷久久综合| 2020国产精品自拍| 成人免费高清视频| 一区二区三区在线免费播放| 欧美午夜片在线看| 久久精品久久99精品久久| 日韩欧美一二三区|