⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcap.c

📁 使用不同于winsock抓包方法
💻 C
📖 第 1 页 / 共 2 页
字号:
	(u_char)'\254', (u_char)'\255', (u_char)'\256', (u_char)'\257',	(u_char)'\260', (u_char)'\261', (u_char)'\262', (u_char)'\263',	(u_char)'\264', (u_char)'\265', (u_char)'\266', (u_char)'\267',	(u_char)'\270', (u_char)'\271', (u_char)'\272', (u_char)'\273',	(u_char)'\274', (u_char)'\275', (u_char)'\276', (u_char)'\277',	(u_char)'\300', (u_char)'\341', (u_char)'\342', (u_char)'\343',	(u_char)'\344', (u_char)'\345', (u_char)'\346', (u_char)'\347',	(u_char)'\350', (u_char)'\351', (u_char)'\352', (u_char)'\353',	(u_char)'\354', (u_char)'\355', (u_char)'\356', (u_char)'\357',	(u_char)'\360', (u_char)'\361', (u_char)'\362', (u_char)'\363',	(u_char)'\364', (u_char)'\365', (u_char)'\366', (u_char)'\367',	(u_char)'\370', (u_char)'\371', (u_char)'\372', (u_char)'\333',	(u_char)'\334', (u_char)'\335', (u_char)'\336', (u_char)'\337',	(u_char)'\340', (u_char)'\341', (u_char)'\342', (u_char)'\343',	(u_char)'\344', (u_char)'\345', (u_char)'\346', (u_char)'\347',	(u_char)'\350', (u_char)'\351', (u_char)'\352', (u_char)'\353',	(u_char)'\354', (u_char)'\355', (u_char)'\356', (u_char)'\357',	(u_char)'\360', (u_char)'\361', (u_char)'\362', (u_char)'\363',	(u_char)'\364', (u_char)'\365', (u_char)'\366', (u_char)'\367',	(u_char)'\370', (u_char)'\371', (u_char)'\372', (u_char)'\373',	(u_char)'\374', (u_char)'\375', (u_char)'\376', (u_char)'\377',};intpcap_strcasecmp(const char *s1, const char *s2){	register const u_char	*cm = charmap,				*us1 = (u_char *)s1,				*us2 = (u_char *)s2;	while (cm[*us1] == cm[*us2++])		if (*us1++ == '\0')			return(0);	return (cm[*us1] - cm[*--us2]);}intpcap_datalink_name_to_val(const char *name){	int i;	for (i = 0; dlt_choices[i].name != NULL; i++) {		if (pcap_strcasecmp(dlt_choices[i].name + sizeof("DLT_") - 1,		    name) == 0)			return (dlt_choices[i].dlt);	}	return (-1);}const char *pcap_datalink_val_to_name(int dlt){	int i;	for (i = 0; dlt_choices[i].name != NULL; i++) {		if (dlt_choices[i].dlt == dlt)			return (dlt_choices[i].name + sizeof("DLT_") - 1);	}	return (NULL);}const char *pcap_datalink_val_to_description(int dlt){	int i;	for (i = 0; dlt_choices[i].name != NULL; i++) {		if (dlt_choices[i].dlt == dlt)			return (dlt_choices[i].description);	}	return (NULL);}intpcap_snapshot(pcap_t *p){	return (p->snapshot);}intpcap_is_swapped(pcap_t *p){	return (p->sf.swapped);}intpcap_major_version(pcap_t *p){	return (p->sf.version_major);}intpcap_minor_version(pcap_t *p){	return (p->sf.version_minor);}FILE *pcap_file(pcap_t *p){	return (p->sf.rfile);}intpcap_fileno(pcap_t *p){#ifndef WIN32	return (p->fd);#else	if (p->adapter != NULL)		return ((int)(DWORD)p->adapter->hFile);	else		return (-1);#endif}#ifndef WIN32intpcap_get_selectable_fd(pcap_t *p){	return (p->selectable_fd);}#endifvoidpcap_perror(pcap_t *p, char *prefix){	fprintf(stderr, "%s: %s\n", prefix, p->errbuf);}char *pcap_geterr(pcap_t *p){	return (p->errbuf);}intpcap_getnonblock(pcap_t *p, char *errbuf){	return p->getnonblock_op(p, errbuf);}/* * Get the current non-blocking mode setting, under the assumption that * it's just the standard POSIX non-blocking flag. * * We don't look at "p->nonblock", in case somebody tweaked the FD * directly. */#ifndef WIN32intpcap_getnonblock_fd(pcap_t *p, char *errbuf){	int fdflags;	fdflags = fcntl(p->fd, F_GETFL, 0);	if (fdflags == -1) {		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "F_GETFL: %s",		    pcap_strerror(errno));		return (-1);	}	if (fdflags & O_NONBLOCK)		return (1);	else		return (0);}#endifintpcap_setnonblock(pcap_t *p, int nonblock, char *errbuf){	return p->setnonblock_op(p, nonblock, errbuf);}#ifndef WIN32/* * Set non-blocking mode, under the assumption that it's just the * standard POSIX non-blocking flag.  (This can be called by the * per-platform non-blocking-mode routine if that routine also * needs to do some additional work.) */intpcap_setnonblock_fd(pcap_t *p, int nonblock, char *errbuf){	int fdflags;	fdflags = fcntl(p->fd, F_GETFL, 0);	if (fdflags == -1) {		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "F_GETFL: %s",		    pcap_strerror(errno));		return (-1);	}	if (nonblock)		fdflags |= O_NONBLOCK;	else		fdflags &= ~O_NONBLOCK;	if (fcntl(p->fd, F_SETFL, fdflags) == -1) {		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "F_SETFL: %s",		    pcap_strerror(errno));		return (-1);	}	return (0);}#endif#ifdef WIN32/* * Generate a string for the last Win32-specific error (i.e. an error generated when  * calling a Win32 API). * For errors occurred during standard C calls, we still use pcap_strerror() */char *pcap_win32strerror(void){	DWORD error;	static char errbuf[PCAP_ERRBUF_SIZE+1];	int errlen;	error = GetLastError();	FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf,	    PCAP_ERRBUF_SIZE, NULL);	/*	 * "FormatMessage()" "helpfully" sticks CR/LF at the end of the	 * message.  Get rid of it.	 */	errlen = strlen(errbuf);	if (errlen >= 2) {		errbuf[errlen - 1] = '\0';		errbuf[errlen - 2] = '\0';	}	return (errbuf);}#endif/* * Not all systems have strerror(). */char *pcap_strerror(int errnum){#ifdef HAVE_STRERROR	return (strerror(errnum));#else	extern int sys_nerr;	extern const char *const sys_errlist[];	static char ebuf[20];	if ((unsigned int)errnum < sys_nerr)		return ((char *)sys_errlist[errnum]);	(void)snprintf(ebuf, sizeof ebuf, "Unknown error: %d", errnum);	return(ebuf);#endif}intpcap_setfilter(pcap_t *p, struct bpf_program *fp){	return p->setfilter_op(p, fp);}intpcap_stats(pcap_t *p, struct pcap_stat *ps){	return p->stats_op(p, ps);}static intpcap_stats_dead(pcap_t *p, struct pcap_stat *ps){	snprintf(p->errbuf, PCAP_ERRBUF_SIZE,	    "Statistics aren't available from a pcap_open_dead pcap_t");	return (-1);}static voidpcap_close_dead(pcap_t *p){	/* Nothing to do. */}pcap_t *pcap_open_dead(int linktype, int snaplen){	pcap_t *p;	p = malloc(sizeof(*p));	if (p == NULL)		return NULL;	memset (p, 0, sizeof(*p));	p->snapshot = snaplen;	p->linktype = linktype;	p->stats_op = pcap_stats_dead;	p->close_op = pcap_close_dead;	return p;}voidpcap_close(pcap_t *p){	p->close_op(p);	if (p->dlt_list != NULL)		free(p->dlt_list);	pcap_freecode(&p->fcode);	free(p);}/* * We make the version string static, and return a pointer to it, rather * than exporting the version string directly.  On at least some UNIXes, * if you import data from a shared library into an program, the data is * bound into the program binary, so if the string in the version of the * library with which the program was linked isn't the same as the * string in the version of the library with which the program is being * run, various undesirable things may happen (warnings, the string * being the one from the version of the library with which the program * was linked, or even weirder things, such as the string being the one * from the library but being truncated). */#ifdef WIN32/* * XXX - it'd be nice if we could somehow generate the WinPcap and libpcap * version numbers when building WinPcap.  (It'd be nice to do so for * the packet.dll version number as well.) */static const char wpcap_version_string[] = "3.0";static const char pcap_version_string_fmt[] =    "WinPcap version %s, based on libpcap version 0.8";static const char pcap_version_string_packet_dll_fmt[] =    "WinPcap version %s (packet.dll version %s), based on libpcap version 0.8";static char *pcap_version_string;const char *pcap_lib_version(void){	char *packet_version_string;	size_t pcap_version_string_len;	if (pcap_version_string == NULL) {		/*		 * Generate the version string.		 */		packet_version_string = PacketGetVersion();		if (strcmp(wpcap_version_string, packet_version_string) == 0) {			/*			 * WinPcap version string and packet.dll version			 * string are the same; just report the WinPcap			 * version.			 */			pcap_version_string_len =			    (sizeof pcap_version_string_fmt - 2) +			    strlen(wpcap_version_string);			pcap_version_string = malloc(pcap_version_string_len);			sprintf(pcap_version_string, pcap_version_string_fmt,			    wpcap_version_string);		} else {			/*			 * WinPcap version string and packet.dll version			 * string are different; that shouldn't be the			 * case (the two libraries should come from the			 * same version of WinPcap), so we report both			 * versions.			 */			pcap_version_string_len =			    (sizeof pcap_version_string_packet_dll_fmt - 4) +			    strlen(wpcap_version_string) +			    strlen(packet_version_string);			pcap_version_string = malloc(pcap_version_string_len);			sprintf(pcap_version_string,			    pcap_version_string_packet_dll_fmt,			    wpcap_version_string, packet_version_string);		}	}	return (pcap_version_string);}#else#include "version.h"const char *pcap_lib_version(void){	return (pcap_version_string);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -