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

📄 pfkey_print.c

📁 This a good VPN source
💻 C
字号:
/* * RFC2367 PF_KEYv2 Key management API message parser * Copyright (C) 2003 Michael Richardson <mcr@freeswan.org> *  * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * for more details. * * RCSID $Id: pfkey_print.c,v 1.2 2004/04/26 05:03:40 ken Exp $ */char pfkey_v2_print_c_version[] = "$Id: pfkey_print.c,v 1.2 2004/04/26 05:03:40 ken Exp $";#include <sys/types.h>#include <openswan.h>#include <pfkeyv2.h>#include <pfkey.h>voidpfkey_print(struct sadb_msg *msg, FILE *out){    int len;    struct sadb_ext *se;        fprintf(out, "version=%d type=%d errno=%d satype=%d len=%d seq=%d pid=%d ",	    msg->sadb_msg_version,	    msg->sadb_msg_type,	    msg->sadb_msg_errno,	    msg->sadb_msg_satype,	    msg->sadb_msg_len,	    msg->sadb_msg_seq,	    msg->sadb_msg_pid);        len = IPSEC_PFKEYv2_LEN(msg->sadb_msg_len);    len -= sizeof(struct sadb_msg);        se = (struct sadb_ext *)(&msg[1]);    while(len > sizeof(struct sadb_ext)) {	fprintf(out, "{ext=%d len=%d ", se->sadb_ext_type, se->sadb_ext_len);		/* make sure that there is enough left */	if(IPSEC_PFKEYv2_LEN(se->sadb_ext_len) > len) {	    fprintf(out, "short-packet(%d<%d) ", len,		    (int)IPSEC_PFKEYv2_LEN(se->sadb_ext_len));	    	    /* force it to match */	    se->sadb_ext_len = IPSEC_PFKEYv2_WORDS(len);	    goto dumpbytes;	}		/* okay, decode what we know */	switch(se->sadb_ext_type) {	case SADB_EXT_SA:	  {	    struct sadb_sa *sa = (struct sadb_sa *)se;	    fprintf(out, "spi=%08x replay=%d state=%d auth=%d encrypt=%d flags=%08x ref=%08x}",		    sa->sadb_sa_spi,		    sa->sadb_sa_replay,		    sa->sadb_sa_state,		    sa->sadb_sa_auth,		    sa->sadb_sa_encrypt,		    sa->sadb_sa_flags,		    sa->sadb_x_sa_ref);	  }	  break;	  	case SADB_X_EXT_ADDRESS_SRC_FLOW: 	case SADB_X_EXT_ADDRESS_DST_FLOW: 	case SADB_X_EXT_ADDRESS_SRC_MASK: 	case SADB_X_EXT_ADDRESS_DST_MASK:	case SADB_EXT_ADDRESS_DST:        	case SADB_EXT_ADDRESS_SRC:        	  {	    struct sadb_address *addr = (struct sadb_address *)se;	    int    alen = IPSEC_PFKEYv2_LEN(addr->sadb_address_len)-sizeof(struct sadb_address);	    unsigned char *bytes = (unsigned char *)&addr[1];	    fprintf(out, "proto=%d prefixlen=%d addr=0x",		    addr->sadb_address_proto,		    addr->sadb_address_prefixlen);	    while(alen > 0)	      {		fprintf(out, "%02x", *bytes);		bytes++;		alen--;	      }	    fprintf(out, " } ");	  }	  break;	  	case SADB_X_EXT_PROTOCOL:	  {	    struct sadb_protocol *sp = (struct sadb_protocol *)se;	    fprintf(out, "proto=%d direction=%d flags=%d } ",		    sp->sadb_protocol_proto,		    sp->sadb_protocol_direction,		    sp->sadb_protocol_flags);	  }	  break;	case SADB_EXT_LIFETIME_CURRENT:   	case SADB_EXT_LIFETIME_HARD:      	case SADB_EXT_LIFETIME_SOFT:      	  {	    struct sadb_lifetime *life = (struct sadb_lifetime *)se;	    fprintf(out, "allocations=%d bytes=%qd addtime=%qd usetime=%qd packets=%d",		    life->sadb_lifetime_allocations,		    (long long)life->sadb_lifetime_bytes,		    (long long)life->sadb_lifetime_addtime,		    (long long)life->sadb_lifetime_usetime,		    life->sadb_x_lifetime_packets);	    fprintf(out, " } ");	  }	  break;	  	  	case SADB_EXT_RESERVED:	case SADB_EXT_ADDRESS_PROXY:      	case SADB_EXT_KEY_AUTH:           	case SADB_EXT_KEY_ENCRYPT:        	case SADB_EXT_IDENTITY_SRC:       	case SADB_EXT_IDENTITY_DST:       	case SADB_EXT_SENSITIVITY:        	case SADB_EXT_PROPOSAL:           	case SADB_EXT_SUPPORTED_AUTH:     	case SADB_EXT_SUPPORTED_ENCRYPT:  	case SADB_EXT_SPIRANGE:           	case SADB_X_EXT_KMPRIVATE:	case SADB_X_EXT_SATYPE2:	case SADB_X_EXT_SA2:	case SADB_X_EXT_ADDRESS_DST2:     	case SADB_X_EXT_DEBUG:	default:	  {	    unsigned int elen;	    unsigned char *bytes;	    	  dumpbytes:	    	    elen = IPSEC_PFKEYv2_LEN(se->sadb_ext_len)-sizeof(struct sadb_ext);	    bytes = (unsigned char *)&se[1];	    	    fprintf(out, "bytes=0x");	    while(elen > 0)	      {		fprintf(out, "%02x", *bytes);		bytes++;		elen--;	      }	    fprintf(out, " } ");	  }	  break;	}	/* skip to next extension header */	{	  unsigned int elen = IPSEC_PFKEYv2_LEN(se->sadb_ext_len);	  if(elen < sizeof(struct sadb_ext)) {	    fprintf(out, "illegal-length(%d) ",elen);	    elen = sizeof(struct sadb_ext);	  }	  se = (struct sadb_ext *)(((unsigned char *)se)+elen);	  len -= elen;	}    }    fprintf(out, "\n");}    

⌨️ 快捷键说明

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