📄 vendor.c
字号:
/* Openswan ISAKMP VendorID Handling * Copyright (C) 2002-2003 Mathieu Lafon - Arkoon Network Security * Copyright (C) 2004 Xelerance Corporation * * 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: vendor.c,v 1.43.2.1 2005/07/26 02:05:10 ken Exp $ */#include <stdlib.h>#include <string.h>#include <ctype.h>#include <sys/queue.h>#include <openswan.h>#include "constants.h"#include "defs.h"#include "log.h"#include "md5.h"#include "id.h"#include "x509.h"#include "pgp.h"#include "certs.h"#include "smartcard.h"#ifdef XAUTH_USEPAM#include <security/pam_appl.h>#endif#include "connections.h"#include "packet.h"#include "demux.h"#include "server.h"#include "whack.h"#include "vendor.h"#include "quirks.h"#include "kernel.h"#include "state.h"#ifdef NAT_TRAVERSAL#include "nat_traversal.h"#endif/** * Listing of interesting but details unknown Vendor IDs: * * SafeNet SoftRemote 8.0.0: * 47bbe7c993f1fc13b4e6d0db565c68e5010201010201010310382e302e3020284275696c6420313029000000 * >> 382e302e3020284275696c6420313029 = '8.0.0 (Build 10)' * da8e937880010000 * * SafeNet SoftRemote 9.0.1 * 47bbe7c993f1fc13b4e6d0db565c68e5010201010201010310392e302e3120284275696c6420313229000000 * >> 392e302e3120284275696c6420313229 = '9.0.1 (Build 12)' * da8e937880010000 * * Netscreen: * d6b45f82f24bacb288af59a978830ab7 * cf49908791073fb46439790fdeb6aeed981101ab0000000500000300 * * Cisco: * 1f07f70eaa6514d3b0fa96542a500300 (VPN 3000 version 3.0.0) * 1f07f70eaa6514d3b0fa96542a500301 (VPN 3000 version 3.0.1) * 1f07f70eaa6514d3b0fa96542a500305 (VPN 3000 version 3.0.5) * 1f07f70eaa6514d3b0fa96542a500407 (VPN 3000 version 4.0.7) * (Can you see the pattern?) * afcad71368a1f1c96b8696fc77570100 (Non-RFC Dead Peer Detection ?) * c32364b3b4f447eb17c488ab2a480a57 * 6d761ddc26aceca1b0ed11fabbb860c4 * 5946c258f99a1a57b03eb9d1759e0f24 (From a Cisco VPN 3k) * ebbc5b00141d0c895e11bd395902d690 (From a Cisco VPN 3k) * 3e984048101e66cc659fd002b0ed3655 (From a Cisco 1800 IOS device) * * Microsoft L2TP (???): * (This could be the MSL2TP client, which is a stripped version of SafeNet) * * 47bbe7c993f1fc13b4e6d0db565c68e5010201010201010310382e312e3020284275696c6420313029000000 * >> 382e312e3020284275696c6420313029 = '8.1.0 (Build 10)' * 3025dbd21062b9e53dc441c6aab5293600000000 * da8e937880010000 * * 3COM-superstack * da8e937880010000 * 404bf439522ca3f6 * * NCP.de * 101fb0b35c5a4f4c08b919f1cb9777b0 * * Watchguard FireBox (II ?) * da8e937880010000 * * Nortel contivity 251 (RAS F/W Version: VA251_2.0.0.0.013 | 12/3/2003 * DSL FW Version: Alcatel, Version 3.9.122) * 4485152d18b6bbcd0be8a8469579ddcc * 625027749d5ab97f5616c1602765cf480a3b7d0b) * * Zyxel Zywall 2 / Zywall 30w * 625027749d5ab97f5616c1602765cf480a3b7d0b */#define MAX_LOG_VID_LEN 32#define VID_KEEP 0x0000 #define VID_MD5HASH 0x0001#define VID_STRING 0x0002#define VID_FSWAN_HASH 0x0004#define VID_SELF 0x0008#define VID_SUBSTRING_DUMPHEXA 0x0100#define VID_SUBSTRING_DUMPASCII 0x0200#define VID_SUBSTRING_MATCH 0x0400#define VID_SUBSTRING (VID_SUBSTRING_DUMPHEXA | VID_SUBSTRING_DUMPASCII | VID_SUBSTRING_MATCH)struct vid_struct { enum known_vendorid id; unsigned short flags; const char *data; const char *descr; const char *vid; unsigned int vid_len;};#define DEC_MD5_VID_D(id,str,descr) \ { VID_##id, VID_MD5HASH, str, descr, NULL, 0 },#define DEC_MD5_VID(id,str) \ { VID_##id, VID_MD5HASH, str, NULL, NULL, 0 },#define DEC_FSWAN_VID(id,str,descr) \ { VID_##id, VID_FSWAN_HASH, str, descr, NULL, 0 },static struct vid_struct _vid_tab[] = { /* Implementation names */ { VID_OPENPGP, VID_STRING, "OpenPGP10171", "OpenPGP", NULL, 0 }, DEC_MD5_VID(KAME_RACOON, "KAME/racoon") { VID_MS_NT5, VID_MD5HASH | VID_SUBSTRING_DUMPHEXA, "MS NT5 ISAKMPOAKLEY", NULL, NULL, 0 }, DEC_MD5_VID(SSH_SENTINEL, "SSH Sentinel") DEC_MD5_VID(SSH_SENTINEL_1_1, "SSH Sentinel 1.1") DEC_MD5_VID(SSH_SENTINEL_1_2, "SSH Sentinel 1.2") DEC_MD5_VID(SSH_SENTINEL_1_3, "SSH Sentinel 1.3") DEC_MD5_VID(SSH_SENTINEL_1_4, "SSH Sentinel 1.4") DEC_MD5_VID(SSH_SENTINEL_1_4_1, "SSH Sentinel 1.4.1") /* These ones come from SSH vendors.txt */ DEC_MD5_VID(SSH_IPSEC_1_1_0, "Ssh Communications Security IPSEC Express version 1.1.0") DEC_MD5_VID(SSH_IPSEC_1_1_1, "Ssh Communications Security IPSEC Express version 1.1.1") DEC_MD5_VID(SSH_IPSEC_1_1_2, "Ssh Communications Security IPSEC Express version 1.1.2") DEC_MD5_VID(SSH_IPSEC_1_2_1, "Ssh Communications Security IPSEC Express version 1.2.1") DEC_MD5_VID(SSH_IPSEC_1_2_2, "Ssh Communications Security IPSEC Express version 1.2.2") DEC_MD5_VID(SSH_IPSEC_2_0_0, "SSH Communications Security IPSEC Express version 2.0.0") DEC_MD5_VID(SSH_IPSEC_2_1_0, "SSH Communications Security IPSEC Express version 2.1.0") DEC_MD5_VID(SSH_IPSEC_2_1_1, "SSH Communications Security IPSEC Express version 2.1.1") DEC_MD5_VID(SSH_IPSEC_2_1_2, "SSH Communications Security IPSEC Express version 2.1.2") DEC_MD5_VID(SSH_IPSEC_3_0_0, "SSH Communications Security IPSEC Express version 3.0.0") DEC_MD5_VID(SSH_IPSEC_3_0_1, "SSH Communications Security IPSEC Express version 3.0.1") DEC_MD5_VID(SSH_IPSEC_4_0_0, "SSH Communications Security IPSEC Express version 4.0.0") DEC_MD5_VID(SSH_IPSEC_4_0_1, "SSH Communications Security IPSEC Express version 4.0.1") DEC_MD5_VID(SSH_IPSEC_4_1_0, "SSH Communications Security IPSEC Express version 4.1.0") DEC_MD5_VID(SSH_IPSEC_4_2_0, "SSH Communications Security IPSEC Express version 4.2.0") /* note: md5('CISCO-UNITY') = 12f5f28c457168a9702d9fe274cc02d4 */ { VID_CISCO_UNITY, VID_KEEP, NULL, "Cisco-Unity", "\x12\xf5\xf2\x8c\x45\x71\x68\xa9\x70\x2d\x9f\xe2\x74\xcc\x01\x00", 16 }, { VID_CISCO3K, VID_KEEP | VID_SUBSTRING_MATCH, NULL, "Cisco VPN 3000 Series" , "\x1f\x07\xf7\x0e\xaa\x65\x14\xd3\xb0\xfa\x96\x54\x2a\x50", 14}, { VID_CISCO3K, VID_KEEP | VID_SUBSTRING_MATCH, NULL, "Cisco VPN 3000 Series" , "\x1f\x07\xf7\x0e\xaa\x65\x14\xd3\xb0\xfa\x96\x54\x2a\x50", 14}, { VID_CISCO_IOS, VID_KEEP | VID_SUBSTRING_MATCH, NULL, "Cisco IOS Device", "\x3e\x98\x40\x48", 4}, /** * Timestep VID seen: * - 54494d455354455020312053475720313532302033313520322e303145303133 * = 'TIMESTEP 1 SGW 1520 315 2.01E013' */ { VID_TIMESTEP, VID_STRING | VID_SUBSTRING_DUMPASCII, "TIMESTEP", NULL, NULL, 0 }, DEC_FSWAN_VID(FSWAN_2_00_VID, "Linux FreeS/WAN 2.00 PLUTO_SENDS_VENDORID", "FreeS/WAN 2.00") DEC_FSWAN_VID(FSWAN_2_00_X509_1_3_1_VID, "Linux FreeS/WAN 2.00 X.509-1.3.1 PLUTO_SENDS_VENDORID", "FreeS/WAN 2.00 (X.509-1.3.1)") DEC_FSWAN_VID(FSWAN_2_00_X509_1_3_1_LDAP_VID, "Linux FreeS/WAN 2.00 X.509-1.3.1 LDAP PLUTO_SENDS_VENDORID", "FreeS/WAN 2.00 (X.509-1.3.1 + LDAP)") DEC_FSWAN_VID(OPENSWAN2, "Openswan 2.2.0", "Openswan 2.2.0") /* always make sure to include ourself! */ { VID_OPENSWANSELF,VID_SELF, "","Openswan (this version)", NULL,0}, /* NAT-Traversal */ DEC_MD5_VID(NATT_STENBERG_01, "draft-stenberg-ipsec-nat-traversal-01") DEC_MD5_VID(NATT_STENBERG_02, "draft-stenberg-ipsec-nat-traversal-02") DEC_MD5_VID(NATT_HUTTUNEN, "ESPThruNAT") DEC_MD5_VID(NATT_HUTTUNEN_ESPINUDP, "draft-huttunen-ipsec-esp-in-udp-00.txt") DEC_MD5_VID(NATT_IETF_00, "draft-ietf-ipsec-nat-t-ike-00") DEC_MD5_VID(NATT_IETF_02, "draft-ietf-ipsec-nat-t-ike-02") /* hash in draft-ietf-ipsec-nat-t-ike-02 contains '\n'... Accept both */ DEC_MD5_VID_D(NATT_IETF_02_N, "draft-ietf-ipsec-nat-t-ike-02\n", "draft-ietf-ipsec-nat-t-ike-02_n") DEC_MD5_VID(NATT_IETF_03, "draft-ietf-ipsec-nat-t-ike-03") DEC_MD5_VID(NATT_RFC, "RFC 3947") DEC_MD5_VID(NATT_DRAFT_IETF_IPSEC_NAT_T_IKE,"draft-ietf-ipsec-nat-t-ike") /* misc */ { VID_MISC_XAUTH, VID_KEEP, NULL, "XAUTH", "\x09\x00\x26\x89\xdf\xd6\xb7\x12", 8 }, { VID_MISC_DPD, VID_KEEP, NULL, "Dead Peer Detection", "\xaf\xca\xd7\x13\x68\xa1\xf1\xc9\x6b\x86\x96\xfc\x77\x57\x01\x00", 16 }, /** * Netscreen: * 4865617274426561745f4e6f74696679386b0100 (HeartBeat_Notify + 386b0100) */ { VID_MISC_HEARTBEAT_NOTIFY, VID_STRING | VID_SUBSTRING_DUMPHEXA, "HeartBeat_Notify", "HeartBeat Notify", NULL, 0 }, /** * MacOS X */ { VID_MACOSX, VID_STRING|VID_SUBSTRING_DUMPHEXA, "Mac OSX 10.x", "\x4d\xf3\x79\x28\xe9\xfc\x4f\xd1\xb3\x26\x21\x70\xd5\x15\xc6\x62", NULL, 0}, DEC_MD5_VID(MISC_FRAGMENTATION, "FRAGMENTATION") DEC_MD5_VID(INITIAL_CONTACT, "Vid-Initial-Contact") /* * NCP.de */ { VID_NCP, VID_KEEP, "NCP client", NULL, "\x10\x1f\xb0\xb3\x5c\x5a\x4f\x4c\x08\xb9\x19\xf1\xcb\x97\x77\xb0", 16 }, /* -- */ { 0, 0, NULL, NULL, NULL, 0 }};static const char _hexdig[] = "0123456789abcdef";static int _vid_struct_init = 0;/** * Setup VendorID structs, and populate them * */void init_vendorid(void){ struct vid_struct *vid; MD5_CTX ctx; int i; for (vid = _vid_tab; vid->id; vid++) { if(vid->flags & VID_SELF) { char *d; vid->vid = strdup(init_pluto_vendorid()); vid->vid_len = strlen(vid->vid); d = alloc_bytes(strlen(vid->descr)+4 +strlen(ipsec_version_code()) +strlen(compile_time_interop_options) , "self-vendor ID"); sprintf(d, "%s %s %s" , vid->descr, ipsec_version_code() , compile_time_interop_options); vid->descr = (const char *)d; } else if (vid->flags & VID_STRING) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -