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

📄 aton.c

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 C
字号:
/* * aton.c * * Copyright (c) 2001 Dug Song <dugsong@monkey.org> * * $Id: aton.c,v 1.3 2002/10/14 15:42:10 dugsong Exp $ */#include "config.h"#include <sys/types.h>#include <ctype.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "dnet.h"#include "aton.h"inttype_aton(char *string, uint16_t *type){	u_int i;	if (strcmp(string, "ip") == 0)		*type = htons(ETH_TYPE_IP);	else if (strcmp(string, "arp") == 0)		*type = htons(ETH_TYPE_ARP);	else {		if (sscanf(string, "%i", &i) != 1 || i > 0xffff)			return (-1);		*type = htons(i & 0xffff);	}	return (0);}intop_aton(char *string, uint16_t *op){	u_int i;	if (strncasecmp(string, "req", 3) == 0)		*op = htons(ARP_OP_REQUEST);	else if (strncasecmp(string, "rep", 3) == 0)		*op = htons(ARP_OP_REPLY);	else if (strncasecmp(string, "revreq", 6) == 0)		*op = htons(ARP_OP_REVREQUEST);	else if (strncasecmp(string, "revrep", 6) == 0)		*op = htons(ARP_OP_REVREPLY);	else {		if (sscanf(string, "%i", &i) != 1 || i > 0xffff)			return (-1);		*op = htons(i & 0xffff);	}	return (0);}intproto_aton(char *string, uint8_t *proto){	struct protoent *pp;	u_int i;		if ((pp = getprotobyname(string)) != NULL)		*proto = pp->p_proto;	else {		if (sscanf(string, "%i", &i) != 1 || i > 0xff)			return (-1);		*proto = i & 0xff;	}	return (0);}intoff_aton(char *string, uint16_t *off){	int i;	char *p;	if (strncmp(string, "0x", 2) == 0) {		if (sscanf(string, "%i", &i) != 1 || i > IP_OFFMASK)			return (-1);		*off = htons(i);	} else {		i = strtol(string, &p, 10);		if (*string == '\0' || (*p != '\0' && *p != '+') ||		    i > IP_OFFMASK)			return (-1);		*off = htons(((*p == '+') ? IP_MF : 0) | (i >> 3));	}	return (0);}intport_aton(char *string, uint16_t *port){	struct servent *sp;	u_int i;		/* XXX */	if ((sp = getservbyname(string, "tcp")) != NULL) {		*port = sp->s_port;	} else if ((sp = getservbyname(string, "udp")) != NULL) {		*port = sp->s_port;	} else {		if (sscanf(string, "%i", &i) != 1 || i > 0xffff)			return (-1);		*port = htons(i & 0xffff);	}	return (0);}intseq_aton(char *string, uint32_t *seq){	char *p;		*seq = strtoul(string, &p, 10);	if (*string == '\0' || *p != '\0')		return (-1);	*seq = htonl(*seq);	return (0);}intflags_aton(char *string, uint8_t *flags){	char *p;	u_int i;	*flags = 0;		if (strncmp(string, "0x", 2) == 0) {		if (sscanf(string, "%i", &i) != 1 || i > 0xff)			return (-1);		*flags = i & 0xff;				return (0);	}	for (p = string; *p != '\0'; p++) {		switch (*p) {		case 'S':			*flags |= TH_SYN;			break;		case 'A':			*flags |= TH_ACK;			break;		case 'F':			*flags |= TH_FIN;			break;		case 'R':			*flags |= TH_RST;			break;		case 'P':			*flags |= TH_PUSH;			break;		case 'U':			*flags |= TH_URG;			break;		default:			return (-1);		}	}	return (0);}static u_charhex2num(char ch, char cl){	ch = tolower(ch), cl = tolower(cl);		if (ch >= '0' && ch <= '9')		ch -= '0';	else if (ch >= 'a' && ch <= 'f')		ch -= 'a' - 10;	else		return (0);		if (cl >= '0' && cl <= '9')		cl -= '0';	else if (cl >= 'a' && cl <= 'f')		cl -= 'a' - 10;	else		return (0);		return ((u_char)((ch << 4) | cl));}intfmt_aton(char *string, u_char *buf){	u_char *u;	char *p;	for (u = buf, p = string; *p != '\0'; p++) {		if (*p != '\\') {			*u++ = *p;			continue;		}		if (*++p == '\0')			break;		if (*p == '\\')		*u++ = '\\';		else if (*p == '\'')	*u++ = '\'';		else if (*p == '"')	*u++ = '"';		else if (*p == 'a')	*u++ = '\a';		else if (*p == 'b')	*u++ = '\b';		else if (*p == 'e')	*u++ = 033;		else if (*p == 'f')	*u++ = '\f';		else if (*p == 'n')	*u++ = '\n';		else if (*p == 'r')	*u++ = '\r';		else if (*p == 't')	*u++ = '\t';		else if (*p == 'v')	*u++ = '\v';		else if (*p == 'x' && p[1] != '\0' && p[2] != '\0') {			*u++ = hex2num(p[1], p[2]);			p += 2;		} else			return (-1);	}	return (u - buf);}

⌨️ 快捷键说明

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