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

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

?? ip6t_log.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* * This is a module which is used for logging packets. *//* (C) 2001 Jan Rekorajski <baggins@pld.org.pl> * (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/module.h>#include <linux/skbuff.h>#include <linux/ip.h>#include <linux/spinlock.h>#include <linux/icmpv6.h>#include <net/udp.h>#include <net/tcp.h>#include <net/ipv6.h>#include <linux/netfilter.h>#include <linux/netfilter_ipv6/ip6_tables.h>MODULE_AUTHOR("Jan Rekorajski <baggins@pld.org.pl>");MODULE_DESCRIPTION("IP6 tables LOG target module");MODULE_LICENSE("GPL");static unsigned int nflog = 1;MODULE_PARM(nflog, "i");MODULE_PARM_DESC(nflog, "register as internal netfilter logging module"); struct in_device;#include <net/route.h>#include <linux/netfilter_ipv6/ip6t_LOG.h>#if 0#define DEBUGP printk#else#define DEBUGP(format, args...)#endifstruct esphdr {	__u32   spi;}; /* FIXME evil kludge */        /* Use lock to serialize, so printks don't overlap */static spinlock_t log_lock = SPIN_LOCK_UNLOCKED;/* takes in current header and pointer to the header *//* if another header exists, sets hdrptr to the next header   and returns the new header value, else returns IPPROTO_NONE */static u_int8_t ip6_nexthdr(u_int8_t currenthdr, u_int8_t **hdrptr){	u_int8_t hdrlen, nexthdr = IPPROTO_NONE;	switch(currenthdr){		case IPPROTO_AH:		/* whoever decided to do the length of AUTH for ipv6		in 32bit units unlike other headers should be beaten...		repeatedly...with a large stick...no, an even LARGER		stick...no, you're still not thinking big enough */			nexthdr = **hdrptr;			hdrlen = *hdrptr[1] * 4 + 8;			*hdrptr = *hdrptr + hdrlen;			break;		/*stupid rfc2402 */		case IPPROTO_DSTOPTS:		case IPPROTO_ROUTING:		case IPPROTO_HOPOPTS:			nexthdr = **hdrptr;			hdrlen = *hdrptr[1] * 8 + 8;			*hdrptr = *hdrptr + hdrlen;			break;		case IPPROTO_FRAGMENT:			nexthdr = **hdrptr;			*hdrptr = *hdrptr + 8;			break;	}		return nexthdr;}/* One level of recursion won't kill us */static void dump_packet(const struct ip6t_log_info *info,			struct ipv6hdr *ipv6h, int recurse){	u_int8_t currenthdr = ipv6h->nexthdr;	u_int8_t *hdrptr;	int fragment;	/* Max length: 88 "SRC=0000.0000.0000.0000.0000.0000.0000.0000 DST=0000.0000.0000.0000.0000.0000.0000.0000" */	printk("SRC=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(ipv6h->saddr));	printk("DST=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(ipv6h->daddr));	/* Max length: 44 "LEN=65535 TC=255 HOPLIMIT=255 FLOWLBL=FFFFF " */	printk("LEN=%Zu TC=%u HOPLIMIT=%u FLOWLBL=%u ",	       ntohs(ipv6h->payload_len) + sizeof(struct ipv6hdr),	       (ntohl(*(u_int32_t *)ipv6h) & 0x0ff00000) >> 20,	       ipv6h->hop_limit,	       (ntohl(*(u_int32_t *)ipv6h) & 0x000fffff));	fragment = 0;	hdrptr = (u_int8_t *)(ipv6h + 1);	while (currenthdr != IPPROTO_NONE) {		if ((currenthdr == IPPROTO_TCP) ||		    (currenthdr == IPPROTO_UDP) ||		    (currenthdr == IPPROTO_ICMPV6))			break;		/* Max length: 48 "OPT (...) " */		printk("OPT ( ");		switch (currenthdr) {		case IPPROTO_FRAGMENT: {			struct frag_hdr *fhdr = (struct frag_hdr *)hdrptr;			/* Max length: 11 "FRAG:65535 " */			printk("FRAG:%u ", ntohs(fhdr->frag_off) & 0xFFF8);			/* Max length: 11 "INCOMPLETE " */			if (fhdr->frag_off & htons(0x0001))				printk("INCOMPLETE ");			printk("ID:%08x ", fhdr->identification);			if (ntohs(fhdr->frag_off) & 0xFFF8)				fragment = 1;			break;		}		case IPPROTO_DSTOPTS:		case IPPROTO_ROUTING:		case IPPROTO_HOPOPTS:			break;		/* Max Length */		case IPPROTO_AH:		case IPPROTO_ESP:			if (info->logflags & IP6T_LOG_IPOPT) {				struct esphdr *esph = (struct esphdr *)hdrptr;				int esp = (currenthdr == IPPROTO_ESP);				/* Max length: 4 "ESP " */				printk("%s ",esp ? "ESP" : "AH");				/* Length: 15 "SPI=0xF1234567 " */				printk("SPI=0x%x ", ntohl(esph->spi) );				break;			}		default:			break;		}		printk(") ");		currenthdr = ip6_nexthdr(currenthdr, &hdrptr);	}	switch (currenthdr) {	case IPPROTO_TCP: {		struct tcphdr *tcph = (struct tcphdr *)hdrptr;		/* Max length: 10 "PROTO=TCP " */		printk("PROTO=TCP ");		if (fragment)			break;		/* Max length: 20 "SPT=65535 DPT=65535 " */		printk("SPT=%u DPT=%u ",		       ntohs(tcph->source), ntohs(tcph->dest));		/* Max length: 30 "SEQ=4294967295 ACK=4294967295 " */		if (info->logflags & IP6T_LOG_TCPSEQ)			printk("SEQ=%u ACK=%u ",			       ntohl(tcph->seq), ntohl(tcph->ack_seq));		/* Max length: 13 "WINDOW=65535 " */		printk("WINDOW=%u ", ntohs(tcph->window));		/* Max length: 9 "RES=0x3F " */		printk("RES=0x%02x ", (u_int8_t)(ntohl(tcp_flag_word(tcph) & TCP_RESERVED_BITS) >> 22));		/* Max length: 32 "CWR ECE URG ACK PSH RST SYN FIN " */		if (tcph->cwr)			printk("CWR ");		if (tcph->ece)			printk("ECE ");		if (tcph->urg)			printk("URG ");		if (tcph->ack)			printk("ACK ");		if (tcph->psh)			printk("PSH ");		if (tcph->rst)			printk("RST ");		if (tcph->syn)			printk("SYN ");		if (tcph->fin)			printk("FIN ");		/* Max length: 11 "URGP=65535 " */		printk("URGP=%u ", ntohs(tcph->urg_ptr));		if ((info->logflags & IP6T_LOG_TCPOPT)		    && tcph->doff * 4 != sizeof(struct tcphdr)) {			unsigned int i;			/* Max length: 127 "OPT (" 15*4*2chars ") " */			printk("OPT (");			for (i =sizeof(struct tcphdr); i < tcph->doff * 4; i++)				printk("%02X", ((u_int8_t *)tcph)[i]);			printk(") ");		}		break;	}	case IPPROTO_UDP: {		struct udphdr *udph = (struct udphdr *)hdrptr;		/* Max length: 10 "PROTO=UDP " */		printk("PROTO=UDP ");		if (fragment)			break;		/* Max length: 20 "SPT=65535 DPT=65535 " */		printk("SPT=%u DPT=%u LEN=%u ",		       ntohs(udph->source), ntohs(udph->dest),		       ntohs(udph->len));		break;	}	case IPPROTO_ICMPV6: {		struct icmp6hdr *icmp6h = (struct icmp6hdr *)hdrptr;		/* Max length: 13 "PROTO=ICMPv6 " */		printk("PROTO=ICMPv6 ");		if (fragment)			break;		/* Max length: 18 "TYPE=255 CODE=255 " */		printk("TYPE=%u CODE=%u ", icmp6h->icmp6_type, icmp6h->icmp6_code);		switch (icmp6h->icmp6_type) {		case ICMPV6_ECHO_REQUEST:		case ICMPV6_ECHO_REPLY:			/* Max length: 19 "ID=65535 SEQ=65535 " */			printk("ID=%u SEQ=%u ",				ntohs(icmp6h->icmp6_identifier),				ntohs(icmp6h->icmp6_sequence));			break;		case ICMPV6_MGM_QUERY:		case ICMPV6_MGM_REPORT:		case ICMPV6_MGM_REDUCTION:			break;		case ICMPV6_PARAMPROB:			/* Max length: 17 "POINTER=ffffffff " */			printk("POINTER=%08x ", ntohl(icmp6h->icmp6_pointer));			/* Fall through */		case ICMPV6_DEST_UNREACH:		case ICMPV6_PKT_TOOBIG:		case ICMPV6_TIME_EXCEED:			/* Max length: 3+maxlen */			if (recurse) {				printk("[");				dump_packet(info, (struct ipv6hdr *)(icmp6h + 1), 0);				printk("] ");			}			/* Max length: 10 "MTU=65535 " */			if (icmp6h->icmp6_type == ICMPV6_PKT_TOOBIG)				printk("MTU=%u ", ntohl(icmp6h->icmp6_mtu));		}		break;	}	/* Max length: 10 "PROTO=255 " */	default:		printk("PROTO=%u ", currenthdr);	}}static voidip6t_log_packet(unsigned int hooknum,		const struct sk_buff *skb,		const struct net_device *in,		const struct net_device *out,		const struct ip6t_log_info *loginfo,		const char *level_string,		const char *prefix){	struct ipv6hdr *ipv6h = skb->nh.ipv6h;	spin_lock_bh(&log_lock);	printk(level_string);	printk("%sIN=%s OUT=%s ",		prefix == NULL ? loginfo->prefix : prefix,		in ? in->name : "",		out ? out->name : "");	if (in && !out) {		/* MAC logging for input chain only. */		printk("MAC=");		if (skb->dev && skb->dev->hard_header_len && skb->mac.raw != (void*)ipv6h) {			if (skb->dev->type != ARPHRD_SIT){			  int i;			  unsigned char *p = skb->mac.raw;			  for (i = 0; i < skb->dev->hard_header_len; i++,p++)				printk("%02x%c", *p,			       		i==skb->dev->hard_header_len - 1			       		? ' ':':');			} else {			  int i;			  unsigned char *p = skb->mac.raw;			  if ( p - (ETH_ALEN*2+2) > skb->head ){			    p -= (ETH_ALEN+2);			    for (i = 0; i < (ETH_ALEN); i++,p++)				printk("%02x%s", *p,					i == ETH_ALEN-1 ? "->" : ":");			    p -= (ETH_ALEN*2);			    for (i = 0; i < (ETH_ALEN); i++,p++)				printk("%02x%c", *p,					i == ETH_ALEN-1 ? ' ' : ':');			  }			  			  if ((skb->dev->addr_len == 4) &&			      skb->dev->hard_header_len > 20){			    printk("TUNNEL=");			    p = skb->mac.raw + 12;			    for (i = 0; i < 4; i++,p++)				printk("%3d%s", *p,					i == 3 ? "->" : ".");			    for (i = 0; i < 4; i++,p++)				printk("%3d%c", *p,					i == 3 ? ' ' : '.');			  }			}		} else			printk(" ");	}	dump_packet(loginfo, ipv6h, 1);	printk("\n");	spin_unlock_bh(&log_lock);}static unsigned intip6t_log_target(struct sk_buff **pskb,		unsigned int hooknum,		const struct net_device *in,		const struct net_device *out,		const void *targinfo,		void *userinfo){	const struct ip6t_log_info *loginfo = targinfo;	char level_string[4] = "< >";	level_string[1] = '0' + (loginfo->level % 8);	ip6t_log_packet(hooknum, *pskb, in, out, loginfo, level_string, NULL);	return IP6T_CONTINUE;}static voidip6t_logfn(unsigned int hooknum,	   const struct sk_buff *skb,	   const struct net_device *in,	   const struct net_device *out,	   const char *prefix){	struct ip6t_log_info loginfo = {		.level = 0,		.logflags = IP6T_LOG_MASK,		.prefix = ""	};	ip6t_log_packet(hooknum, skb, in, out, &loginfo, KERN_WARNING, prefix);}static int ip6t_log_checkentry(const char *tablename,			       const struct ip6t_entry *e,			       void *targinfo,			       unsigned int targinfosize,			       unsigned int hook_mask){	const struct ip6t_log_info *loginfo = targinfo;	if (targinfosize != IP6T_ALIGN(sizeof(struct ip6t_log_info))) {		DEBUGP("LOG: targinfosize %u != %u\n",		       targinfosize, IP6T_ALIGN(sizeof(struct ip6t_log_info)));		return 0;	}	if (loginfo->level >= 8) {		DEBUGP("LOG: level %u >= 8\n", loginfo->level);		return 0;	}	if (loginfo->prefix[sizeof(loginfo->prefix)-1] != '\0') {		DEBUGP("LOG: prefix term %i\n",		       loginfo->prefix[sizeof(loginfo->prefix)-1]);		return 0;	}	return 1;}static struct ip6t_target ip6t_log_reg = {	.name 		= "LOG",	.target 	= ip6t_log_target, 	.checkentry	= ip6t_log_checkentry, 	.me 		= THIS_MODULE,};static int __init init(void){	if (ip6t_register_target(&ip6t_log_reg))		return -EINVAL;	if (nflog)		nf_log_register(PF_INET6, &ip6t_logfn);	return 0;}static void __exit fini(void){	if (nflog)		nf_log_unregister(PF_INET6, &ip6t_logfn);	ip6t_unregister_target(&ip6t_log_reg);}module_init(init);module_exit(fini);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av电影在线观看| 日韩精品欧美精品| 久久久久一区二区三区四区| 欧美精品123区| 欧美一区二区视频在线观看| 欧美一区二区三区成人| 欧美一区二区三区播放老司机| 欧美在线|欧美| 欧美日本免费一区二区三区| 欧美精品高清视频| 日韩视频不卡中文| 久久久亚洲综合| 国产嫩草影院久久久久| 国产精品麻豆视频| 夜夜亚洲天天久久| 日韩电影在线观看电影| 狠狠色丁香久久婷婷综合_中| 国产一区二区三区香蕉| 成人av网站免费观看| 一本大道综合伊人精品热热| 欧美日韩国产高清一区二区三区| 91精品国产综合久久久蜜臀图片| 秋霞影院一区二区| 精品一区二区影视| 国产精品一色哟哟哟| 国产成人精品亚洲日本在线桃色| 国产福利一区二区三区视频在线| 成人av电影观看| 欧美日韩1234| 欧美高清在线一区| 日韩中文字幕av电影| 国产高清久久久| 成人av中文字幕| 欧美精品电影在线播放| 久久精品一区四区| 亚洲va韩国va欧美va| 国产在线播精品第三| 91黄色免费看| 欧美一区日本一区韩国一区| 国产精品久久久久aaaa樱花| 午夜电影网亚洲视频| 国产ts人妖一区二区| 欧美性猛交xxxx黑人交| 久久久久久日产精品| 又紧又大又爽精品一区二区| 国产永久精品大片wwwapp| 欧美视频一区二区在线观看| 久久久久88色偷偷免费| 欧美a级一区二区| 日韩一区二区电影| 亚洲美女区一区| 国产麻豆视频一区| 6080日韩午夜伦伦午夜伦| 国产精品乱子久久久久| 老司机午夜精品99久久| 欧美三级韩国三级日本三斤| 国产精品国产三级国产普通话蜜臀 | 欧美日韩精品二区第二页| 亚洲男人的天堂一区二区| 国产一区二区主播在线| 91精品视频网| 亚洲宅男天堂在线观看无病毒| 国产一二精品视频| 日韩欧美一二区| 天天综合色天天综合| 欧美三级电影网| 亚洲综合激情另类小说区| 成人国产在线观看| 国产精品美女www爽爽爽| 国产福利精品一区二区| 国产丝袜在线精品| 国产二区国产一区在线观看 | 国产一区二区视频在线| 91精品国产综合久久久久久漫画| 亚洲成人免费电影| 欧美日韩dvd在线观看| 日本成人中文字幕在线视频| 2020国产精品自拍| 狠狠久久亚洲欧美| 久久久欧美精品sm网站| 成人在线综合网站| 亚洲少妇最新在线视频| 欧美亚洲国产一区二区三区va | 久久精品一区四区| 成人h精品动漫一区二区三区| 国产精品视频yy9299一区| 99re这里都是精品| 亚洲午夜三级在线| 91精选在线观看| 国内精品嫩模私拍在线| 国产欧美日韩卡一| 91福利在线看| 日本va欧美va精品发布| 久久久三级国产网站| av毛片久久久久**hd| 亚洲一区在线视频| 日韩免费观看2025年上映的电影| 国产精品一区二区久久精品爱涩 | 亚洲精品在线免费播放| 国产精品一区久久久久| 亚洲乱码国产乱码精品精的特点| 欧美制服丝袜第一页| 琪琪久久久久日韩精品| 久久久高清一区二区三区| 91免费视频观看| 日本三级亚洲精品| 国产人久久人人人人爽| 色94色欧美sute亚洲线路一ni | 欧美激情一区二区三区全黄| 色久综合一二码| 久久精品久久99精品久久| 亚洲天堂2016| 日韩欧美综合一区| 色综合 综合色| 奇米四色…亚洲| 亚洲丝袜另类动漫二区| 欧美电影免费观看高清完整版在线观看 | 亚洲激情男女视频| 91精品国产综合久久福利| 粉嫩av亚洲一区二区图片| 亚洲第一综合色| 中文字幕日韩欧美一区二区三区| 欧美肥妇bbw| 91丝袜国产在线播放| 经典一区二区三区| 日韩高清在线电影| 自拍偷自拍亚洲精品播放| 欧美一级二级在线观看| 欧美午夜精品一区二区蜜桃 | 亚洲最大色网站| 中文字幕精品在线不卡| 日韩欧美一区二区在线视频| 一本色道亚洲精品aⅴ| 国产盗摄精品一区二区三区在线| 免费av成人在线| 天天影视网天天综合色在线播放| 国产精品久久久久影视| 国产视频一区在线播放| 26uuu国产日韩综合| 欧美一区二区三区免费| 欧美日韩在线播放一区| 在线一区二区三区| 一本色道久久综合狠狠躁的推荐| 国产一区二区h| 国产一区二区三区不卡在线观看 | 国产欧美日韩在线看| 日韩一区二区三区免费观看| 欧美日韩久久久一区| 欧美日韩免费一区二区三区| 欧美专区亚洲专区| 欧美综合色免费| 欧美日韩精品久久久| 欧美绝品在线观看成人午夜影视| 一本一本久久a久久精品综合麻豆| av不卡免费电影| 99视频精品在线| 91麻豆国产福利在线观看| 色综合久久九月婷婷色综合| 91免费视频网址| 97久久超碰国产精品电影| 色综合色狠狠天天综合色| 91在线看国产| 欧美三级一区二区| 3d成人动漫网站| 久久伊人中文字幕| 国产精品麻豆一区二区| 亚洲国产精品精华液2区45| 中文字幕佐山爱一区二区免费| 亚洲欧美视频在线观看视频| 亚洲6080在线| 黄网站免费久久| 91在线porny国产在线看| 欧美色男人天堂| 日韩欧美国产一区二区三区| 欧美国产日韩亚洲一区| 一区二区三区国产精华| 精品中文av资源站在线观看| 高潮精品一区videoshd| 在线亚洲高清视频| 精品噜噜噜噜久久久久久久久试看| 久久久久久久网| 亚洲国产精品一区二区久久| 美日韩一区二区| av在线播放一区二区三区| 精品视频一区三区九区| 久久人人97超碰com| 亚洲精选视频在线| 韩国三级中文字幕hd久久精品| 不卡av电影在线播放| 91精品久久久久久久久99蜜臂| 国产午夜精品在线观看| 亚洲成a人片综合在线| 国产91精品欧美| 日韩午夜在线影院| 亚洲欧美日韩国产手机在线 | 欧美日韩小视频| 日本一区二区视频在线观看| 日韩av中文字幕一区二区| 99国产精品视频免费观看| 日韩欧美激情一区|