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

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

?? filter.c

?? WinCE 系統下
?? C
字號:
#include "packet.h"
#include "filter.h"

#define EXTRACT_SHORT(p)\
	((USHORT)\
		((USHORT)*((UCHAR *)p+0)<<8|\
		 (USHORT)*((UCHAR *)p+1)<<0))

#define EXTRACT_LONG(p)\
		((UINT)*((UCHAR *)p+0)<<24|\
		 (UINT)*((UCHAR *)p+1)<<16|\
		 (UINT)*((UCHAR *)p+2)<<8|\
		 (UINT)*((UCHAR *)p+3)<<0)

// Main filter routine
UINT bpf_filter (register struct bpf_insn *pc, register UCHAR *p, UINT wirelen, register UINT buflen)
{
	register UINT A, X;
	register int k;
	int mem[BPF_MEMWORDS];

	if (pc == NULL)
		return (UINT)-1;

	A = 0;
	X = 0;
	--pc;
	while (1) {
		++pc;
		switch (pc->code) {

		default:
		
			return 0;

		case BPF_RET|BPF_K:
			return (UINT)pc->k;

		case BPF_RET|BPF_A:
			return (UINT)A;

		case BPF_LD|BPF_W|BPF_ABS:
			k = pc->k;
			if (k + sizeof(int) > buflen) {
				return 0;
			}
			A = EXTRACT_LONG(&p[k]);
			continue;

		case BPF_LD|BPF_H|BPF_ABS:
			k = pc->k;
			if (k + sizeof(short) > buflen) {
				return 0;
			}
			A = EXTRACT_SHORT(&p[k]);
			continue;

		case BPF_LD|BPF_B|BPF_ABS:
			k = pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}
			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(int) > buflen) {
				return 0;
			}
			A = EXTRACT_LONG(&p[k]);
			continue;

		case BPF_LD|BPF_H|BPF_IND:
			k = X + pc->k;
			if (k + sizeof(short) > buflen) {
				return 0;
			}
			A = EXTRACT_SHORT(&p[k]);
			continue;

		case BPF_LD|BPF_B|BPF_IND:
			k = X + pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}
			A = p[k];
			continue;

		case BPF_LDX|BPF_MSH|BPF_B:
			k = pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}
			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 += ((int)A > (int)pc->k) ? pc->jt : pc->jf;
			continue;

		case BPF_JMP|BPF_JGE|BPF_K:
			pc += ((int)A >= (int)pc->k) ? pc->jt : pc->jf;
			continue;

		case BPF_JMP|BPF_JEQ|BPF_K:
			pc += ((int)A == (int)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:
			(int)A = -((int)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.
 */

int bpf_validate (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 >= 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;
}

/*
 * Execute the filter program starting at pc on the packet whose header is 
 * pointed by p and whose data is pointed by pd.
 * headersize is the size of the the header
 * wirelen is the length of the original packet
 * buflen is the amount of data present
 */

UINT bpf_filter_with_2_buffers(register struct bpf_insn *pc, register UCHAR *p,
								register UCHAR *pd, register int headersize, 
								UINT wirelen, register UINT buflen)
{
	register UINT A, X;
	register int k;
	int mem[BPF_MEMWORDS];

	if (pc == 0)
		return (UINT)-1;

	A = 0;
	X = 0;
	--pc;
	while (1) {
		++pc;
		switch (pc->code) {

		default:
		
			return 0;

		case BPF_RET|BPF_K:
			return (UINT)pc->k;

		case BPF_RET|BPF_A:
			return (UINT)A;

		case BPF_LD|BPF_W|BPF_ABS:
			k = pc->k;
			if (k + sizeof(int) > buflen) {
				return 0;
			}

			if(k<headersize) A = EXTRACT_LONG(&p[k]);
			 else A = EXTRACT_LONG(&pd[k-headersize]);

			continue;

		case BPF_LD|BPF_H|BPF_ABS:
			k = pc->k;
			if (k + sizeof(short) > buflen) {
				return 0;
			}

			if(k<headersize) A = EXTRACT_SHORT(&p[k]);
			 else A = EXTRACT_SHORT(&pd[k-headersize]);

			continue;

		case BPF_LD|BPF_B|BPF_ABS:
			k = pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}

			if(k<headersize) A = p[k];
			 else A = pd[k-headersize];

			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(int) > buflen) {
				return 0;
			}

			if(k<headersize) A = EXTRACT_LONG(&p[k]);
			 else A = EXTRACT_LONG(&pd[k-headersize]);

			 continue;

		case BPF_LD|BPF_H|BPF_IND:
			k = X + pc->k;
			if (k + sizeof(short) > buflen) {
				return 0;
			}

			if(k<headersize) A = EXTRACT_SHORT(&p[k]);
			 else A = EXTRACT_SHORT(&pd[k-headersize]);

			continue;

		case BPF_LD|BPF_B|BPF_IND:
			k = X + pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}

			if(k<headersize) A = p[k];
			 else A = pd[k-headersize];

			continue;

		case BPF_LDX|BPF_MSH|BPF_B:
			k = pc->k;
			if ((int)k >= (int)buflen) {
				return 0;
			}
			
			if((pc->k)<headersize) X = (p[pc->k] & 0xf) << 2;
			 else X = (pd[(pc->k)-headersize] & 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 += ((int)A > (int)pc->k) ? pc->jt : pc->jf;
			continue;

		case BPF_JMP|BPF_JGE|BPF_K:
			pc += ((int)A >= (int)pc->k) ? pc->jt : pc->jf;
			continue;

		case BPF_JMP|BPF_JEQ|BPF_K:
			pc += ((int)A == (int)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:
			(int)A = -((int)A);
			continue;

		case BPF_MISC|BPF_TAX:
			X = A;
			continue;

		case BPF_MISC|BPF_TXA:
			A = X;
			continue;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区四区久久| 成人97人人超碰人人99| 欧美日韩一区在线观看| 一个色在线综合| 精品视频一区二区三区免费| 午夜精品久久久久久| 51午夜精品国产| 美女视频黄 久久| 久久久综合九色合综国产精品| 国产精品白丝jk白祙喷水网站| 国产日韩三级在线| 99久久综合国产精品| 亚洲免费色视频| 欧美日韩免费一区二区三区| 蓝色福利精品导航| 国产精品日韩成人| 欧美日韩中文国产| 国内久久精品视频| 18涩涩午夜精品.www| 欧美日本在线观看| 国产一区二区调教| 最新成人av在线| 337p亚洲精品色噜噜噜| 国产一区二区中文字幕| 亚洲欧美在线aaa| 7777精品伊人久久久大香线蕉| 国产在线看一区| 亚洲欧美日韩国产手机在线 | 亚洲国产经典视频| 欧洲一区在线观看| 国产一区二区三区国产| 亚洲欧美日韩国产手机在线| 欧美一区二区日韩一区二区| 成人免费视频网站在线观看| 天堂在线一区二区| 国产精品美女久久久久久久| 欧美一区二区精品| 不卡电影一区二区三区| 日本特黄久久久高潮| 中文字幕欧美日韩一区| 欧美一区二区播放| 一本大道久久a久久综合| 国产在线一区观看| 亚洲制服欧美中文字幕中文字幕| 国产亚洲综合av| 欧美日本视频在线| 91丨九色丨蝌蚪丨老版| 韩国视频一区二区| 午夜精品视频一区| 亚洲毛片av在线| 国产丝袜美腿一区二区三区| 制服丝袜日韩国产| 色屁屁一区二区| bt7086福利一区国产| 国产一区二区电影| 久久精品国产99| 天天综合色天天综合色h| 亚洲欧美日韩在线| 中文字幕第一页久久| 日韩久久免费av| 欧美年轻男男videosbes| 色综合久久综合网欧美综合网| 国产乱码精品一区二区三区av| 五月天一区二区三区| 亚洲欧洲制服丝袜| 中文字幕亚洲欧美在线不卡| 久久久精品国产99久久精品芒果| 日韩欧美一级精品久久| 欧美精品日韩精品| 欧美日韩一区 二区 三区 久久精品| eeuss影院一区二区三区| 风间由美一区二区三区在线观看| 久久福利资源站| 美女尤物国产一区| 日韩**一区毛片| 日韩精彩视频在线观看| 亚洲图片自拍偷拍| 亚洲大片在线观看| 亚洲成人福利片| 自拍偷自拍亚洲精品播放| 国产精品九色蝌蚪自拍| 中文字幕欧美激情一区| 欧美国产日韩在线观看| 中文字幕乱码久久午夜不卡| 国产精品三级av| 亚洲欧洲精品一区二区三区不卡| 国产精品传媒入口麻豆| 亚洲色图.com| 亚洲123区在线观看| 美脚の诱脚舐め脚责91| 韩国av一区二区三区在线观看 | 国产精品亚洲人在线观看| 国产美女主播视频一区| 国产精品一区二区三区99| 国产激情一区二区三区| jizzjizzjizz欧美| 欧美午夜不卡在线观看免费| 欧美精品123区| 精品粉嫩超白一线天av| 中文字幕第一区第二区| 亚洲综合一区二区三区| 日本美女一区二区| 国内精品不卡在线| 成人av免费观看| 欧美三级中文字| 精品国产乱码久久久久久牛牛| 久久久久国产一区二区三区四区| 国产精品久久久久久久久快鸭| 一级女性全黄久久生活片免费| 日韩激情视频网站| 国产乱色国产精品免费视频| 91网站最新网址| 欧美一区二区日韩| 亚洲天堂2014| 久久爱另类一区二区小说| 国产成人精品免费| 欧美午夜在线观看| 久久久一区二区三区| 亚洲黄色小视频| 精品一区二区三区在线观看| 色综合久久99| 精品国产成人系列| 一区二区三区中文字幕| 极品少妇一区二区三区精品视频| hitomi一区二区三区精品| 欧美一级黄色大片| 亚洲精品久久嫩草网站秘色| 紧缚捆绑精品一区二区| 91久久线看在观草草青青| 精品sm捆绑视频| 亚洲成年人影院| 成人99免费视频| 欧美精品一区二区久久久| 夜夜揉揉日日人人青青一国产精品 | 伊人夜夜躁av伊人久久| 狠狠色丁香久久婷婷综合丁香| 日本伦理一区二区| 国产日韩精品一区二区浪潮av| 一区二区三区日韩欧美| 国产aⅴ综合色| 日韩一区二区在线看片| 亚洲香肠在线观看| 99久久婷婷国产综合精品电影| 欧美一区二区三区在| 一区二区三区精品视频| 成人国产精品免费| 精品理论电影在线| 日日夜夜免费精品视频| 欧美最猛黑人xxxxx猛交| 国产精品美日韩| 国产成a人亚洲| 欧美大片日本大片免费观看| 午夜精品久久久久影视| 欧美视频一区二区三区| 亚洲欧美日韩国产中文在线| av一区二区不卡| 国产精品区一区二区三| 国产**成人网毛片九色| 国产亚洲精品久| 国产做a爰片久久毛片| 欧美tickling网站挠脚心| 三级精品在线观看| 91麻豆精品国产91久久久更新时间 | 一区二区三区色| 91亚洲国产成人精品一区二区三| 精品国产免费人成电影在线观看四季| 日本成人在线视频网站| 欧美一区三区二区| 午夜精品福利一区二区三区av| 在线免费精品视频| 亚洲综合色成人| 日本高清成人免费播放| 亚洲精品午夜久久久| 色成年激情久久综合| 一区二区三区色| 欧美色综合久久| 奇米四色…亚洲| 日韩一级片在线观看| 久久电影国产免费久久电影| 2023国产精品自拍| 从欧美一区二区三区| 国产精品福利一区| 色8久久人人97超碰香蕉987| 亚洲电影你懂得| 日韩精品专区在线影院重磅| 激情偷乱视频一区二区三区| 中文字幕精品一区| 91热门视频在线观看| 亚洲丶国产丶欧美一区二区三区| 欧美日韩亚洲高清一区二区| 美女脱光内衣内裤视频久久影院| 久久久久久一二三区| 成人国产在线观看| 亚洲大片免费看| 精品免费日韩av| 99久久久久免费精品国产| 日韩亚洲欧美中文三级| 日本在线观看不卡视频| 久久久久亚洲综合| 91麻豆免费视频|