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

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

?? pcap-dag.c

?? Ubuntu packages of security software。 相當不錯的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * pcap-dag.c: Packet capture interface for Endace DAG card. * * The functionality of this code attempts to mimic that of pcap-linux as much * as possible.  This code is compiled in several different ways depending on * whether DAG_ONLY and HAVE_DAG_API are defined.  If HAVE_DAG_API is not * defined it should not get compiled in, otherwise if DAG_ONLY is defined then * the 'dag_' function calls are renamed to 'pcap_' equivalents.  If DAG_ONLY * is not defined then nothing is altered - the dag_ functions will be * called as required from their pcap-linux/bpf equivalents. * * Authors: Richard Littin, Sean Irvine ({richard,sean}@reeltwo.com) * Modifications: Jesper Peterson  <support@endace.com> *                Koryn Grant      <support@endace.com> *                Stephen Donnelly <support@endace.com> */#ifndef lintstatic const char rcsid[] _U_ =	"@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.21.2.7 2007/06/22 06:43:58 guy Exp $ (LBL)";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <sys/param.h>			/* optionally get BSD define */#include <stdlib.h>#include <string.h>#include <errno.h>#include "pcap-int.h"#include <ctype.h>#include <netinet/in.h>#include <sys/mman.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>struct mbuf;		/* Squelch compiler warnings on some platforms for */struct rtentry;		/* declarations in <net/if.h> */#include <net/if.h>#include "dagnew.h"#include "dagapi.h"#define ATM_CELL_SIZE		52#define ATM_HDR_SIZE		4/* * A header containing additional MTP information. */#define MTP2_SENT_OFFSET		0	/* 1 byte */#define MTP2_ANNEX_A_USED_OFFSET	1	/* 1 byte */#define MTP2_LINK_NUMBER_OFFSET		2	/* 2 bytes */#define MTP2_HDR_LEN			4	/* length of the header */#define MTP2_ANNEX_A_NOT_USED      0#define MTP2_ANNEX_A_USED          1#define MTP2_ANNEX_A_USED_UNKNOWN  2/* SunATM pseudo header */struct sunatm_hdr {	unsigned char	flags;		/* destination and traffic type */	unsigned char	vpi;		/* VPI */	unsigned short	vci;		/* VCI */};typedef struct pcap_dag_node {	struct pcap_dag_node *next;	pcap_t *p;	pid_t pid;} pcap_dag_node_t;static pcap_dag_node_t *pcap_dags = NULL;static int atexit_handler_installed = 0;static const unsigned short endian_test_word = 0x0100;#define IS_BIGENDIAN() (*((unsigned char *)&endian_test_word))#ifdef DAG_ONLY/* This code is required when compiling for a DAG device only. */#include "pcap-dag.h"/* Replace dag function names with pcap equivalent. */#define dag_open_live pcap_open_live#define dag_platform_finddevs pcap_platform_finddevs#endif /* DAG_ONLY */#define MAX_DAG_PACKET 65536static unsigned char TempPkt[MAX_DAG_PACKET];static int dag_setfilter(pcap_t *p, struct bpf_program *fp);static int dag_stats(pcap_t *p, struct pcap_stat *ps);static int dag_set_datalink(pcap_t *p, int dlt);static int dag_get_datalink(pcap_t *p);static int dag_setnonblock(pcap_t *p, int nonblock, char *errbuf);static voiddelete_pcap_dag(pcap_t *p){	pcap_dag_node_t *curr = NULL, *prev = NULL;	for (prev = NULL, curr = pcap_dags; curr != NULL && curr->p != p; prev = curr, curr = curr->next) {		/* empty */	}	if (curr != NULL && curr->p == p) {		if (prev != NULL) {			prev->next = curr->next;		} else {			pcap_dags = curr->next;		}	}}/* * Performs a graceful shutdown of the DAG card, frees dynamic memory held * in the pcap_t structure, and closes the file descriptor for the DAG card. */static voiddag_platform_close(pcap_t *p){		if (p != NULL) {#ifdef HAVE_DAG_STREAMS_API		if(dag_stop_stream(p->fd, p->md.dag_stream) < 0)			fprintf(stderr,"dag_stop_stream: %s\n", strerror(errno));				if(dag_detach_stream(p->fd, p->md.dag_stream) < 0)			fprintf(stderr,"dag_detach_stream: %s\n", strerror(errno));#else		if(dag_stop(p->fd) < 0)			fprintf(stderr,"dag_stop: %s\n", strerror(errno));#endif /* HAVE_DAG_STREAMS_API */		if(dag_close(p->fd) < 0)			fprintf(stderr,"dag_close: %s\n", strerror(errno));	}	delete_pcap_dag(p);	/* Note: don't need to call close(p->fd) here as dag_close(p->fd) does this. */}static voidatexit_handler(void){	while (pcap_dags != NULL) {		if (pcap_dags->pid == getpid()) {			dag_platform_close(pcap_dags->p);		} else {			delete_pcap_dag(pcap_dags->p);		}	}}static intnew_pcap_dag(pcap_t *p){	pcap_dag_node_t *node = NULL;	if ((node = malloc(sizeof(pcap_dag_node_t))) == NULL) {		return -1;	}	if (!atexit_handler_installed) {		atexit(atexit_handler);		atexit_handler_installed = 1;	}	node->next = pcap_dags;	node->p = p;	node->pid = getpid();	pcap_dags = node;	return 0;}/* *  Read at most max_packets from the capture stream and call the callback *  for each of them. Returns the number of packets handled, -1 if an *  error occured, or -2 if we were told to break out of the loop. */static intdag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user){	unsigned int processed = 0;	int flags = p->md.dag_offset_flags;	unsigned int nonblocking = flags & DAGF_NONBLOCK;	/* Get the next bufferful of packets (if necessary). */	while (p->md.dag_mem_top - p->md.dag_mem_bottom < dag_record_size) { 		/*		 * Has "pcap_breakloop()" been called?		 */		if (p->break_loop) {			/*			 * Yes - clear the flag that indicates that			 * it has, and return -2 to indicate that			 * we were told to break out of the loop.			 */			p->break_loop = 0;			return -2;		}#ifdef HAVE_DAG_STREAMS_API		/* dag_advance_stream() will block (unless nonblock is called)		 * until 64kB of data has accumulated.		 * If to_ms is set, it will timeout before 64kB has accumulated.		 * We wait for 64kB because processing a few packets at a time		 * can cause problems at high packet rates (>200kpps) due		 * to inefficiencies.		 * This does mean if to_ms is not specified the capture may 'hang'		 * for long periods if the data rate is extremely slow (<64kB/sec)		 * If non-block is specified it will return immediately. The user		 * is then responsible for efficiency.		 */		p->md.dag_mem_top = dag_advance_stream(p->fd, p->md.dag_stream, &(p->md.dag_mem_bottom));#else		/* dag_offset does not support timeouts */		p->md.dag_mem_top = dag_offset(p->fd, &(p->md.dag_mem_bottom), flags);#endif /* HAVE_DAG_STREAMS_API */		if (nonblocking && (p->md.dag_mem_top - p->md.dag_mem_bottom < dag_record_size))		{			/* Pcap is configured to process only available packets, and there aren't any, return immediately. */			return 0;		}				if(!nonblocking &&		   p->md.dag_timeout &&		   (p->md.dag_mem_top - p->md.dag_mem_bottom < dag_record_size))		{			/* Blocking mode, but timeout set and no data has arrived, return anyway.*/			return 0;		}	}		/* Process the packets. */	while (p->md.dag_mem_top - p->md.dag_mem_bottom >= dag_record_size) {		unsigned short packet_len = 0;		int caplen = 0;		struct pcap_pkthdr	pcap_header;#ifdef HAVE_DAG_STREAMS_API		dag_record_t *header = (dag_record_t *)(p->md.dag_mem_bottom);#else		dag_record_t *header = (dag_record_t *)(p->md.dag_mem_base + p->md.dag_mem_bottom);#endif /* HAVE_DAG_STREAMS_API */		u_char *dp = ((u_char *)header) + dag_record_size;		unsigned short rlen; 		/*		 * Has "pcap_breakloop()" been called?		 */		if (p->break_loop) {			/*			 * Yes - clear the flag that indicates that			 * it has, and return -2 to indicate that			 * we were told to break out of the loop.			 */			p->break_loop = 0;			return -2;		} 		rlen = ntohs(header->rlen);		if (rlen < dag_record_size)		{			strncpy(p->errbuf, "dag_read: record too small", PCAP_ERRBUF_SIZE);			return -1;		}		p->md.dag_mem_bottom += rlen;		switch(header->type) {		case TYPE_ATM:#ifdef TYPE_AAL5		case TYPE_AAL5:			if (header->type == TYPE_AAL5) {				packet_len = ntohs(header->wlen);				caplen = rlen - dag_record_size;			}#endif#ifdef TYPE_MC_ATM		case TYPE_MC_ATM:			if (header->type == TYPE_MC_ATM) {				caplen = packet_len = ATM_CELL_SIZE;				dp+=4;			}#endif#ifdef TYPE_MC_AAL5		case TYPE_MC_AAL5:			if (header->type == TYPE_MC_AAL5) {				packet_len = ntohs(header->wlen);				caplen = rlen - dag_record_size - 4;				dp+=4;			}#endif			if (header->type == TYPE_ATM) {				caplen = packet_len = ATM_CELL_SIZE;			}			if (p->linktype == DLT_SUNATM) {				struct sunatm_hdr *sunatm = (struct sunatm_hdr *)dp;				unsigned long rawatm;									rawatm = ntohl(*((unsigned long *)dp));				sunatm->vci = htons((rawatm >>  4) & 0xffff);				sunatm->vpi = (rawatm >> 20) & 0x00ff;				sunatm->flags = ((header->flags.iface & 1) ? 0x80 : 0x00) | 					((sunatm->vpi == 0 && sunatm->vci == htons(5)) ? 6 :					 ((sunatm->vpi == 0 && sunatm->vci == htons(16)) ? 5 : 					  ((dp[ATM_HDR_SIZE] == 0xaa &&					    dp[ATM_HDR_SIZE+1] == 0xaa &&					    dp[ATM_HDR_SIZE+2] == 0x03) ? 2 : 1)));			} else {				packet_len -= ATM_HDR_SIZE;				caplen -= ATM_HDR_SIZE;				dp += ATM_HDR_SIZE;			}			break;#ifdef TYPE_DSM_COLOR_ETH		case TYPE_DSM_COLOR_ETH:#endif#ifdef TYPE_COLOR_ETH		case TYPE_COLOR_ETH:#endif		case TYPE_ETH:			packet_len = ntohs(header->wlen);			packet_len -= (p->md.dag_fcs_bits >> 3);			caplen = rlen - dag_record_size - 2;			if (caplen > packet_len) {				caplen = packet_len;			}			dp += 2;			break;#ifdef TYPE_DSM_COLOR_HDLC_POS		case TYPE_DSM_COLOR_HDLC_POS:#endif#ifdef TYPE_COLOR_HDLC_POS		case TYPE_COLOR_HDLC_POS:#endif		case TYPE_HDLC_POS:			packet_len = ntohs(header->wlen);			packet_len -= (p->md.dag_fcs_bits >> 3);			caplen = rlen - dag_record_size;			if (caplen > packet_len) {				caplen = packet_len;			}			break;#ifdef TYPE_COLOR_MC_HDLC_POS		case TYPE_COLOR_MC_HDLC_POS:#endif#ifdef TYPE_MC_HDLC		case TYPE_MC_HDLC:			packet_len = ntohs(header->wlen);			packet_len -= (p->md.dag_fcs_bits >> 3);			caplen = rlen - dag_record_size - 4;			if (caplen > packet_len) {				caplen = packet_len;			}			/* jump the MC_HDLC_HEADER */			dp += 4;			if (p->linktype == DLT_MTP2_WITH_PHDR) {				/* Add the MTP2 Pseudo Header */				caplen += MTP2_HDR_LEN;				packet_len += MTP2_HDR_LEN;				TempPkt[MTP2_SENT_OFFSET] = 0;				TempPkt[MTP2_ANNEX_A_USED_OFFSET] = MTP2_ANNEX_A_USED_UNKNOWN;				*(TempPkt+MTP2_LINK_NUMBER_OFFSET) = ((header->rec.mc_hdlc.mc_header>>16)&0x01);				*(TempPkt+MTP2_LINK_NUMBER_OFFSET+1) = ((header->rec.mc_hdlc.mc_header>>24)&0xff);				memcpy(TempPkt+MTP2_HDR_LEN, dp, caplen);				dp = TempPkt;			}			break;#endif		default:			/* Unhandled ERF type.			 * Ignore rather than generating error			 */			continue;		} 		if (caplen > p->snapshot)			caplen = p->snapshot;		/* Count lost packets. */		switch(header->type) {#ifdef TYPE_COLOR_HDLC_POS			/* in this type the color value overwrites the lctr */		case TYPE_COLOR_HDLC_POS:			break;#endif#ifdef TYPE_COLOR_ETH			/* in this type the color value overwrites the lctr */		case TYPE_COLOR_ETH:			break;#endif#ifdef TYPE_DSM_COLOR_HDLC_POS			/* in this type the color value overwrites the lctr */		case TYPE_DSM_COLOR_HDLC_POS:			break;#endif#ifdef TYPE_DSM_COLOR_ETH			/* in this type the color value overwrites the lctr */		case TYPE_DSM_COLOR_ETH:			break;#endif#ifdef TYPE_COLOR_MC_HDLC_POS		case TYPE_COLOR_MC_HDLC_POS:			break;#endif		default:			if (header->lctr) {				if (p->md.stat.ps_drop > (UINT_MAX - ntohs(header->lctr))) {					p->md.stat.ps_drop = UINT_MAX;				} else {					p->md.stat.ps_drop += ntohs(header->lctr);				}			}		}		/* Run the packet filter if there is one. */		if ((p->fcode.bf_insns == NULL) || bpf_filter(p->fcode.bf_insns, dp, packet_len, caplen)) {			/* convert between timestamp formats */			register unsigned long long ts;							if (IS_BIGENDIAN()) {				ts = SWAPLL(header->ts);			} else {				ts = header->ts;			}			pcap_header.ts.tv_sec = ts >> 32;			ts = (ts & 0xffffffffULL) * 1000000;			ts += 0x80000000; /* rounding */			pcap_header.ts.tv_usec = ts >> 32;					if (pcap_header.ts.tv_usec >= 1000000) {				pcap_header.ts.tv_usec -= 1000000;				pcap_header.ts.tv_sec++;			}			/* Fill in our own header data */			pcap_header.caplen = caplen;			pcap_header.len = packet_len;				/* Count the packet. */			p->md.stat.ps_recv++;				/* Call the user supplied callback function */			callback(user, &pcap_header, dp);				/* Only count packets that pass the filter, for consistency with standard Linux behaviour. */			processed++;			if (processed == cnt)			{				/* Reached the user-specified limit. */				return cnt;			}		}	}	return processed;}static intdag_inject(pcap_t *p, const void *buf _U_, size_t size _U_){	strlcpy(p->errbuf, "Sending packets isn't supported on DAG cards",	    PCAP_ERRBUF_SIZE);	return (-1);}/* *  Get a handle for a live capture from the given DAG device.  Passing a NULL *  device will result in a failure.  The promisc flag is ignored because DAG *  cards are always promiscuous.  The to_ms parameter is also ignored as it is *  not supported in hardware. *   *  snaplen is now also ignored, until we get per-stream slen support. Set *  slen with approprite DAG tool BEFORE pcap_open_live(). * *  See also pcap(3). */pcap_t *dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf){	char conf[30]; /* dag configure string */	pcap_t *handle;	char *s;	int n;	daginf_t* daginf;	char * newDev = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本一区二区| 亚洲福利一区二区| 香蕉影视欧美成人| 福利一区福利二区| 91麻豆精品国产91久久久久久久久 | 成人欧美一区二区三区黑人麻豆| 五月婷婷综合在线| 91在线观看视频| 国产欧美一区二区精品久导航| 偷拍日韩校园综合在线| 成人av电影免费在线播放| 精品国产伦一区二区三区免费 | 欧美激情一二三区| 蜜桃视频一区二区三区在线观看| 97久久超碰国产精品| 久久久精品黄色| 国产一区二区主播在线| 777奇米四色成人影色区| 亚洲综合在线视频| 91亚洲精品一区二区乱码| 欧美国产精品劲爆| 粉嫩av亚洲一区二区图片| 久久综合久久99| 精品亚洲欧美一区| 久久久久九九视频| 国产美女在线观看一区| 日韩一区二区三| 日韩成人av影视| 欧美一卡2卡3卡4卡| 亚洲韩国一区二区三区| 日本韩国欧美三级| 亚洲综合区在线| 欧美性猛交xxxx乱大交退制版| 一区二区三区**美女毛片| 欧美性色综合网| 亚洲成av人片www| 91精品国产91久久综合桃花| 三级欧美在线一区| 欧美电影精品一区二区| 久久99精品国产91久久来源| 欧美zozo另类异族| 成人免费精品视频| 一区二区在线观看av| 色悠久久久久综合欧美99| 亚洲曰韩产成在线| 欧美一卡二卡三卡| 国产盗摄女厕一区二区三区 | www.66久久| 亚洲精品高清在线| 欧美日韩国产天堂| 韩国精品主播一区二区在线观看 | 91精品国产综合久久精品| 日本美女一区二区三区视频| 精品少妇一区二区三区在线视频 | 综合精品久久久| 91官网在线观看| 午夜精品久久久久久久 | 国产乱一区二区| 中文字幕日韩av资源站| 欧美三级韩国三级日本一级| 日本不卡在线视频| 国产精品久久久久久福利一牛影视 | 亚洲乱码国产乱码精品精可以看| 在线观看视频欧美| 理论电影国产精品| 亚洲少妇屁股交4| 91精品国产福利| 9i看片成人免费高清| 午夜精品久久久久久久久| www亚洲一区| 精品视频在线视频| 夫妻av一区二区| 日韩有码一区二区三区| 国产精品久久久99| 欧美一级二级三级乱码| 91在线porny国产在线看| 蜜臀久久99精品久久久画质超高清| 国产目拍亚洲精品99久久精品| 欧美亚洲综合另类| 丁香婷婷综合五月| 久久精品国产免费| 亚洲午夜电影在线观看| 国产精品毛片a∨一区二区三区| 欧美精品777| 91久久精品一区二区二区| 岛国精品在线播放| 精品一区二区三区免费毛片爱| 亚洲综合色丁香婷婷六月图片| 国产清纯白嫩初高生在线观看91 | 狠狠狠色丁香婷婷综合激情 | 国产一区二区三区综合| 亚洲国产综合在线| 亚洲精品视频一区二区| 中文久久乱码一区二区| xfplay精品久久| 日韩丝袜美女视频| 欧美女孩性生活视频| 91国产福利在线| 91成人看片片| 一本色道久久综合亚洲精品按摩| 国产白丝网站精品污在线入口| 久久精品国产久精国产| 青草av.久久免费一区| 亚洲成人在线观看视频| 亚洲国产精品视频| 亚洲线精品一区二区三区八戒| 亚洲精品综合在线| 亚洲男同性视频| 亚洲欧美国产高清| 自拍av一区二区三区| 亚洲人123区| 亚洲视频在线一区| 一区二区三区在线免费| 伊人婷婷欧美激情| 亚洲va国产va欧美va观看| 亚洲午夜激情av| 日韩综合一区二区| 天天影视网天天综合色在线播放| 亚洲国产综合在线| 免费欧美高清视频| 美国十次了思思久久精品导航| 日本欧美一区二区三区乱码| 老司机精品视频一区二区三区| 久久99精品国产| 成人综合日日夜夜| 91在线免费视频观看| 91福利区一区二区三区| 欧美精品粉嫩高潮一区二区| 欧美一区二区啪啪| 国产亚洲欧美中文| 亚洲欧美偷拍另类a∨色屁股| 亚洲伊人伊色伊影伊综合网| 天堂影院一区二区| 紧缚奴在线一区二区三区| 国产91精品一区二区麻豆亚洲| 波多野结衣中文字幕一区二区三区 | 亚洲电影在线播放| 蜜臀av一级做a爰片久久| 国产精品一区二区91| 91美女片黄在线观看| 91精品国产高清一区二区三区蜜臀 | 欧美va亚洲va国产综合| 国产亚洲精品资源在线26u| 亚洲精品高清视频在线观看| 天堂在线一区二区| 国产成人午夜99999| 欧美在线综合视频| 精品奇米国产一区二区三区| 中文字幕 久热精品 视频在线 | 1区2区3区欧美| 蜜臀99久久精品久久久久久软件| 福利一区在线观看| 欧美一级二级在线观看| 亚洲日本欧美天堂| 麻豆一区二区在线| 色综合久久中文字幕综合网| 日韩三级视频中文字幕| 亚洲男人的天堂网| 国产不卡在线视频| 日韩一区二区三区电影 | 日本三级韩国三级欧美三级| www.日韩av| 精品美女被调教视频大全网站| 亚洲免费资源在线播放| 国产一区二区三区免费播放 | 蜜臀99久久精品久久久久久软件| 99精品国产热久久91蜜凸| 精品国产一区二区三区久久久蜜月| 亚洲激情图片qvod| av亚洲精华国产精华| 精品国产乱码久久久久久浪潮 | 日韩一区二区三区电影在线观看| 国产精品久久久久久久久久久免费看| 蜜桃久久精品一区二区| 91黄色免费版| 最新热久久免费视频| 国产麻豆精品在线观看| 欧美一二三在线| 亚洲午夜免费电影| eeuss鲁片一区二区三区| 26uuu国产电影一区二区| 日韩av一级电影| 欧美日本在线观看| 一片黄亚洲嫩模| 在线观看91精品国产入口| 国产精品毛片久久久久久| 国产在线看一区| 欧美mv日韩mv| 激情六月婷婷综合| 精品区一区二区| 韩国女主播一区| 久久婷婷久久一区二区三区| 捆绑紧缚一区二区三区视频| 欧美一级二级在线观看| 日本麻豆一区二区三区视频| 91精品中文字幕一区二区三区| 丝袜诱惑亚洲看片| 制服丝袜亚洲精品中文字幕| 午夜精品福利久久久| 欧美日本在线播放|