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

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

?? ipt_tcpmss.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* * This is a module which is used for setting the MSS option in TCP packets. * * Copyright (C) 2000 Marc Boucher <marc@mbsi.ca> * * 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/module.h>#include <linux/skbuff.h>#include <linux/ip.h>#include <net/tcp.h>#include <linux/netfilter_ipv4/ip_tables.h>#include <linux/netfilter_ipv4/ipt_TCPMSS.h>MODULE_LICENSE("GPL");MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");MODULE_DESCRIPTION("iptables TCP MSS modification module");#if 0#define DEBUGP printk#else#define DEBUGP(format, args...)#endifstatic u_int16_tcheat_check(u_int32_t oldvalinv, u_int32_t newval, u_int16_t oldcheck){	u_int32_t diffs[] = { oldvalinv, newval };	return csum_fold(csum_partial((char *)diffs, sizeof(diffs),                                      oldcheck^0xFFFF));}static inline unsigned intoptlen(const u_int8_t *opt, unsigned int offset){	/* Beware zero-length options: make finite progress */	if (opt[offset] <= TCPOPT_NOP || opt[offset+1] == 0) return 1;	else return opt[offset+1];}static unsigned intipt_tcpmss_target(struct sk_buff **pskb,		  const struct net_device *in,		  const struct net_device *out,		  unsigned int hooknum,		  const void *targinfo,		  void *userinfo){	const struct ipt_tcpmss_info *tcpmssinfo = targinfo;	struct tcphdr *tcph;	struct iphdr *iph;	u_int16_t tcplen, newtotlen, oldval, newmss;	unsigned int i;	u_int8_t *opt;	if (!skb_ip_make_writable(pskb, (*pskb)->len))		return NF_DROP;	iph = (*pskb)->nh.iph;	tcplen = (*pskb)->len - iph->ihl*4;	tcph = (void *)iph + iph->ihl*4;	/* Since it passed flags test in tcp match, we know it is is	   not a fragment, and has data >= tcp header length.  SYN	   packets should not contain data: if they did, then we risk	   running over MTU, sending Frag Needed and breaking things	   badly. --RR */	if (tcplen != tcph->doff*4) {		if (net_ratelimit())			printk(KERN_ERR			       "ipt_tcpmss_target: bad length (%d bytes)\n",			       (*pskb)->len);		return NF_DROP;	}	if(tcpmssinfo->mss == IPT_TCPMSS_CLAMP_PMTU) {		if(!(*pskb)->dst) {			if (net_ratelimit())				printk(KERN_ERR			       		"ipt_tcpmss_target: no dst?! can't determine path-MTU\n");			return NF_DROP; /* or IPT_CONTINUE ?? */		}		if(dst_pmtu((*pskb)->dst) <= (sizeof(struct iphdr) + sizeof(struct tcphdr))) {			if (net_ratelimit())				printk(KERN_ERR		       			"ipt_tcpmss_target: unknown or invalid path-MTU (%d)\n", dst_pmtu((*pskb)->dst));			return NF_DROP; /* or IPT_CONTINUE ?? */		}		newmss = dst_pmtu((*pskb)->dst) - sizeof(struct iphdr) - sizeof(struct tcphdr);	} else		newmss = tcpmssinfo->mss; 	opt = (u_int8_t *)tcph;	for (i = sizeof(struct tcphdr); i < tcph->doff*4; i += optlen(opt, i)){		if ((opt[i] == TCPOPT_MSS) &&		    ((tcph->doff*4 - i) >= TCPOLEN_MSS) &&		    (opt[i+1] == TCPOLEN_MSS)) {			u_int16_t oldmss;			oldmss = (opt[i+2] << 8) | opt[i+3];			if((tcpmssinfo->mss == IPT_TCPMSS_CLAMP_PMTU) &&				(oldmss <= newmss))					return IPT_CONTINUE;			opt[i+2] = (newmss & 0xff00) >> 8;			opt[i+3] = (newmss & 0x00ff);			tcph->check = cheat_check(htons(oldmss)^0xFFFF,						  htons(newmss),						  tcph->check);			DEBUGP(KERN_INFO "ipt_tcpmss_target: %u.%u.%u.%u:%hu"			       "->%u.%u.%u.%u:%hu changed TCP MSS option"			       " (from %u to %u)\n", 			       NIPQUAD((*pskb)->nh.iph->saddr),			       ntohs(tcph->source),			       NIPQUAD((*pskb)->nh.iph->daddr),			       ntohs(tcph->dest),			       oldmss, newmss);			goto retmodified;		}	}	/*	 * MSS Option not found ?! add it..	 */	if (skb_tailroom((*pskb)) < TCPOLEN_MSS) {		struct sk_buff *newskb;		newskb = skb_copy_expand(*pskb, skb_headroom(*pskb),					 TCPOLEN_MSS, GFP_ATOMIC);		if (!newskb) {			if (net_ratelimit())				printk(KERN_ERR "ipt_tcpmss_target:"				       " unable to allocate larger skb\n");			return NF_DROP;		}		kfree_skb(*pskb);		*pskb = newskb;		iph = (*pskb)->nh.iph;		tcph = (void *)iph + iph->ihl*4;	}	skb_put((*pskb), TCPOLEN_MSS); 	opt = (u_int8_t *)tcph + sizeof(struct tcphdr);	memmove(opt + TCPOLEN_MSS, opt, tcplen - sizeof(struct tcphdr));	tcph->check = cheat_check(htons(tcplen) ^ 0xFFFF,				  htons(tcplen + TCPOLEN_MSS), tcph->check);	tcplen += TCPOLEN_MSS;	opt[0] = TCPOPT_MSS;	opt[1] = TCPOLEN_MSS;	opt[2] = (newmss & 0xff00) >> 8;	opt[3] = (newmss & 0x00ff);	tcph->check = cheat_check(~0, *((u_int32_t *)opt), tcph->check);	oldval = ((u_int16_t *)tcph)[6];	tcph->doff += TCPOLEN_MSS/4;	tcph->check = cheat_check(oldval ^ 0xFFFF,				  ((u_int16_t *)tcph)[6], tcph->check);	newtotlen = htons(ntohs(iph->tot_len) + TCPOLEN_MSS);	iph->check = cheat_check(iph->tot_len ^ 0xFFFF,				 newtotlen, iph->check);	iph->tot_len = newtotlen;	DEBUGP(KERN_INFO "ipt_tcpmss_target: %u.%u.%u.%u:%hu"	       "->%u.%u.%u.%u:%hu added TCP MSS option (%u)\n",	       NIPQUAD((*pskb)->nh.iph->saddr),	       ntohs(tcph->source),	       NIPQUAD((*pskb)->nh.iph->daddr),	       ntohs(tcph->dest),	       newmss); retmodified:	/* We never hw checksum SYN packets.  */	BUG_ON((*pskb)->ip_summed == CHECKSUM_HW);	(*pskb)->nfcache |= NFC_UNKNOWN | NFC_ALTERED;	return IPT_CONTINUE;}#define TH_SYN 0x02static inline int find_syn_match(const struct ipt_entry_match *m){	const struct ipt_tcp *tcpinfo = (const struct ipt_tcp *)m->data;	if (strcmp(m->u.kernel.match->name, "tcp") == 0	    && (tcpinfo->flg_cmp & TH_SYN)	    && !(tcpinfo->invflags & IPT_TCP_INV_FLAGS))		return 1;	return 0;}/* Must specify -p tcp --syn/--tcp-flags SYN */static intipt_tcpmss_checkentry(const char *tablename,		      const struct ipt_entry *e,		      void *targinfo,		      unsigned int targinfosize,		      unsigned int hook_mask){	const struct ipt_tcpmss_info *tcpmssinfo = targinfo;	if (targinfosize != IPT_ALIGN(sizeof(struct ipt_tcpmss_info))) {		DEBUGP("ipt_tcpmss_checkentry: targinfosize %u != %u\n",		       targinfosize, IPT_ALIGN(sizeof(struct ipt_tcpmss_info)));		return 0;	}	if((tcpmssinfo->mss == IPT_TCPMSS_CLAMP_PMTU) && 			((hook_mask & ~((1 << NF_IP_FORWARD)			   	| (1 << NF_IP_LOCAL_OUT)			   	| (1 << NF_IP_POST_ROUTING))) != 0)) {		printk("TCPMSS: path-MTU clamping only supported in FORWARD, OUTPUT and POSTROUTING hooks\n");		return 0;	}	if (e->ip.proto == IPPROTO_TCP	    && !(e->ip.invflags & IPT_INV_PROTO)	    && IPT_MATCH_ITERATE(e, find_syn_match))		return 1;	printk("TCPMSS: Only works on TCP SYN packets\n");	return 0;}static struct ipt_target ipt_tcpmss_reg = {	.name		= "TCPMSS",	.target		= ipt_tcpmss_target,	.checkentry	= ipt_tcpmss_checkentry,	.me		= THIS_MODULE,};static int __init init(void){	return ipt_register_target(&ipt_tcpmss_reg);}static void __exit fini(void){	ipt_unregister_target(&ipt_tcpmss_reg);}module_init(init);module_exit(fini);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费国产在线| 成人福利视频网站| 亚洲一二三四久久| 国产精品美女久久久久av爽李琼| 欧美精品一区二区三区一线天视频| 4438x亚洲最大成人网| 欧美日本高清视频在线观看| 欧美精品1区2区3区| 91精品国产品国语在线不卡| 日韩美女在线视频| 精品欧美一区二区三区精品久久| 精品国产在天天线2019| 国产亚洲人成网站| 中文字幕一区二区三区视频| 亚洲人快播电影网| 午夜精品免费在线观看| 奇米精品一区二区三区在线观看 | 成人激情校园春色| 国产精品18久久久久久久久久久久| 国产剧情一区二区| 99国产精品久久| 777午夜精品视频在线播放| 欧美电视剧免费观看| 欧美激情综合五月色丁香小说| 亚洲视频狠狠干| 青青草伊人久久| 成人小视频免费观看| 欧美日韩一区二区在线视频| 欧美成人一级视频| 中文字幕亚洲区| 日韩二区三区在线观看| 国产成a人亚洲| 欧美日韩精品三区| 国产日韩欧美不卡在线| 亚洲国产欧美另类丝袜| 国产精品资源在线| 欧美伦理视频网站| 国产农村妇女毛片精品久久麻豆 | 欧美一区二区三区四区高清| 久久婷婷久久一区二区三区| 亚洲精品国产精华液| 国产一区美女在线| 欧美在线观看视频一区二区| 2020日本不卡一区二区视频| 亚洲午夜久久久| 成人午夜视频免费看| 欧美一区二区啪啪| 一区二区三区在线视频免费观看| 极品少妇xxxx精品少妇| 欧美性大战xxxxx久久久| 欧美激情一区二区在线| 免费成人av资源网| 在线看不卡av| 亚洲精品欧美综合四区| 国产精品99久久久久久似苏梦涵| 欧美酷刑日本凌虐凌虐| 亚洲黄色尤物视频| www..com久久爱| 国产欧美日韩精品在线| 美美哒免费高清在线观看视频一区二区 | 欧美日韩夫妻久久| 国产精品麻豆99久久久久久| 国产精品123区| 精品久久五月天| 美女一区二区三区| 欧美剧情片在线观看| 亚洲成人手机在线| 欧美性受xxxx黑人xyx| 亚洲免费av高清| 色一区在线观看| 一区二区三区中文在线| 色拍拍在线精品视频8848| 国产精品国产成人国产三级| 顶级嫩模精品视频在线看| 久久精品人人爽人人爽| 国产黄色成人av| 国产精品欧美精品| 99国内精品久久| 亚洲免费观看高清完整版在线观看熊| 91在线视频播放地址| 中文字幕在线不卡| 一本久久精品一区二区| 亚洲成人免费看| 欧美巨大另类极品videosbest | 国产精品88888| 中文字幕不卡三区| 99久久777色| 亚洲成人精品一区二区| 欧美一级搡bbbb搡bbbb| 激情另类小说区图片区视频区| 久久久另类综合| 97久久超碰国产精品电影| 亚洲一区二区三区美女| 欧美成人精品3d动漫h| 国产成人aaa| 亚洲一区二区三区四区在线 | 亚洲欧美日韩一区二区| 在线观看免费亚洲| 男人的天堂亚洲一区| 久久新电视剧免费观看| 91在线精品一区二区| 亚洲一卡二卡三卡四卡无卡久久 | 国产精品网站在线播放| 91网站在线观看视频| 午夜精品久久久久久久久| 欧美一区日本一区韩国一区| 国产麻豆成人精品| 一区二区三区四区不卡在线 | 欧美日韩一区三区四区| 精品一区二区免费在线观看| ●精品国产综合乱码久久久久 | 成人av网站大全| 亚洲国产精品视频| 国产日韩欧美一区二区三区乱码 | 亚洲最大的成人av| 精品成人私密视频| 欧美日韩一二三| 成人福利视频在线| 经典三级在线一区| 亚洲va欧美va人人爽午夜| 亚洲国产经典视频| 日韩一区二区三区四区| 91原创在线视频| 国产精品18久久久久久久久久久久| 亚洲国产视频在线| 中文字幕在线观看不卡视频| 日韩手机在线导航| 色婷婷综合视频在线观看| 国产69精品久久777的优势| 日韩国产高清影视| 亚洲午夜免费电影| 亚洲日韩欧美一区二区在线| 久久久久久久综合色一本| 欧美一二三区精品| 欧美日韩国产另类不卡| 91麻豆精品秘密| 成人99免费视频| 国产成人免费视| 国产美女在线精品| 国产自产高清不卡| 黑人巨大精品欧美黑白配亚洲| 视频一区二区中文字幕| 亚洲一区二区三区小说| 夜夜亚洲天天久久| 亚洲国产精品人人做人人爽| 亚洲伊人伊色伊影伊综合网| 亚洲精品高清视频在线观看| 18成人在线视频| 日韩一区欧美一区| 一区二区三区在线看| 悠悠色在线精品| 亚洲一级不卡视频| 午夜视频久久久久久| 午夜精品影院在线观看| 日本欧美一区二区| 久久精品国产99久久6| 韩国女主播成人在线| 国产成人亚洲精品狼色在线| 国产精品一区不卡| zzijzzij亚洲日本少妇熟睡| 91老司机福利 在线| 欧美色综合网站| 91精品国产乱| 久久亚洲综合av| 1024成人网| 日韩福利电影在线| 国产成人福利片| 91丨porny丨蝌蚪视频| 欧美日韩午夜在线视频| 日韩精品一区二区在线| 国产欧美一区二区三区沐欲| 亚洲天堂网中文字| 亚洲不卡一区二区三区| 久久超碰97中文字幕| av成人动漫在线观看| 欧美日韩国产精选| 久久久久久免费| 亚洲尤物视频在线| 精品一区二区三区影院在线午夜| 国产经典欧美精品| 欧美日韩精品一区二区三区 | 99久久综合色| 欧美日韩日日摸| 久久综合九色欧美综合狠狠| 亚洲视频一区在线观看| 日韩黄色小视频| eeuss影院一区二区三区| 欧美日韩dvd在线观看| 国产欧美一区二区三区鸳鸯浴| 亚洲午夜免费福利视频| 国产福利一区二区三区视频在线| 色婷婷久久久综合中文字幕| 欧美成人一区二区三区片免费| 一区二区三区四区五区视频在线观看| 欧美aⅴ一区二区三区视频| 色综合网色综合| 国产精品麻豆久久久| 亚洲国产日韩a在线播放性色| 国产剧情一区在线| 日韩欧美一区二区久久婷婷|