Files
2022-12-13 12:44:04 +01:00

356 lines
12 KiB
C++
Executable File

#include <cdevPlatforms.h>
#include <cdevData.h>
#include <time.h>
class ClientInfoStruct
{
private:
char unknown[8];
char * username;
char * group;
unsigned uid;
unsigned gid;
unsigned pid;
char * program;
char * commandline;
time_t starttime;
time_t connecttime;
char * host;
char * os;
char * osrelease;
char * osversion;
char * machine;
char * shell;
private:
void updateDataString ( cdevData & data, char * tag, char * &item )
{
size_t nelems = 0;
if(data.getElems(tag, &nelems)==CDEV_SUCCESS &&
nelems==1 && data.getType(tag)==CDEV_STRING)
{
if(item!=NULL) delete item;
item = NULL;
data.get(tag, &item);
}
}
void updateDataInt ( cdevData & data, char * tag, unsigned &item )
{
size_t nelems = 0;
if(data.getElems(tag, &nelems)==CDEV_SUCCESS && nelems==1)
{
data.get(tag, &item);
}
}
public:
ClientInfoStruct ( void )
: username(NULL), group(NULL), uid(0), gid(0), pid(0),
program(NULL), commandline(NULL), starttime(0),
connecttime(0), host(NULL), os(NULL), osrelease(NULL),
osversion(NULL), machine(NULL), shell(NULL)
{
strcpy(unknown, "UNKNOWN");
}
~ClientInfoStruct ( void )
{
if(username) delete username;
if(group) delete group;
if(program) delete program;
if(commandline) delete commandline;
if(host) delete host;
if(os) delete os;
if(osrelease) delete osrelease;
if(osversion) delete osversion;
if(machine) delete machine;
if(shell) delete shell;
}
void updateClientInfo ( cdevData & data )
{
updateDataString(data, "username", username);
updateDataString(data, "group", group);
updateDataInt (data, "uid", uid);
updateDataInt (data, "gid", gid);
updateDataInt (data, "pid", pid);
updateDataString(data, "program", program);
updateDataString(data, "commandline", commandline);
updateDataInt (data, "starttime", (unsigned &)starttime);
updateDataInt (data, "connecttime", (unsigned &)connecttime);
updateDataString(data, "host", host);
updateDataString(data, "os", os);
updateDataString(data, "osrelease", osrelease);
updateDataString(data, "osversion", osversion);
updateDataString(data, "machine", machine);
updateDataString(data, "shell", shell);
connecttime = time(NULL);
}
char * getUsername ( void ) { return username?username:unknown; }
char * getGroup ( void ) { return group?group:unknown; }
unsigned getUid ( void ) { return uid; }
unsigned getGid ( void ) { return gid; }
unsigned getPid ( void ) { return pid; }
char * getProgram ( void ) { return program?program:unknown; }
char * getCommandLine ( void ) { return commandline?commandline:unknown; }
time_t getStartTime ( void ) { return starttime; }
time_t getConnectTime ( void ) { return connecttime; }
char * getHost ( void ) { return host?host:unknown; }
char * getOs ( void ) { return os?os:unknown; }
char * getOsRelease ( void ) { return osrelease?osrelease:unknown; }
char * getOsVersion ( void ) { return osversion?osversion:unknown; }
char * getMachine ( void ) { return machine?machine:unknown; }
char * getShell ( void ) { return shell?shell:unknown; }
void asciiDump ( FILE * fp = stdout )
{
fprintf(fp, "--------------------------------------------------------\n");
fprintf(fp, " Printing Client Information\n");
fprintf(fp, "--------------------------------------------------------\n");
fprintf(fp, "=> USERNAME : %s\n", username?username:"UNDEFINED");
fprintf(fp, "=> GROUP : %s\n", group?group:"UNDEFINED");
fprintf(fp, "=> USER ID : %s\n", uid?ltoa(uid):"UNDEFINED");
fprintf(fp, "=> GROUP ID : %s\n", gid?ltoa(gid):"UNDEFINED");
fprintf(fp, "=> PROCESS ID : %s\n", pid?ltoa(pid):"UNDEFINED");
fprintf(fp, "=> APPLICATION : %s\n", program?program:"UNDEFINED");
fprintf(fp, "=> COMMAND LINE : %s\n", commandline?commandline:"UNDEFINED");
fprintf(fp, "=> START TIME : %s", starttime?ctime(&starttime):"UNKNOWN\n");
fprintf(fp, "=> CONNECT TIME : %s", connecttime?ctime(&connecttime):"UNKNOWN\n");
fprintf(fp, "=> HOST NAME : %s\n", host?host:"UNKNOWN");
fprintf(fp, "=> OS : %s\n", os?os:"UNKNOWN");
fprintf(fp, "=> OS VERSION : %s\n", osversion?osversion:"UNKNOWN");
fprintf(fp, "=> OS RELEASE : %s\n", osrelease?osrelease:"UNKNOWN");
fprintf(fp, "=> HARDWARE ID : %s\n", machine?machine:"UNKNOWN");
fprintf(fp, "--------------------------------------------------------\n");
}
};
class ClientInfo
{
private:
cdevData data;
public:
ClientInfo ( void )
{
cdevData::addTag("username");
cdevData::addTag("group");
cdevData::addTag("uid");
cdevData::addTag("gid");
cdevData::addTag("pid");
cdevData::addTag("program");
cdevData::addTag("commandline");
cdevData::addTag("starttime");
cdevData::addTag("connecttime");
cdevData::addTag("host");
cdevData::addTag("os");
cdevData::addTag("osrelease");
cdevData::addTag("osversion");
cdevData::addTag("machine");
cdevData::addTag("shell");
cdevData::addTag("sendPktCnt");
cdevData::addTag("recvPktCnt");
cdevData::addTag("socket");
#ifndef _WIN32
struct utsname hostinfo;
struct group * grp;
char * shell = getenv("SHELL");
uname(&hostinfo);
grp = getgrgid(getgid());
data.insert("username", getlogin());
data.insert("group", grp?grp->gr_name:(char *)"UNDEFINED");
data.insert("uid", (unsigned)getuid());
data.insert("gid", (unsigned)getgid());
data.insert("pid", (unsigned)getpid());
data.insert("host", hostinfo.nodename);
data.insert("os", hostinfo.sysname);
data.insert("osrelease", hostinfo.release);
data.insert("osversion", hostinfo.version);
data.insert("machine", hostinfo.machine);
data.insert("shell", shell?shell:(char *)"UNDEFINED");
#if defined(__hpux)
struct pst_status pstatData;
pstat_getproc(&pstatData, sizeof(pstatData), 0, (int)getpid());
data.insert("program", pstatData.pst_ucomm);
data.insert("commandline", pstatData.pst_cmd);
data.insert("starttime", pstatData.pst_start);
#endif
#else
char userNameBuf[UNLEN+1];
unsigned long userNameLen = UNLEN;
char hostNameBuf[MAXHOSTNAMELEN+1];
unsigned long hostNameLen = MAXHOSTNAMELEN;
*userNameBuf = 0;
*hostNameBuf = 0;
data.insert("pid", GetCurrentProcessId());
if(GetUserName (userNameBuf, &userNameLen)) data.insert("username", userNameBuf);
if(GetComputerName(hostNameBuf, &hostNameLen)) data.insert("host", hostNameBuf);
if(userNameBuf && hostNameBuf)
{
char grpNameBuf[GNLEN+1];
unsigned long grpNameLen = GNLEN;
char sidBuf[256];
unsigned long sidLen = 256;
SID_NAME_USE sidType;
*grpNameBuf = 0;
if(LookupAccountName(hostNameBuf, userNameBuf,
sidBuf, &sidLen, grpNameBuf,
&grpNameLen, &sidType))
{
data.insert("group", grpNameBuf);
}
}
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx (&osv))
{
char osVersionBuf[64];
switch(osv.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
data.insert("os", "WINDOWS");
break;
case VER_PLATFORM_WIN32_WINDOWS:
if(osv.dwMinorVersion == 0)
data.insert("os", "WINDOWS 95");
else data.insert("os", "WINDOWS 98");
break;
case VER_PLATFORM_WIN32_NT:
data.insert("os", "WINDOWS NT");
break;
default:
data.insert("os", "WIN32");
break;
}
sprintf(osVersionBuf, "%d.%d", osv.dwMajorVersion, osv.dwMinorVersion);
data.insert("osversion", osVersionBuf);
data.insert("osrelease", ltoa(osv.dwBuildNumber));
}
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
switch(sysinfo.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_INTEL:
data.insert("machine", "PROCESSOR_ARCHITECTURE_INTEL");
break;
case PROCESSOR_ARCHITECTURE_MIPS:
data.insert("machine", "PROCESSOR_ARCHITECTURE_MIPS");
break;
case PROCESSOR_ARCHITECTURE_ALPHA:
data.insert("machine", "PROCESSOR_ARCHITECTURE_ALPHA");
break;
case PROCESSOR_ARCHITECTURE_PPC:
data.insert("machine", "PROCESSOR_ARCHITECTURE_PPC");
break;
case PROCESSOR_ARCHITECTURE_UNKNOWN:
default:
data.insert("machine", "PROCESSOR_ARCHITECTURE_UNKNOWN");
break;
}
if(__argc>0)
{
int i;
char * cmdLine = NULL;
size_t cmdLineLen = 0;
data.insert("program", __argv[0]);
for(i=0; i<__argc; i++) cmdLineLen+=strlen(__argv[i])+1;
cmdLine = new char [cmdLineLen];
*cmdLine = 0;
for(i=0; i<__argc; i++)
{
strcat(cmdLine, __argv[i]);
if(i+1<__argc) strcat(cmdLine, " ");
}
data.insert("commandline", cmdLine);
}
FILETIME startTime;
FILETIME exitTime;
FILETIME kernelTime;
FILETIME userTime;
if(GetProcessTimes(GetCurrentProcess(), &startTime, &exitTime, &kernelTime, &userTime))
{
struct timeval tv;
FileTimeToTimeVal(&startTime, &tv);
data.insert("starttime", tv.tv_sec);
}
#endif
}
cdevData & getClientData ( void ) { return data; }
void asciiDump ( FILE * fp = stdout )
{
fprintf(fp, "--------------------------------------------------------\n");
fprintf(fp, " Printing Client Information\n");
fprintf(fp, "--------------------------------------------------------\n");
char * username;
char * group;
unsigned pid;
unsigned gid;
unsigned uid;
char * host;
char * os;
char * osrelease;
char * osversion;
char * machine;
char * shell;
char * program;
char * commandline;
long starttime;
if(data.find("username", (void * &)username)!=CDEV_SUCCESS) username = NULL;
if(data.find("group", (void * &)group)!=CDEV_SUCCESS) group = NULL;
if(data.find("host", (void * &)host)!=CDEV_SUCCESS) host = NULL;
if(data.find("os", (void * &)os)!=CDEV_SUCCESS) os = NULL;
if(data.find("osrelease", (void * &)osrelease)!=CDEV_SUCCESS) osrelease = NULL;
if(data.find("osversion", (void * &)osversion)!=CDEV_SUCCESS) osversion = NULL;
if(data.find("machine", (void * &)machine)!=CDEV_SUCCESS) machine = NULL;
if(data.find("shell", (void * &)shell)!=CDEV_SUCCESS) shell=NULL;
if(data.find("program", (void * &)program)!=CDEV_SUCCESS) program=NULL;
if(data.find("commandline", (void * &)commandline)!=CDEV_SUCCESS) commandline=NULL;
if(data.get("starttime", &starttime)!=CDEV_SUCCESS) starttime = 0;
if(data.get("pid", &pid)!=CDEV_SUCCESS) pid = 0;
if(data.get("gid", &gid)!=CDEV_SUCCESS) gid = 0;
if(data.get("uid", &uid)!=CDEV_SUCCESS) uid = 0;
fprintf(fp, "=> USERNAME : %s\n", username?username:"UNDEFINED");
fprintf(fp, "=> GROUP : %s\n", group?group:"UNDEFINED");
fprintf(fp, "=> USER ID : %s\n", uid?ltoa(uid):"UNDEFINED");
fprintf(fp, "=> GROUP ID : %s\n", gid?ltoa(gid):"UNDEFINED");
fprintf(fp, "=> PROCESS ID : %s\n", pid?ltoa(pid):"UNDEFINED");
fprintf(fp, "=> APPLICATION : %s\n", program?program:"UNDEFINED");
fprintf(fp, "=> COMMAND LINE : %s\n", commandline?commandline:"UNDEFINED");
fprintf(fp, "=> START TIME : %s", starttime?ctime(&starttime):"UNKNOWN\n");
fprintf(fp, "=> HOST NAME : %s\n", host?host:"UNKNOWN");
fprintf(fp, "=> OS : %s\n", os?os:"UNKNOWN");
fprintf(fp, "=> OS VERSION : %s\n", osversion?osversion:"UNKNOWN");
fprintf(fp, "=> OS RELEASE : %s\n", osrelease?osrelease:"UNKNOWN");
fprintf(fp, "=> HARDWARE ID : %s\n", machine?machine:"UNKNOWN");
fprintf(fp, "--------------------------------------------------------\n");
}
};