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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ip_nat_rule.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
字號(hào):
/* (C) 1999-2001 Paul `Rusty' Russell * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. *//* Everything about the rules for NAT. */#include <linux/types.h>#include <linux/ip.h>#include <linux/netfilter.h>#include <linux/netfilter_ipv4.h>#include <linux/module.h>#include <linux/kmod.h>#include <linux/skbuff.h>#include <linux/proc_fs.h>#include <net/checksum.h>#include <linux/bitops.h>#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)#include <linux/netfilter_ipv4/ip_tables.h>#include <linux/netfilter_ipv4/ip_nat.h>#include <linux/netfilter_ipv4/ip_nat_core.h>#include <linux/netfilter_ipv4/ip_nat_rule.h>#include <linux/netfilter_ipv4/listhelp.h>#if 0#define DEBUGP printk#else#define DEBUGP(format, args...)#endif#define NAT_VALID_HOOKS ((1<<NF_IP_PRE_ROUTING) | (1<<NF_IP_POST_ROUTING) | (1<<NF_IP_LOCAL_OUT))/* Standard entry. */struct ipt_standard{	struct ipt_entry entry;	struct ipt_standard_target target;};struct ipt_error_target{	struct ipt_entry_target target;	char errorname[IPT_FUNCTION_MAXNAMELEN];};struct ipt_error{	struct ipt_entry entry;	struct ipt_error_target target;};static struct{	struct ipt_replace repl;	struct ipt_standard entries[3];	struct ipt_error term;} nat_initial_table __initdata= { { "nat", NAT_VALID_HOOKS, 4,      sizeof(struct ipt_standard) * 3 + sizeof(struct ipt_error),      { [NF_IP_PRE_ROUTING] = 0,	[NF_IP_POST_ROUTING] = sizeof(struct ipt_standard),	[NF_IP_LOCAL_OUT] = sizeof(struct ipt_standard) * 2 },      { [NF_IP_PRE_ROUTING] = 0,	[NF_IP_POST_ROUTING] = sizeof(struct ipt_standard),	[NF_IP_LOCAL_OUT] = sizeof(struct ipt_standard) * 2 },      0, NULL, { } },    {	    /* PRE_ROUTING */	    { { { { 0 }, { 0 }, { 0 }, { 0 }, "", "", { 0 }, { 0 }, 0, 0, 0 },		0,		sizeof(struct ipt_entry),		sizeof(struct ipt_standard),		0, { 0, 0 }, { } },	      { { { { IPT_ALIGN(sizeof(struct ipt_standard_target)), "" } }, { } },		-NF_ACCEPT - 1 } },	    /* POST_ROUTING */	    { { { { 0 }, { 0 }, { 0 }, { 0 }, "", "", { 0 }, { 0 }, 0, 0, 0 },		0,		sizeof(struct ipt_entry),		sizeof(struct ipt_standard),		0, { 0, 0 }, { } },	      { { { { IPT_ALIGN(sizeof(struct ipt_standard_target)), "" } }, { } },		-NF_ACCEPT - 1 } },	    /* LOCAL_OUT */	    { { { { 0 }, { 0 }, { 0 }, { 0 }, "", "", { 0 }, { 0 }, 0, 0, 0 },		0,		sizeof(struct ipt_entry),		sizeof(struct ipt_standard),		0, { 0, 0 }, { } },	      { { { { IPT_ALIGN(sizeof(struct ipt_standard_target)), "" } }, { } },		-NF_ACCEPT - 1 } }    },    /* ERROR */    { { { { 0 }, { 0 }, { 0 }, { 0 }, "", "", { 0 }, { 0 }, 0, 0, 0 },	0,	sizeof(struct ipt_entry),	sizeof(struct ipt_error),	0, { 0, 0 }, { } },      { { { { IPT_ALIGN(sizeof(struct ipt_error_target)), IPT_ERROR_TARGET } },	  { } },	"ERROR"      }    }};static struct ipt_table nat_table = {	.name		= "nat",	.table		= &nat_initial_table.repl,	.valid_hooks	= NAT_VALID_HOOKS,	.lock		= RW_LOCK_UNLOCKED,	.me		= THIS_MODULE,};/* Source NAT */static unsigned int ipt_snat_target(struct sk_buff **pskb,				    const struct net_device *in,				    const struct net_device *out,				    unsigned int hooknum,				    const void *targinfo,				    void *userinfo){	struct ip_conntrack *ct;	enum ip_conntrack_info ctinfo;	IP_NF_ASSERT(hooknum == NF_IP_POST_ROUTING);	ct = ip_conntrack_get(*pskb, &ctinfo);	/* Connection must be valid and new. */	IP_NF_ASSERT(ct && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED));	IP_NF_ASSERT(out);	return ip_nat_setup_info(ct, targinfo, hooknum);}static unsigned int ipt_dnat_target(struct sk_buff **pskb,				    const struct net_device *in,				    const struct net_device *out,				    unsigned int hooknum,				    const void *targinfo,				    void *userinfo){	struct ip_conntrack *ct;	enum ip_conntrack_info ctinfo;#ifdef CONFIG_IP_NF_NAT_LOCAL	IP_NF_ASSERT(hooknum == NF_IP_PRE_ROUTING		     || hooknum == NF_IP_LOCAL_OUT);#else	IP_NF_ASSERT(hooknum == NF_IP_PRE_ROUTING);#endif	ct = ip_conntrack_get(*pskb, &ctinfo);	/* Connection must be valid and new. */	IP_NF_ASSERT(ct && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED));	return ip_nat_setup_info(ct, targinfo, hooknum);}static int ipt_snat_checkentry(const char *tablename,			       const struct ipt_entry *e,			       void *targinfo,			       unsigned int targinfosize,			       unsigned int hook_mask){	struct ip_nat_multi_range *mr = targinfo;	/* Must be a valid range */	if (targinfosize < sizeof(struct ip_nat_multi_range)) {		DEBUGP("SNAT: Target size %u too small\n", targinfosize);		return 0;	}	if (targinfosize != IPT_ALIGN((sizeof(struct ip_nat_multi_range)				       + (sizeof(struct ip_nat_range)					  * (mr->rangesize - 1))))) {		DEBUGP("SNAT: Target size %u wrong for %u ranges\n",		       targinfosize, mr->rangesize);		return 0;	}	/* Only allow these for NAT. */	if (strcmp(tablename, "nat") != 0) {		DEBUGP("SNAT: wrong table %s\n", tablename);		return 0;	}	if (hook_mask & ~(1 << NF_IP_POST_ROUTING)) {		DEBUGP("SNAT: hook mask 0x%x bad\n", hook_mask);		return 0;	}	return 1;}static int ipt_dnat_checkentry(const char *tablename,			       const struct ipt_entry *e,			       void *targinfo,			       unsigned int targinfosize,			       unsigned int hook_mask){	struct ip_nat_multi_range *mr = targinfo;	/* Must be a valid range */	if (targinfosize < sizeof(struct ip_nat_multi_range)) {		DEBUGP("DNAT: Target size %u too small\n", targinfosize);		return 0;	}	if (targinfosize != IPT_ALIGN((sizeof(struct ip_nat_multi_range)				       + (sizeof(struct ip_nat_range)					  * (mr->rangesize - 1))))) {		DEBUGP("DNAT: Target size %u wrong for %u ranges\n",		       targinfosize, mr->rangesize);		return 0;	}	/* Only allow these for NAT. */	if (strcmp(tablename, "nat") != 0) {		DEBUGP("DNAT: wrong table %s\n", tablename);		return 0;	}	if (hook_mask & ~((1 << NF_IP_PRE_ROUTING) | (1 << NF_IP_LOCAL_OUT))) {		DEBUGP("DNAT: hook mask 0x%x bad\n", hook_mask);		return 0;	}	#ifndef CONFIG_IP_NF_NAT_LOCAL	if (hook_mask & (1 << NF_IP_LOCAL_OUT)) {		DEBUGP("DNAT: CONFIG_IP_NF_NAT_LOCAL not enabled\n");		return 0;	}#endif	return 1;}inline unsigned intalloc_null_binding(struct ip_conntrack *conntrack,		   struct ip_nat_info *info,		   unsigned int hooknum){	/* Force range to this IP; let proto decide mapping for	   per-proto parts (hence not IP_NAT_RANGE_PROTO_SPECIFIED).	   Use reply in case it's already been mangled (eg local packet).	*/	u_int32_t ip		= (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC		   ? conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip		   : conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip);	struct ip_nat_multi_range mr		= { 1, { { IP_NAT_RANGE_MAP_IPS, ip, ip, { 0 }, { 0 } } } };	DEBUGP("Allocating NULL binding for %p (%u.%u.%u.%u)\n", conntrack,	       NIPQUAD(ip));	return ip_nat_setup_info(conntrack, &mr, hooknum);}int ip_nat_rule_find(struct sk_buff **pskb,		     unsigned int hooknum,		     const struct net_device *in,		     const struct net_device *out,		     struct ip_conntrack *ct,		     struct ip_nat_info *info){	int ret;	ret = ipt_do_table(pskb, hooknum, in, out, &nat_table, NULL);	if (ret == NF_ACCEPT) {		if (!(info->initialized & (1 << HOOK2MANIP(hooknum))))			/* NUL mapping */			ret = alloc_null_binding(ct, info, hooknum);	}	return ret;}static struct ipt_target ipt_snat_reg = {	.name		= "SNAT",	.target		= ipt_snat_target,	.checkentry	= ipt_snat_checkentry,};static struct ipt_target ipt_dnat_reg = {	.name		= "DNAT",	.target		= ipt_dnat_target,	.checkentry	= ipt_dnat_checkentry,};int __init ip_nat_rule_init(void){	int ret;	ret = ipt_register_table(&nat_table);	if (ret != 0)		return ret;	ret = ipt_register_target(&ipt_snat_reg);	if (ret != 0)		goto unregister_table;	ret = ipt_register_target(&ipt_dnat_reg);	if (ret != 0)		goto unregister_snat;	return ret; unregister_snat:	ipt_unregister_target(&ipt_snat_reg); unregister_table:	ipt_unregister_table(&nat_table);	return ret;}void ip_nat_rule_cleanup(void){	ipt_unregister_target(&ipt_dnat_reg);	ipt_unregister_target(&ipt_snat_reg);	ipt_unregister_table(&nat_table);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
爽好久久久欧美精品| 99热99精品| 欧美韩国日本不卡| 欧美午夜精品一区二区三区| 亚洲妇熟xx妇色黄| 国产色爱av资源综合区| 91蜜桃婷婷狠狠久久综合9色| 天天操天天干天天综合网| 国产午夜精品理论片a级大结局| 色哟哟国产精品免费观看| 青青草伊人久久| 亚洲一区自拍偷拍| 国产精品毛片久久久久久| 91精品免费在线| 精品视频免费看| 一本色道久久综合亚洲91| 国产69精品久久777的优势| 日本欧美加勒比视频| 亚洲韩国精品一区| 亚洲精品免费电影| 亚洲精品va在线观看| 国产精品福利一区二区| 久久综合网色—综合色88| 日韩欧美自拍偷拍| 久久综合九色欧美综合狠狠| 日韩免费一区二区三区在线播放| 欧美亚洲动漫制服丝袜| 91电影在线观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产不卡免费视频| 91丨porny丨中文| 欧洲av在线精品| 欧美片网站yy| 亚洲精品一区二区三区精华液| 欧美丰满美乳xxx高潮www| 欧美一区二区三区在线| 久久久久久久久久久久电影| 国产亚洲精品bt天堂精选| 国产精品每日更新在线播放网址 | 国产九色sp调教91| 成人97人人超碰人人99| 成人在线视频一区| 国产精品18久久久久久久久| 国产成人午夜高潮毛片| 94色蜜桃网一区二区三区| 欧美日韩在线播放| www久久精品| 一区二区日韩电影| 丁香激情综合国产| 91麻豆精品国产自产在线观看一区| 久久免费视频一区| 亚洲精品国产成人久久av盗摄| 久久不见久久见免费视频7| 成人av免费在线观看| 欧美变态凌虐bdsm| 亚洲国产欧美一区二区三区丁香婷| 久久激情五月婷婷| 欧美日韩国产成人在线免费| 国产欧美日韩视频一区二区 | 亚洲线精品一区二区三区| 韩国v欧美v日本v亚洲v| 欧美一二三在线| 亚洲国产成人tv| 欧美午夜视频网站| 亚洲午夜激情av| 欧美午夜片在线看| 丝袜诱惑制服诱惑色一区在线观看| 99re热这里只有精品免费视频| 久久精品日产第一区二区三区高清版 | 九九国产精品视频| 日韩一级欧美一级| 精品一区二区精品| 日本一区二区三区高清不卡| 国产乱码字幕精品高清av| 日韩一区二区三区在线观看| 免费在线观看一区二区三区| 日韩精品在线一区| 国产精品系列在线播放| 中文幕一区二区三区久久蜜桃| bt欧美亚洲午夜电影天堂| 依依成人综合视频| 欧美一区二区精品| 成人午夜视频在线观看| 亚洲国产精品久久久久婷婷884| 欧美日韩国产天堂| 国产成人免费高清| 亚洲国产乱码最新视频| 精品三级av在线| 一本色道综合亚洲| 久久国产综合精品| 亚洲综合在线第一页| 久久人人爽人人爽| 欧美日韩国产免费一区二区 | 国产精品一区免费视频| 亚洲资源中文字幕| 亚洲视频香蕉人妖| 久久色.com| 日韩美女天天操| 欧美婷婷六月丁香综合色| eeuss鲁片一区二区三区在线观看| 午夜欧美电影在线观看| 中文字幕精品一区二区精品绿巨人 | 亚洲美女电影在线| 日韩一区二区三区电影| 日本韩国一区二区三区视频| 精品一区二区三区欧美| 亚洲一区中文在线| 一区二区免费在线| 中文字幕日韩欧美一区二区三区| 欧美成人免费网站| 精品成人在线观看| 久久众筹精品私拍模特| 国产欧美一区二区三区网站| 2020国产精品自拍| 亚洲国产精品t66y| 亚洲人成7777| 日日摸夜夜添夜夜添精品视频| 亚洲成人综合视频| 久久国产精品色婷婷| 国产美女久久久久| 一本久久a久久免费精品不卡| 色婷婷久久99综合精品jk白丝| 91美女在线观看| 7878成人国产在线观看| 精品国产一区二区在线观看| 国产午夜一区二区三区| 一区二区三区四区在线播放 | 日本欧美久久久久免费播放网| 美洲天堂一区二卡三卡四卡视频| 久久69国产一区二区蜜臀| 国产在线播放一区| 欧美色视频在线观看| 久久综合网色—综合色88| 亚洲综合一区二区三区| 国产精品一区二区视频| 亚洲高清免费视频| 麻豆91小视频| 91福利国产精品| 国产欧美日韩一区二区三区在线观看| 中文字幕中文字幕一区| 国产自产2019最新不卡| 欧美性感一类影片在线播放| 国产欧美一区二区精品婷婷| 日韩av网站在线观看| 欧美在线观看视频在线| 中文字幕亚洲视频| 大白屁股一区二区视频| 精品国产髙清在线看国产毛片| 亚洲一区视频在线| 色就色 综合激情| 亚洲国产精品人人做人人爽| 成人精品一区二区三区中文字幕 | 色婷婷综合久久久久中文| 中文字幕一区二区三区在线观看| 福利电影一区二区三区| 国产精品色婷婷| 99久久精品免费精品国产| 国产精品你懂的在线| 日韩avvvv在线播放| 欧美日韩国产免费一区二区| 午夜精品爽啪视频| 日韩欧美中文字幕精品| 国内精品伊人久久久久影院对白| 2024国产精品视频| 91视频国产资源| 亚洲成人先锋电影| 精品国产乱码久久| 成人av电影观看| 青青青伊人色综合久久| 国产欧美精品在线观看| 欧美性猛片aaaaaaa做受| 日韩av在线免费观看不卡| 国产欧美日韩中文久久| 欧美撒尿777hd撒尿| 国产黄色91视频| 午夜伊人狠狠久久| 国产精品高清亚洲| 日韩精品一区二区三区视频 | 处破女av一区二区| 亚洲高清视频的网址| 欧美韩国一区二区| 精品裸体舞一区二区三区| 欧美亚洲动漫另类| av一二三不卡影片| 精品一区二区免费视频| 亚洲高清免费一级二级三级| 最新高清无码专区| 欧美激情综合在线| 久久综合久久综合九色| 欧美久久久久久久久中文字幕| 91日韩在线专区| 99精品国产热久久91蜜凸| 国产福利一区二区三区在线视频| 日韩电影免费一区| 亚洲成a人在线观看| 伊人夜夜躁av伊人久久| 亚洲久草在线视频| 亚洲一区视频在线| 五月综合激情婷婷六月色窝| 亚洲欧美二区三区|