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

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

?? util.c

?? TCPDUMP的C語言源代碼,是在數(shù)據(jù)鏈路層的應(yīng)用
?? C
字號:
/* * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that: (1) source code distributions * retain the above copyright notice and this paragraph in its entirety, (2) * distributions including binary code include the above copyright notice and * this paragraph in its entirety in the documentation or other materials * provided with the distribution, and (3) all advertising materials mentioning * features or use of this software display the following acknowledgement: * ``This product includes software developed by the University of California, * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of * the University nor the names of its contributors may be used to endorse * or promote products derived from this software without specific prior * written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef lintstatic const char rcsid[] _U_ =    "@(#) $Header: /tcpdump/master/tcpdump/util.c,v 1.109 2007-01-29 09:59:42 hannes Exp $ (LBL)";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <tcpdump-stdinc.h>#include <sys/stat.h>#include <errno.h>#ifdef HAVE_FCNTL_H#include <fcntl.h>#endif#include <pcap.h>#include <stdio.h>#include <stdarg.h>#include <stdlib.h>#include <string.h>#include "interface.h"char * ts_format(register int, register int);/* * Print out a null-terminated filename (or other ascii string). * If ep is NULL, assume no truncation check is needed. * Return true if truncated. */intfn_print(register const u_char *s, register const u_char *ep){	register int ret;	register u_char c;	ret = 1;			/* assume truncated */	while (ep == NULL || s < ep) {		c = *s++;		if (c == '\0') {			ret = 0;			break;		}		if (!isascii(c)) {			c = toascii(c);			putchar('M');			putchar('-');		}		if (!isprint(c)) {			c ^= 0x40;	/* DEL to ?, others to alpha */			putchar('^');		}		putchar(c);	}	return(ret);}/* * Print out a counted filename (or other ascii string). * If ep is NULL, assume no truncation check is needed. * Return true if truncated. */intfn_printn(register const u_char *s, register u_int n,	  register const u_char *ep){	register u_char c;	while (n > 0 && (ep == NULL || s < ep)) {		n--;		c = *s++;		if (!isascii(c)) {			c = toascii(c);			putchar('M');			putchar('-');		}		if (!isprint(c)) {			c ^= 0x40;	/* DEL to ?, others to alpha */			putchar('^');		}		putchar(c);	}	return (n == 0) ? 0 : 1;}/* * Print out a null-padded filename (or other ascii string). * If ep is NULL, assume no truncation check is needed. * Return true if truncated. */intfn_printzp(register const u_char *s, register u_int n,	  register const u_char *ep){	register int ret;	register u_char c;	ret = 1;			/* assume truncated */	while (n > 0 && (ep == NULL || s < ep)) {		n--;		c = *s++;		if (c == '\0') {			ret = 0;			break;		}		if (!isascii(c)) {			c = toascii(c);			putchar('M');			putchar('-');		}		if (!isprint(c)) {			c ^= 0x40;	/* DEL to ?, others to alpha */			putchar('^');		}		putchar(c);	}	return (n == 0) ? 0 : ret;}/* * Format the timestamp */char *ts_format(register int sec, register int usec){        static char buf[sizeof("00:00:00.000000")];        (void)snprintf(buf, sizeof(buf), "%02d:%02d:%02d.%06u",               sec / 3600, (sec % 3600) / 60, sec % 60, usec);        return buf;}/* * Print the timestamp */voidts_print(register const struct timeval *tvp){	register int s;	struct tm *tm;	time_t Time;	static unsigned b_sec;	static unsigned b_usec;	int d_usec;	int d_sec;	switch (tflag) {	case 0: /* Default */		s = (tvp->tv_sec + thiszone) % 86400;                (void)printf("%s ", ts_format(s, tvp->tv_usec));		break;	case 1: /* No time stamp */		break;	case 2: /* Unix timeval style */		(void)printf("%u.%06u ",			     (unsigned)tvp->tv_sec,			     (unsigned)tvp->tv_usec);		break;	case 3: /* Microseconds since previous packet */        case 5: /* Microseconds since first packet */		if (b_sec == 0) {                        /* init timestamp for first packet */                        b_usec = tvp->tv_usec;                        b_sec = tvp->tv_sec;                                        }                d_usec = tvp->tv_usec - b_usec;                d_sec = tvp->tv_sec - b_sec;                                while (d_usec < 0) {                    d_usec += 1000000;                    d_sec--;                }                (void)printf("%s ", ts_format(d_sec, d_usec));                if (tflag == 3) { /* set timestamp for last packet */                    b_sec = tvp->tv_sec;                    b_usec = tvp->tv_usec;                }		break;	case 4: /* Default + Date*/		s = (tvp->tv_sec + thiszone) % 86400;		Time = (tvp->tv_sec + thiszone) - s;		tm = gmtime (&Time);		if (!tm)			printf("Date fail  ");		else			printf("%04d-%02d-%02d %s ",                               tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,                               ts_format(s, tvp->tv_usec));		break;	}}/* * Print a relative number of seconds (e.g. hold time, prune timer) * in the form 5m1s.  This does no truncation, so 32230861 seconds * is represented as 1y1w1d1h1m1s. */voidrelts_print(int secs){	static const char *lengths[] = {"y", "w", "d", "h", "m", "s"};	static const int seconds[] = {31536000, 604800, 86400, 3600, 60, 1};	const char **l = lengths;	const int *s = seconds;	if (secs == 0) {		(void)printf("0s");		return;	}	if (secs < 0) {		(void)printf("-");		secs = -secs;	}	while (secs > 0) {		if (secs >= *s) {			(void)printf("%d%s", secs / *s, *l);			secs -= (secs / *s) * *s;		}		s++;		l++;	}}/* *  this is a generic routine for printing unknown data; *  we pass on the linefeed plus indentation string to *  get a proper output - returns 0 on error */intprint_unknown_data(const u_char *cp,const char *ident,int len){	if (len < 0) {		printf("%sDissector error: print_unknown_data called with negative length",		    ident);		return(0);	}	if (snapend - cp < len)		len = snapend - cp;	if (len < 0) {		printf("%sDissector error: print_unknown_data called with pointer past end of packet",		    ident);		return(0);	}        hex_print(ident,cp,len);	return(1); /* everything is ok */}/* * Convert a token value to a string; use "fmt" if not found. */const char *tok2strbuf(register const struct tok *lp, register const char *fmt,	   register int v, char *buf, size_t bufsize){	if (lp != NULL) {		while (lp->s != NULL) {			if (lp->v == v)				return (lp->s);			++lp;		}	}	if (fmt == NULL)		fmt = "#%d";	(void)snprintf(buf, bufsize, fmt, v);	return (const char *)buf;}/* * Convert a token value to a string; use "fmt" if not found. */const char *tok2str(register const struct tok *lp, register const char *fmt,	register int v){	static char buf[4][128];	static int idx = 0;	char *ret;	ret = buf[idx];	idx = (idx+1) & 3;	return tok2strbuf(lp, fmt, v, ret, sizeof(buf[0]));}/* * Convert a bit token value to a string; use "fmt" if not found. * this is useful for parsing bitfields, the output strings are seperated * if the s field is positive. */static char *bittok2str_internal(register const struct tok *lp, register const char *fmt,	   register int v, register int sep){        static char buf[256]; /* our stringbuffer */        int buflen=0;        register int rotbit; /* this is the bit we rotate through all bitpositions */        register int tokval;	while (lp->s != NULL && lp != NULL) {            tokval=lp->v;   /* load our first value */            rotbit=1;            while (rotbit != 0) {                /*                 * lets AND the rotating bit with our token value                 * and see if we have got a match                 */		if (tokval == (v&rotbit)) {                    /* ok we have found something */                    buflen+=snprintf(buf+buflen, sizeof(buf)-buflen, "%s%s",                                     lp->s, sep ? ", " : "");                    break;                }                rotbit=rotbit<<1; /* no match - lets shift and try again */            }            lp++;	}        /* user didn't want string seperation - no need to cut off trailing seperators */        if (!sep) {            return (buf);        }        if (buflen != 0) { /* did we find anything */            /* yep, set the the trailing zero 2 bytes before to eliminate the last comma & whitespace */            buf[buflen-2] = '\0';            return (buf);        }        else {            /* bummer - lets print the "unknown" message as advised in the fmt string if we got one */            if (fmt == NULL)		fmt = "#%d";            (void)snprintf(buf, sizeof(buf), fmt, v);            return (buf);        }}/* * Convert a bit token value to a string; use "fmt" if not found. * this is useful for parsing bitfields, the output strings are not seperated. */char *bittok2str_nosep(register const struct tok *lp, register const char *fmt,	   register int v){    return (bittok2str_internal(lp, fmt, v, 0));}/* * Convert a bit token value to a string; use "fmt" if not found. * this is useful for parsing bitfields, the output strings are comma seperated. */char *bittok2str(register const struct tok *lp, register const char *fmt,	   register int v){    return (bittok2str_internal(lp, fmt, v, 1));}/* * Convert a value to a string using an array; the macro * tok2strary() in <interface.h> is the public interface to * this function and ensures that the second argument is * correct for bounds-checking. */const char *tok2strary_internal(register const char **lp, int n, register const char *fmt,	register int v){	static char buf[128];	if (v >= 0 && v < n && lp[v] != NULL)		return lp[v];	if (fmt == NULL)		fmt = "#%d";	(void)snprintf(buf, sizeof(buf), fmt, v);	return (buf);}/* * Convert a 32-bit netmask to prefixlen if possible * the function returns the prefix-len; if plen == -1 * then conversion was not possible; */intmask2plen (u_int32_t mask){	u_int32_t bitmasks[33] = {		0x00000000,		0x80000000, 0xc0000000, 0xe0000000, 0xf0000000,		0xf8000000, 0xfc000000, 0xfe000000, 0xff000000,		0xff800000, 0xffc00000, 0xffe00000, 0xfff00000,		0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000,		0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000,		0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00,		0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0,		0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff	};	int prefix_len = 32;	/* let's see if we can transform the mask into a prefixlen */	while (prefix_len >= 0) {		if (bitmasks[prefix_len] == mask)			break;		prefix_len--;	}	return (prefix_len);}/* VARARGS */voiderror(const char *fmt, ...){	va_list ap;	(void)fprintf(stderr, "%s: ", program_name);	va_start(ap, fmt);	(void)vfprintf(stderr, fmt, ap);	va_end(ap);	if (*fmt) {		fmt += strlen(fmt);		if (fmt[-1] != '\n')			(void)fputc('\n', stderr);	}	exit(1);	/* NOTREACHED */}/* VARARGS */voidwarning(const char *fmt, ...){	va_list ap;	(void)fprintf(stderr, "%s: WARNING: ", program_name);	va_start(ap, fmt);	(void)vfprintf(stderr, fmt, ap);	va_end(ap);	if (*fmt) {		fmt += strlen(fmt);		if (fmt[-1] != '\n')			(void)fputc('\n', stderr);	}}/* * Copy arg vector into a new buffer, concatenating arguments with spaces. */char *copy_argv(register char **argv){	register char **p;	register u_int len = 0;	char *buf;	char *src, *dst;	p = argv;	if (*p == 0)		return 0;	while (*p)		len += strlen(*p++) + 1;	buf = (char *)malloc(len);	if (buf == NULL)		error("copy_argv: malloc");	p = argv;	dst = buf;	while ((src = *p++) != NULL) {		while ((*dst++ = *src++) != '\0')			;		dst[-1] = ' ';	}	dst[-1] = '\0';	return buf;}/* * On Windows, we need to open the file in binary mode, so that * we get all the bytes specified by the size we get from "fstat()". * On UNIX, that's not necessary.  O_BINARY is defined on Windows; * we define it as 0 if it's not defined, so it does nothing. */#ifndef O_BINARY#define O_BINARY	0#endifchar *read_infile(char *fname){	register int i, fd, cc;	register char *cp;	struct stat buf;	fd = open(fname, O_RDONLY|O_BINARY);	if (fd < 0)		error("can't open %s: %s", fname, pcap_strerror(errno));	if (fstat(fd, &buf) < 0)		error("can't stat %s: %s", fname, pcap_strerror(errno));	cp = malloc((u_int)buf.st_size + 1);	if (cp == NULL)		error("malloc(%d) for %s: %s", (u_int)buf.st_size + 1,			fname, pcap_strerror(errno));	cc = read(fd, cp, (u_int)buf.st_size);	if (cc < 0)		error("read %s: %s", fname, pcap_strerror(errno));	if (cc != buf.st_size)		error("short read %s (%d != %d)", fname, cc, (int)buf.st_size);	close(fd);	/* replace "# comment" with spaces */	for (i = 0; i < cc; i++) {		if (cp[i] == '#')			while (i < cc && cp[i] != '\n')				cp[i++] = ' ';	}	cp[cc] = '\0';	return (cp);}voidsafeputs(const char *s, int maxlen){	int idx = 0;	while (*s && idx < maxlen) {		safeputchar(*s);                idx++;		s++;	}}voidsafeputchar(int c){	unsigned char ch;	ch = (unsigned char)(c & 0xff);	if (ch < 0x80 && isprint(ch))		printf("%c", ch);	else		printf("\\0x%02x", ch);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩人成在线播放| 欧美电视剧在线看免费| 中文在线一区二区| 成人深夜视频在线观看| 一区二区三区在线高清| 欧美日韩国产综合视频在线观看| 日韩精品一二三| 精品成人在线观看| 99精品久久只有精品| 天天免费综合色| 久久综合色婷婷| 99久久99久久精品免费观看| 亚洲国产精品久久久久婷婷884 | 蜜臀久久久久久久| 精品国产乱码久久久久久1区2区| 国产精品主播直播| 一区二区国产视频| 日韩视频免费观看高清完整版在线观看 | 国产精品亚洲成人| 伊人婷婷欧美激情| 精品福利视频一区二区三区| 99久久精品久久久久久清纯| 天堂在线亚洲视频| 国产精品美女久久久久久久网站| 欧美色国产精品| 国产精品一区二区黑丝| 亚洲综合在线电影| 国产无遮挡一区二区三区毛片日本| 色综合久久综合网97色综合| 久久国产成人午夜av影院| 成人欧美一区二区三区黑人麻豆| 91精品国产综合久久福利| 高清久久久久久| 蜜桃一区二区三区四区| 最近中文字幕一区二区三区| 欧美变态凌虐bdsm| 欧美专区在线观看一区| 国产精品99久久久久久久女警| 亚洲第一激情av| 国产精品第四页| 亚洲精品在线一区二区| 欧美日韩mp4| 9色porny自拍视频一区二区| 精品一区二区三区在线播放视频| 一区二区三区产品免费精品久久75| 久久麻豆一区二区| 日韩欧美的一区| 欧美电影一区二区| 成人h动漫精品| 国产一区二区三区高清播放| 丝袜亚洲精品中文字幕一区| 一区二区三区精品在线| 国产精品三级视频| 国产午夜亚洲精品羞羞网站| 日韩欧美高清dvd碟片| 欧美一区二区视频免费观看| 欧美三日本三级三级在线播放| 99视频有精品| 不卡影院免费观看| 成人h版在线观看| 国产精品456| 国产一区不卡在线| 久久国产精品99久久久久久老狼| 日韩激情在线观看| 青青草原综合久久大伊人精品| 亚洲成人先锋电影| 亚洲成人免费av| 亚洲第一会所有码转帖| 亚洲一区在线观看网站| 亚洲小说春色综合另类电影| 夜夜精品视频一区二区| 一区二区三区在线影院| 亚洲激情图片一区| 亚洲一区二区精品久久av| 一区二区三区**美女毛片| 亚洲一区二区三区激情| 亚洲国产视频a| 日韩电影在线一区| 久久国产视频网| 国产乱对白刺激视频不卡| 国产乱人伦精品一区二区在线观看 | 亚洲免费观看高清完整版在线 | 亚洲国产成人高清精品| 亚洲国产aⅴ天堂久久| 视频一区二区国产| 美女视频网站久久| 国产成人综合在线播放| 国产99一区视频免费| 99re热这里只有精品视频| 欧美亚洲免费在线一区| 欧美一级理论片| 久久精品视频免费| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 中文字幕综合网| 亚洲va欧美va天堂v国产综合| 奇米精品一区二区三区四区 | 91麻豆精品秘密| 欧美人牲a欧美精品| 26uuu亚洲综合色| 成人免费在线播放视频| 婷婷一区二区三区| 国内精品伊人久久久久av一坑 | 久久av老司机精品网站导航| 国产精品 欧美精品| 日本道色综合久久| 精品久久久久久久久久久院品网| 亚洲国产精品99久久久久久久久| 亚洲自拍偷拍综合| 国产精品一区专区| 欧美亚洲综合色| 久久亚洲私人国产精品va媚药| 国产精品久久久久aaaa樱花| 视频一区国产视频| av中文一区二区三区| 欧美久久一二区| 国产精品色噜噜| 日本va欧美va精品发布| bt欧美亚洲午夜电影天堂| 91精品在线麻豆| 亚洲日本韩国一区| 激情文学综合网| 欧美无砖砖区免费| 欧美国产1区2区| 久色婷婷小香蕉久久| 色欧美片视频在线观看在线视频| 日韩一区二区不卡| 亚洲一区二区黄色| av色综合久久天堂av综合| 制服丝袜av成人在线看| 亚洲天堂福利av| 国产成人自拍网| 欧美大肚乱孕交hd孕妇| 亚洲综合色区另类av| 国产1区2区3区精品美女| 91精品欧美久久久久久动漫| 亚洲视频综合在线| 国产91精品露脸国语对白| 精品女同一区二区| 午夜视频在线观看一区二区三区| www..com久久爱| 亚洲精品一区二区三区蜜桃下载| 亚洲一区av在线| 成人黄色片在线观看| 国产视频一区在线观看| 久久91精品国产91久久小草| 欧美日韩国产高清一区二区三区| 国产精品夫妻自拍| 国产成人av资源| 国产婷婷色一区二区三区四区| 蜜臀av性久久久久蜜臀aⅴ| 欧美喷潮久久久xxxxx| 亚洲精品少妇30p| 91美女视频网站| 中文字幕亚洲一区二区av在线 | 紧缚捆绑精品一区二区| 69成人精品免费视频| 午夜视频在线观看一区二区| 日本二三区不卡| 亚洲国产成人高清精品| 欧美在线免费视屏| 亚洲永久精品国产| 欧美少妇性性性| 日韩影院精彩在线| 欧美一区二区大片| 蜜臀av亚洲一区中文字幕| 日韩欧美一区中文| 久久99精品国产91久久来源| 欧美xxxx老人做受| 国产在线播精品第三| 久久久久久久久久久久久女国产乱| 国内精品在线播放| 国产精品少妇自拍| 91婷婷韩国欧美一区二区| 亚洲精品少妇30p| 欧美人狂配大交3d怪物一区| 日韩国产高清影视| 久久免费偷拍视频| 不卡在线视频中文字幕| 亚洲综合999| 欧美一区二区久久| 国产精品18久久久久久久久久久久| 国产女主播一区| 在线看日本不卡| 免费高清在线一区| 久久久久99精品国产片| 99re8在线精品视频免费播放| 一区二区三区中文免费| 欧美一区二区视频在线观看2020| 国产在线视频一区二区三区| 中文字幕人成不卡一区| 欧美日本免费一区二区三区| 美女视频第一区二区三区免费观看网站| 欧美精品一区二区三区蜜桃| 成人黄色电影在线| 亚洲午夜国产一区99re久久| 欧美刺激午夜性久久久久久久| 粉嫩欧美一区二区三区高清影视| 一区二区三区在线视频免费 | 99这里只有精品| 亚洲成a人片在线不卡一二三区|