?? sysdep.c
字號:
/* sysdep.c * UUID system dependent routines * * $Id: sysdep.c 21694 2007-05-06 08:15:17Z gal $ * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> * Copyright 1998 Gerald Combs * * 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. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//*** Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.** Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. &** Digital Equipment Corporation, Maynard, Mass.** Copyright (c) 1998 Microsoft.** To anyone who acknowledges that this file is provided "AS IS"** without any express or implied warranty: permission to use, copy,** modify, and distribute this file for any purpose is hereby** granted without fee, provided that the above copyright notices and** this notice appears in all source code copies, and that none of** the names of Open Software Foundation, Inc., Hewlett-Packard** Company, Microsoft, or Digital Equipment Corporation be used in** advertising or publicity pertaining to distribution of the software** without specific, written prior permission. Neither Open Software** Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital** Equipment Corporation makes any representations about the** suitability of this software for any purpose.*/#include <stdio.h>#include "sysdep.h"/* system dependent call to get IEEE node ID. This sample implementation generates a random node ID. */void get_ieee_node_identifier(uuid_node_t *node){ static inited = 0; static uuid_node_t saved_node; char seed[16]; FILE *fp; if (!inited) { fp = fopen("nodeid", "rb"); if (fp) { fread(&saved_node, sizeof saved_node, 1, fp); fclose(fp); } else { get_random_info(seed); seed[0] |= 0x01; memcpy(&saved_node, seed, sizeof saved_node); fp = fopen("nodeid", "wb"); if (fp) { fwrite(&saved_node, sizeof saved_node, 1, fp); fclose(fp); } } inited = 1; } *node = saved_node;}/* system dependent call to get the current system time. Returned as 100ns ticks since UUID epoch, but resolution may be less than 100ns. */#ifdef _WINDOWS_void get_system_time(uuid_time_t *uuid_time){ ULARGE_INTEGER time; /* NT keeps time in FILETIME format which is 100ns ticks since Jan 1, 1601. UUIDs use time in 100ns ticks since Oct 15, 1582. The difference is 17 Days in Oct + 30 (Nov) + 31 (Dec) + 18 years and 5 leap days. */ GetSystemTimeAsFileTime((FILETIME *)&time); time.QuadPart += (unsigned __int64) (1000*1000*10) // seconds * (unsigned __int64) (60 * 60 * 24) // days * (unsigned __int64) (17+30+31+365*18+5); // # of days *uuid_time = time.QuadPart;}/* Sample code, not for use in production; see RFC 1750 */void get_random_info(char seed[16]){ MD5_CTX c; struct { MEMORYSTATUS m; SYSTEM_INFO s; FILETIME t; LARGE_INTEGER pc; DWORD tc; DWORD l; char hostname[MAX_COMPUTERNAME_LENGTH + 1]; } r; MD5Init(&c); GlobalMemoryStatus(&r.m); GetSystemInfo(&r.s); GetSystemTimeAsFileTime(&r.t); QueryPerformanceCounter(&r.pc); r.tc = GetTickCount(); r.l = MAX_COMPUTERNAME_LENGTH + 1; GetComputerNameA(r.hostname, &r.l); MD5Update(&c, &r, sizeof r); MD5Final(seed, &c);}#elsevoid get_system_time(uuid_time_t *uuid_time){ struct timeval tp; gettimeofday(&tp, (struct timezone *)0); /* Offset between UUID formatted times and Unix formatted times. UUID UTC base time is October 15, 1582. Unix base time is January 1, 1970.*/ *uuid_time = ((unsigned64)tp.tv_sec * 10000000) + ((unsigned64)tp.tv_usec * 10) + I64(0x01B21DD213814000);}/* Sample code, not for use in production; see RFC 1750 */void get_random_info(char seed[16]){ MD5_CTX c; struct { struct sysinfo s; struct timeval t; char hostname[257]; } r; MD5Init(&c); sysinfo(&r.s); gettimeofday(&r.t, (struct timezone *)0); gethostname(r.hostname, 256); MD5Update(&c, &r, sizeof r); MD5Final(seed, &c);}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -