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

📄 savinglib.cpp

📁 基于NMS的ss7 4.3写的信令跟踪程序 log到文件 用ethereal可打开
💻 CPP
字号:
#include "savinglib.h"
#include <ctime>
#include <winsock2.h>

struct FileHeader {
	unsigned long	magicNumber;
	unsigned short	majorVersion;
	unsigned short	minorVersion;
	unsigned long	timezoneOff;
	unsigned long	timestampAcc;
	unsigned long	snapshotSize;
	unsigned long	linkLayer;
};

struct PacketHeader {
	timeval			timestamp;
	unsigned long	captured;
	unsigned long	entire;
};


#ifdef WIN32
typedef __int64	u_int64_t;
/*
 * Number of micro-seconds between the beginning of the Windows epoch
 * (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970).
 *
 * This assumes all Win32 compilers have 64-bit support.
 */
#if defined(_SC_VER) || defined(_SC_EXTENSIONS) || defined(__WATCOC__)
  #define DELTA_EPOCH_IN_USEC  11644473600000000Ui64
#else
  #define DELTA_EPOCH_IN_USEC  11644473600000000ULL
#endif

static u_int64_t filetime_to_unix_epoch (const FILETIME *ft)
{
    u_int64_t res = (u_int64_t) ft->dwHighDateTime << 32;

    res |= ft->dwLowDateTime;
    res /= 10;                   /* from 100 nano-sec periods to usec */
    res -= DELTA_EPOCH_IN_USEC;  /* from Win epoch to Unix epoch */
    return (res);
}

int gettimeofday (timeval *tv, void *tz)
{
    FILETIME  ft;
    u_int64_t tim;

    if (!tv) {
        //errno = EINVAL;
        return (-1);
    }
    GetSystemTimeAsFileTime (&ft);
    tim = filetime_to_unix_epoch (&ft);
    tv->tv_sec  = (long) (tim / 1000000L);
    tv->tv_usec = (long) (tim % 1000000L);
    return (0);
}
#endif

savingLib::savingLib(const std::string& filepath)
{
	ofs_.open(filepath.c_str(), std::ios::binary | std::ios::out);

	FileHeader	fileHeader;
	::memset(&fileHeader, 0, sizeof(fileHeader));
	fileHeader.magicNumber	= 0xa1b2c3d4;
	fileHeader.majorVersion	= 2;
	fileHeader.minorVersion	= 4;
	fileHeader.timezoneOff	= 0;
	fileHeader.timestampAcc	= 0;
	fileHeader.snapshotSize	= 65535;
	fileHeader.linkLayer	= 140;

	ofs_.write((char* )&fileHeader, sizeof(fileHeader));
}


savingLib::~savingLib()
{
	ofs_.close();
}

void savingLib::save(const std::string& content)
{
    save(content.data(), content.size());
}

void savingLib::save(const char* buffer, size_t length)
{
	if(length < 10) return;
	PacketHeader	packetHeader;
	::memset(&packetHeader, 0, sizeof(packetHeader));

	gettimeofday(&packetHeader.timestamp, NULL);
	packetHeader.captured	= length/* - 10*/;
	packetHeader.entire		= length/* - 10*/;
	ofs_.write((char* )&packetHeader, sizeof(packetHeader));
	ofs_.write(buffer/* + 10*/, length/* - 10*/);
}

⌨️ 快捷键说明

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