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

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

?? ip_fw_compat_masq.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* Masquerading compatibility layer.   Note that there are no restrictions on other programs binding to   ports 61000:65095 (in 2.0 and 2.2 they get EADDRINUSE).  Just DON'T   DO IT. *//* (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. */#include <linux/skbuff.h>#include <linux/in.h>#include <linux/ip.h>#include <linux/icmp.h>#include <linux/udp.h>#include <linux/netfilter_ipv4.h>#include <linux/netdevice.h>#include <linux/inetdevice.h>#include <linux/proc_fs.h>#include <linux/module.h>#include <net/route.h>#include <net/ip.h>#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_conntrack_lock)#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_conntrack_lock)#include <linux/netfilter_ipv4/ip_conntrack.h>#include <linux/netfilter_ipv4/ip_conntrack_core.h>#include <linux/netfilter_ipv4/ip_nat.h>#include <linux/netfilter_ipv4/ip_nat_core.h>#include <linux/netfilter_ipv4/listhelp.h>#include "ip_fw_compat.h"#if 0#define DEBUGP printk#else#define DEBUGP(format, args...)#endifunsigned intdo_masquerade(struct sk_buff **pskb, const struct net_device *dev){	struct ip_nat_info *info;	enum ip_conntrack_info ctinfo;	struct ip_conntrack *ct;	unsigned int ret;	/* Sorry, only ICMP, TCP and UDP. */	if ((*pskb)->nh.iph->protocol != IPPROTO_ICMP	    && (*pskb)->nh.iph->protocol != IPPROTO_TCP	    && (*pskb)->nh.iph->protocol != IPPROTO_UDP)		return NF_DROP;	/* Feed it to connection tracking; in fact we're in NF_IP_FORWARD,           but connection tracking doesn't expect that */	ret = ip_conntrack_in(NF_IP_POST_ROUTING, pskb, dev, NULL, NULL);	if (ret != NF_ACCEPT) {		DEBUGP("ip_conntrack_in returned %u.\n", ret);		return ret;	}	ct = ip_conntrack_get(*pskb, &ctinfo);	if (!ct) {		DEBUGP("ip_conntrack_in set to invalid conntrack.\n");		return NF_DROP;	}	info = &ct->nat.info;	WRITE_LOCK(&ip_nat_lock);	/* Setup the masquerade, if not already */	if (!info->initialized) {		u_int32_t newsrc;		struct flowi fl = { .nl_u = { .ip4_u = { .daddr = (*pskb)->nh.iph->daddr } } };		struct rtable *rt;		struct ip_nat_multi_range range;		/* Pass 0 instead of saddr, since it's going to be changed		   anyway. */		if (ip_route_output_key(&rt, &fl) != 0) {			DEBUGP("ipnat_rule_masquerade: Can't reroute.\n");			return NF_DROP;		}		newsrc = inet_select_addr(rt->u.dst.dev, rt->rt_gateway,					  RT_SCOPE_UNIVERSE);		ip_rt_put(rt);		range = ((struct ip_nat_multi_range)			 { 1,			   {{IP_NAT_RANGE_MAP_IPS|IP_NAT_RANGE_PROTO_SPECIFIED,			     newsrc, newsrc,			     { htons(61000) }, { htons(65095) } } } });		ret = ip_nat_setup_info(ct, &range, NF_IP_POST_ROUTING);		if (ret != NF_ACCEPT) {			WRITE_UNLOCK(&ip_nat_lock);			return ret;		}	} else		DEBUGP("Masquerading already done on this conn.\n");	WRITE_UNLOCK(&ip_nat_lock);	return do_bindings(ct, ctinfo, info, NF_IP_POST_ROUTING, pskb);}voidcheck_for_masq_error(struct sk_buff **pskb){	enum ip_conntrack_info ctinfo;	struct ip_conntrack *ct;	ct = ip_conntrack_get(*pskb, &ctinfo);	/* Wouldn't be here if not tracked already => masq'ed ICMP           ping or error related to masq'd connection */	IP_NF_ASSERT(ct);	if (ctinfo == IP_CT_RELATED) {		icmp_reply_translation(pskb, ct, NF_IP_PRE_ROUTING,				       CTINFO2DIR(ctinfo));		icmp_reply_translation(pskb, ct, NF_IP_POST_ROUTING,				       CTINFO2DIR(ctinfo));	}}unsigned intcheck_for_demasq(struct sk_buff **pskb){	struct ip_conntrack_tuple tuple;	struct ip_conntrack_protocol *protocol;	struct ip_conntrack_tuple_hash *h;	enum ip_conntrack_info ctinfo;	struct ip_conntrack *ct;	int ret;	protocol = ip_ct_find_proto((*pskb)->nh.iph->protocol);	/* We don't feed packets to conntrack system unless we know           they're part of an connection already established by an           explicit masq command. */	switch ((*pskb)->nh.iph->protocol) {	case IPPROTO_ICMP:		/* ICMP errors. */		ct = icmp_error_track(*pskb, &ctinfo, NF_IP_PRE_ROUTING);		if (ct) {			/* We only do SNAT in the compatibility layer.			   So we can manipulate ICMP errors from			   server here (== DNAT).  Do SNAT icmp manips			   in POST_ROUTING handling. */			if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) {				icmp_reply_translation(pskb, ct,						       NF_IP_PRE_ROUTING,						       CTINFO2DIR(ctinfo));				icmp_reply_translation(pskb, ct,						       NF_IP_POST_ROUTING,						       CTINFO2DIR(ctinfo));			}			return NF_ACCEPT;		}		/* Fall thru... */	case IPPROTO_TCP:	case IPPROTO_UDP:		IP_NF_ASSERT(((*pskb)->nh.iph->frag_off & htons(IP_OFFSET)) == 0);		if (!get_tuple((*pskb)->nh.iph, *pskb, (*pskb)->nh.iph->ihl*4, &tuple, protocol)) {			if (net_ratelimit())				printk("ip_fw_compat_masq: Can't get tuple\n");			return NF_ACCEPT;		}		break;	default:		/* Not ours... */		return NF_ACCEPT;	}	h = ip_conntrack_find_get(&tuple, NULL);	/* MUST be found, and MUST be reply. */	if (h && DIRECTION(h) == 1) {		ret = ip_conntrack_in(NF_IP_PRE_ROUTING, pskb,				      NULL, NULL, NULL);		/* Put back the reference gained from find_get */		nf_conntrack_put(&h->ctrack->infos[0]);		if (ret == NF_ACCEPT) {			struct ip_conntrack *ct;			ct = ip_conntrack_get(*pskb, &ctinfo);			if (ct) {				struct ip_nat_info *info = &ct->nat.info;				do_bindings(ct, ctinfo, info,					    NF_IP_PRE_ROUTING,					    pskb);			} else				if (net_ratelimit()) 					printk("ip_fw_compat_masq: conntrack"					       " didn't like\n");		}	} else {		if (h)			/* Put back the reference gained from find_get */			nf_conntrack_put(&h->ctrack->infos[0]);		ret = NF_ACCEPT;	}	return ret;}int ip_fw_masq_timeouts(void *user, int len){	printk("Sorry: masquerading timeouts set 5DAYS/2MINS/60SECS\n");	return 0;}static const char *masq_proto_name(u_int16_t protonum){	switch (protonum) {	case IPPROTO_TCP: return "TCP";	case IPPROTO_UDP: return "UDP";	case IPPROTO_ICMP: return "ICMP";	default: return "MORE-CAFFEINE-FOR-RUSTY";	}}static unsigned intprint_masq(char *buffer, const struct ip_conntrack *conntrack){	char temp[129];	/* This is for backwards compatibility, but ick!.	   We should never export jiffies to userspace.	*/	sprintf(temp,"%s %08X:%04X %08X:%04X %04X %08X %6d %6d %7lu",		masq_proto_name(conntrack->tuplehash[0].tuple.dst.protonum),		ntohl(conntrack->tuplehash[0].tuple.src.ip),		ntohs(conntrack->tuplehash[0].tuple.src.u.all),		ntohl(conntrack->tuplehash[0].tuple.dst.ip),		ntohs(conntrack->tuplehash[0].tuple.dst.u.all),		ntohs(conntrack->tuplehash[1].tuple.dst.u.all),		/* Sorry, no init_seq, delta or previous_delta (yet). */		0, 0, 0,		conntrack->timeout.expires - jiffies);	return sprintf(buffer, "%-127s\n", temp);}/* Returns true when finished. */static intmasq_iterate(const struct ip_conntrack_tuple_hash *hash,	     char *buffer, off_t offset, off_t *upto,	     unsigned int *len, unsigned int maxlen){	unsigned int newlen;	IP_NF_ASSERT(hash->ctrack);	/* Only count originals */	if (DIRECTION(hash))		return 0;	if ((*upto)++ < offset)		return 0;	newlen = print_masq(buffer + *len, hash->ctrack);	if (*len + newlen > maxlen)		return 1;	else *len += newlen;	return 0;}/* Everything in the hash is masqueraded. */static intmasq_procinfo(char *buffer, char **start, off_t offset, int length){	unsigned int i;	int len = 0;	off_t upto = 1;	/* Header: first record */	if (offset == 0) {		char temp[128];		sprintf(temp,			"Prc FromIP   FPrt ToIP     TPrt Masq Init-seq  Delta PDelta Expires (free=0,0,0)");		len = sprintf(buffer, "%-127s\n", temp);		offset = 1;	}	READ_LOCK(&ip_conntrack_lock);	/* Traverse hash; print originals then reply. */	for (i = 0; i < ip_conntrack_htable_size; i++) {		if (LIST_FIND(&ip_conntrack_hash[i], masq_iterate,			      struct ip_conntrack_tuple_hash *,			      buffer, offset, &upto, &len, length))			break;	}	READ_UNLOCK(&ip_conntrack_lock);	/* `start' hack - see fs/proc/generic.c line ~165 */	*start = (char *)((unsigned int)upto - offset);	return len;}int __init masq_init(void){	int ret;	struct proc_dir_entry *proc;	ret = ip_conntrack_init();	if (ret == 0) {		ret = ip_nat_init();		if (ret == 0) {			proc = proc_net_create("ip_masquerade",					       0, masq_procinfo);			if (proc)				proc->owner = THIS_MODULE;			else {				ip_nat_cleanup();				ip_conntrack_cleanup();				ret = -ENOMEM;			}		} else			ip_conntrack_cleanup();	}	return ret;}void masq_cleanup(void){	ip_nat_cleanup();	ip_conntrack_cleanup();	proc_net_remove("ip_masquerade");}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久影视| 国产日韩一级二级三级| 伊人开心综合网| 在线视频中文字幕一区二区| 亚洲精品视频在线观看网站| 欧美曰成人黄网| 亚洲第一会所有码转帖| 7777精品伊人久久久大香线蕉超级流畅| 亚洲成av人在线观看| 在线不卡中文字幕播放| 久久99久久99小草精品免视看| 日韩一二三四区| 国产黄色成人av| 亚洲欧洲韩国日本视频| 欧美日韩第一区日日骚| 久久草av在线| 国产精品电影一区二区三区| 欧美日韩免费观看一区二区三区 | 国产又粗又猛又爽又黄91精品| 欧美精品一区在线观看| 成人黄动漫网站免费app| 一区二区在线看| 精品国产乱码91久久久久久网站| 国产成人亚洲精品狼色在线| 亚洲美女电影在线| 欧美成va人片在线观看| av福利精品导航| 日本不卡一二三区黄网| 国产精品欧美综合在线| 欧美日韩精品一区二区| 国产精品 日产精品 欧美精品| 亚洲免费av观看| 精品精品国产高清a毛片牛牛| av中文字幕不卡| 久久精品国产一区二区三| 国产精品不卡在线观看| 欧美成人性战久久| 色偷偷久久人人79超碰人人澡| 久久99国产精品久久| 亚洲日本在线看| 精品国产a毛片| 欧美日韩在线播放三区四区| 国产一区欧美一区| 爽好久久久欧美精品| 日韩一区在线免费观看| 日韩精品一区国产麻豆| 欧美无砖专区一中文字| 成人黄色国产精品网站大全在线免费观看 | 国产亚洲精品中文字幕| 欧美日韩国产成人在线91| 国产99久久久久久免费看农村| 午夜不卡av免费| 亚洲伊人伊色伊影伊综合网| 中文字幕免费一区| 日韩女优毛片在线| 欧美精品乱码久久久久久按摩 | 成人综合婷婷国产精品久久免费| 日本午夜一区二区| 亚洲综合色自拍一区| 国产精品久久精品日日| 精品久久久久香蕉网| 91精品国产免费| 欧美制服丝袜第一页| 91丝袜呻吟高潮美腿白嫩在线观看| 久久www免费人成看片高清| 天天操天天色综合| 亚洲第一激情av| 亚洲自拍偷拍麻豆| 亚洲免费毛片网站| 综合激情网...| 中文字幕一区二区在线播放| 国产清纯在线一区二区www| 精品福利一二区| 久久综合国产精品| 久久婷婷国产综合精品青草| 日韩一区二区三区在线| 欧美一级高清片| 日韩一卡二卡三卡四卡| 日韩天堂在线观看| 日韩欧美亚洲国产另类| 91精品国产91久久久久久一区二区 | 精品一区二区三区免费观看 | 亚洲123区在线观看| 婷婷中文字幕一区三区| 丝袜国产日韩另类美女| 亚洲成人高清在线| 婷婷综合另类小说色区| 美女视频黄频大全不卡视频在线播放| 视频一区国产视频| 另类欧美日韩国产在线| 国产精品一区二区x88av| 丰满白嫩尤物一区二区| 99视频国产精品| 91久久人澡人人添人人爽欧美 | 成人性生交大片免费| 波多野结衣中文字幕一区| 色综合久久久久久久久久久| 欧美日韩在线三级| 欧美变态凌虐bdsm| 国产精品―色哟哟| 亚洲另类在线一区| 日本vs亚洲vs韩国一区三区二区| 久久国产夜色精品鲁鲁99| 国产精品99久久不卡二区| av一区二区三区在线| 欧美日本在线看| 久久久国产午夜精品| 亚洲欧美乱综合| 久久精品噜噜噜成人av农村| 国产精华液一区二区三区| 色网综合在线观看| 日韩精品一区在线| 亚洲欧洲国产专区| 日本vs亚洲vs韩国一区三区| 成人污视频在线观看| 欧美性做爰猛烈叫床潮| 久久九九久精品国产免费直播| 综合久久久久久久| 理论片日本一区| 一本色道**综合亚洲精品蜜桃冫| 欧美一级搡bbbb搡bbbb| 国产精品美女久久久久久 | 亚洲免费毛片网站| 久久精品av麻豆的观看方式| 99综合电影在线视频| 91麻豆精品国产91久久久久久 | 国产精品久久久久久福利一牛影视 | 日韩av成人高清| 成人免费视频视频在线观看免费 | 日本伊人色综合网| 成人综合在线观看| 制服丝袜av成人在线看| 亚洲精品美国一| 国产精品一区二区在线看| 欧美日韩一区二区三区在线| 中文文精品字幕一区二区| 五月婷婷激情综合| 色国产综合视频| 国产清纯在线一区二区www| 日本中文字幕不卡| 欧美午夜一区二区三区免费大片| 国产亚洲短视频| 免费国产亚洲视频| 欧美精品色一区二区三区| 综合久久给合久久狠狠狠97色 | 青青草91视频| 欧美色视频在线观看| 国产精品国产三级国产aⅴ原创 | 国产日韩v精品一区二区| 日韩电影一区二区三区| 91麻豆.com| 国产精品久久久久久久久快鸭| 美女视频第一区二区三区免费观看网站 | 亚洲女同一区二区| 国产黄色成人av| 欧美精品一区二区在线播放| 日本成人在线不卡视频| 欧美性做爰猛烈叫床潮| 亚洲久本草在线中文字幕| 成人午夜视频在线观看| 久久蜜桃av一区精品变态类天堂| 麻豆成人在线观看| 日韩亚洲国产中文字幕欧美| 性欧美疯狂xxxxbbbb| 在线免费av一区| 夜色激情一区二区| 91在线porny国产在线看| 国产精品进线69影院| 成人av在线资源网站| 国产精品美女一区二区在线观看| 国产成人综合网站| 中文字幕乱码久久午夜不卡| 成人做爰69片免费看网站| 国产精品天天看| 成人激情黄色小说| 亚洲人成伊人成综合网小说| 成人sese在线| 亚洲综合色婷婷| 欧美日韩精品电影| 日韩精品福利网| 欧美tk丨vk视频| 国产精品一区免费在线观看| 日本一区二区三区国色天香 | 国产盗摄视频一区二区三区| 国产亚洲美州欧州综合国| 成人毛片在线观看| 日韩美女视频一区二区 | 日韩国产欧美在线视频| 日韩一区二区三区av| 国产精品一区二区在线观看网站 | 一卡二卡欧美日韩| 欧美精三区欧美精三区| 免费高清在线一区| 亚洲国产精品成人综合| 一本到不卡精品视频在线观看| 亚洲国产wwwccc36天堂| 精品精品欲导航| 成人黄色免费短视频| 亚洲一区二区高清| 日韩视频在线观看一区二区|