青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

啤酒

一個(gè)空白者

 

用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難

???? #include <stdio.h>
//#include <unistd.h>
#include <string.h>
#include <time.h>

#include <windows.h>

#define BUFFER_SIZE 1024*64

//#define DEFAULT_FILE ?"C:\\ossec-extracted-evt.log"

FILE *fp;
int event_record=0;


/* Event logging local structure */
typedef struct _os_el
{
??? int time_of_last;?
??? char *event_name;

??? EVENTLOGRECORD *er;
??? HANDLE h;

??? DWORD record;
}os_el;
os_el el[3];
int el_last = 0;


/** int startEL(char *app, os_el *el)
?* Starts the event logging for each el
?*/
int startEL(char *app, os_el *el)
{
??? /* Opening the event log */
??? el->h = OpenEventLog(NULL, app);
??? if(!el->h)
??? {
??????? return(0);????
??? }

??? el->event_name = app;
??? GetOldestEventLogRecord(el->h, &el->record);

??? return(1);
}

?

/** char *el_GetCategory(int category_id)
?* Returns a string related to the category id of the log.
?*/
//得到一個(gè)事件的類(lèi)型,,輸入是一個(gè)事件類(lèi)型id輸出是漢字串
char *el_GetCategory(int category_id)
{
??? char *cat;
??? switch(category_id)
??? {
??????? case EVENTLOG_ERROR_TYPE:
??????????? cat = "錯(cuò)誤";
??????????? break;
??????? case EVENTLOG_WARNING_TYPE:
??????????? cat = "警告";
??????????? break;
??????? case EVENTLOG_INFORMATION_TYPE:
??????????? cat = "信息";
??????????? break;
??????? case EVENTLOG_AUDIT_SUCCESS:
??????????? cat = "審核成功";
??????????? break;
??????? case EVENTLOG_AUDIT_FAILURE:
??????????? cat = "審核失敗";
??????????? break;
??????? default:
??????????? cat = "Unknown";
??????????? break;
??? }
??? return(cat);
}


/** int el_getEventDLL(char *evt_name, char *event_sourcename, char *event)
?* Returns the event.
?*/
int el_getEventDLL(char *evt_name, char *event_sourcename, char *event)
{
??? HKEY key;
??? DWORD ret;
??? char keyname[256];


??? keyname[255] = '\0';

??? _snprintf(keyname, 254,
??????????? "System\\CurrentControlSet\\Services\\EventLog\\%s\\%s",
??????????? evt_name,
??????????? event_sourcename);

??? /* Opening registry */????
??? if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, KEY_ALL_ACCESS, &key)
??????????? != ERROR_SUCCESS)
??? {
??????? return(0);???
??? }


??? ret = MAX_PATH -1;?
??? if (RegQueryValueEx(key, "EventMessageFile", NULL,
??????????????? NULL, (LPBYTE)event, &ret) != ERROR_SUCCESS)
??? {
??????? event[0] = '\0';?
??????? return(0);
??? }

??? RegCloseKey(key);
??? return(1);
}

?

/** char *el_Getmessage()
?* Returns a descriptive message of the event.
?*/
//輸出是時(shí)間描述信息
char *el_GetMessage(EVENTLOGRECORD *er,? char *event_name,
????? char * event_sourcename, LPTSTR *el_sstring)
{
??? DWORD fm_flags = 0;
??? char tmp_str[257];
??? char event[MAX_PATH +1];
??? char *curr_str;
??? char *next_str;
??? LPSTR message = NULL;

??? HMODULE hevt;

??? /* Initializing variables */
??? event[MAX_PATH] = '\0';
??? tmp_str[256] = '\0';

??? /* Flags for format event */
??? fm_flags |= FORMAT_MESSAGE_FROM_HMODULE;
??? fm_flags |= FORMAT_MESSAGE_ALLOCATE_BUFFER;
??? fm_flags |= FORMAT_MESSAGE_ARGUMENT_ARRAY;

??? /* Get the file name from the registry (stored on event) */
??? if(!el_getEventDLL(event_name, event_sourcename, event))
??? {
??????? return(NULL);????
??? }????

??? curr_str = event;

??? /* If our event has multiple libraries, try each one of them */
??? while((next_str = strchr(curr_str, ';')))
??? {
??????? *next_str = '\0';
??????? next_str++;

??????? ExpandEnvironmentStrings(curr_str, tmp_str, 255);
??????? hevt = LoadLibraryEx(tmp_str, NULL, DONT_RESOLVE_DLL_REFERENCES);
??????? if(hevt)
??????? {
??????????? if(!FormatMessage(fm_flags, hevt, er->EventID,
??????????????????????? 0,
??????????????????????? (LPTSTR) &message, 0, el_sstring))
??????????? {
??????????????? message = NULL;???
??????????? }
??????????? FreeLibrary(hevt);

??????????? /* If we have a message, we can return it */
??????????? if(message)
??????????????? return(message);
??????? }

??????? curr_str = next_str;??
??? }

??? ExpandEnvironmentStrings(curr_str, tmp_str, 255);
??? hevt = LoadLibraryEx(tmp_str, NULL, DONT_RESOLVE_DLL_REFERENCES);
??? if(hevt)
??? {
??????? int hr;???
??????? if(!(hr = FormatMessage(fm_flags, hevt, er->EventID,
??????????????????????? 0,
??????????????????????? (LPTSTR) &message, 0, el_sstring)))
??????? {
??????????? message = NULL;???
??????? }
??????? FreeLibrary(hevt);

??????? /* If we have a message, we can return it */
??????? if(message)
??????????? return(message);
??? }

??? return(NULL);
}

?

/** void Read_event(os_el *el)
?* Reads the event log.
?*/
void Read_event(os_el *el, int printit)
{
??? DWORD nstr;
??? DWORD user_size;
??? DWORD domain_size;
??? DWORD read, needed;
??? int size_left;
??? int str_size;

??? char *mbuffer[BUFFER_SIZE];
??? LPSTR sstr = NULL;

??? char *tmp_str = NULL;
??? char *event_category;???//事件類(lèi)型
??? char *event_sourcename;???//事件來(lái)源
??? char *event_computername;??//事件計(jì)算機(jī)名
??? char *event_descriptive_msg;?//事件描述

??? char event_el_user[257];??//事件用戶(hù)
??? char event_el_domain[257];??//事件域
??? char el_string[1025];
??? char final_out_msg[1024];??//最后輸出的信息
??? LPSTR el_sstring[57];

??? /* Er must point to the mbuffer */
??? el->er = (EVENTLOGRECORD *) &mbuffer;

??? /* Zeroing the last values */
??? el_string[1024] = '\0';
??? event_el_user[256] = '\0';
??? event_el_domain[256] = '\0';
??? final_out_msg[1023] = '\0';
??? el_sstring[56] = NULL;

??? /* Reading the event log */????
??? while(ReadEventLog(el->h,
??????????????? EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ,
??????????????? 0,
??????????????? el->er, BUFFER_SIZE -1, &read, &needed))
??? {
??????? while(read > 0)
??????? {

??????????? /* We need to initialize every variable before the loop */
???//得到事件的類(lèi)型
??????????? event_category = el_GetCategory(el->er->EventType);
???//得到事件來(lái)源
??????????? event_sourcename = (LPSTR) ((LPBYTE) el->er + sizeof(EVENTLOGRECORD));
???//得到計(jì)算機(jī)名
??????????? event_computername = event_sourcename + strlen(event_sourcename) + 1;
???//給描述信息初始化
??????????? event_descriptive_msg = NULL;


??????????? /* 初始化domain/user尺寸 */
??????????? user_size = 255; domain_size = 255;
??????????? event_el_domain[0] = '\0';
??????????? event_el_user[0] = '\0';


??????????? /* 設(shè)置時(shí)間的一些描述 some description */
??????????? if(el->er->NumStrings)
??????????? {?
??????????????? size_left = 1020;?

??????????????? sstr = (LPSTR)((LPBYTE)el->er + el->er->StringOffset);
??????????????? el_string[0] = '\0';

??????????????? for (nstr = 0;nstr < el->er->NumStrings;nstr++)
??????????????? {
??????????????????? str_size = strlen(sstr);?
??????????????????? strncat(el_string, sstr, size_left);

??????????????????? tmp_str= strchr(el_string, '\0');
??????????????????? if(tmp_str)
??????????????????? {
??????????????????????? *tmp_str = ' ';??
??????????????????????? tmp_str++; *tmp_str = '\0';
??????????????????? }
??????????????????? size_left-=str_size + 1;

??????????????????? if(nstr <= 54)
??????????????????????? el_sstring[nstr] = (LPSTR)sstr;

??????????????????? sstr = strchr( (LPSTR)sstr, '\0');
??????????????????? sstr++;
?????
??????????????? }

??????????????? /* Get a more descriptive message (if available) */
??????????????? event_descriptive_msg = el_GetMessage(el->er, el->event_name, event_sourcename, el_sstring);
??????????????? if(event_descriptive_msg != NULL)
??????????????? {
??????????????????? /* Remove any \n or \r */
??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\n')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;
??????

?????
??????????????????? }???

??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\r')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;
??????//strchr(tmp_str, '\n');

??????????????????? }???
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? strncpy(el_string, "(no message)", 1020);?
??????????? }


??????????? /* 得到username */
??????????? if (el->er->UserSidLength)
??????????? {
??????????????? SID_NAME_USE account_type;
??????????????? if(!LookupAccountSid(NULL, (SID *)((LPSTR)el->er + el->er->UserSidOffset),
??????????????????????????? event_el_user, &user_size, event_el_domain, &domain_size, &account_type))??
??????????????? {
??????????????????? strncpy(event_el_user, "(no user)", 255);
??????????????????? strncpy(event_el_domain, "no domain", 255);
??????????????? }

??????????? }

??????????? else
??????????? {
??????????????? strncpy(event_el_user, "A", 255);?
??????????????? strncpy(event_el_domain, "N", 255);?
??????????? }

??????????? if(printit)
??????????? {
??????????????? tm?? *event_time?? =?? localtime((const?? long?? *)&el->er->TimeWritten);

??????????????? _snprintf(final_out_msg, 1022,
??????????????????????? "事件記錄序號(hào):%d\n事件:%s\n日期:%.4hd-%.2hd-%.2hd\n時(shí)間: %.2hd:%.2hd:%.2hd\n事件類(lèi)型:%s\n事件來(lái)源:%s\n事件ID:(%u)\n用戶(hù):%s/%s\n計(jì)算機(jī):%s\n描述:\n%s\n\n\n",
??????event_record,
??????el->event_name,
??????event_time->tm_year?? +?? 1900,
??????event_time->tm_mon?? +?? 1,
??????event_time->tm_mday,
??????event_time->tm_hour,
??????event_time->tm_min,
??????event_time->tm_sec,?
??????????????????????? event_category,
??????event_sourcename,
???????????????????????
??????????????????????? (WORD)el->er->EventID,
??????????????????????? event_el_domain,
??????????????????????? event_el_user,
???????????????????????
??????event_computername,
??????????????????????? event_descriptive_msg != NULL?event_descriptive_msg:el_string);?
??????????????
??????? ?fprintf(fp, "%s\n", final_out_msg);?
??????????? }

??????????? if(event_descriptive_msg != NULL)
??????????????? LocalFree(event_descriptive_msg);

??????????? /* Changing the point to the er */
??????????? read -= el->er->Length;
??????????? el->er = (EVENTLOGRECORD *)((LPBYTE) el->er + el->er->Length);
???event_record++;
??????? }??

??????? /* Setting er to the beginning of the buffer */?
??????? el->er = (EVENTLOGRECORD *)&mbuffer;
??
??? }
}


/** void win_startel()
?* Starts the event logging for windows
?*/
void win_startel(char *eventlog)
{
??? event_record=1;
?startEL(eventlog, &el[el_last]);
??? Read_event(&el[el_last],1);
??? el_last++;
}
////////////////////////////////////////////////////////
////main////////////////////////////////////////////////
////////////////////////////////////////////////////////
int main()
{
?? fp = fopen("C:\\Documents and Settings\\Administrator\\桌面\\Read_log.txt","w");
?? if(!fp)
?{
??printf("Unable to open file\n");
??exit(1);
?}
?? else
?? {
??printf("open file\n");?
?? }


?fprintf(fp, "\n\n***********安全日志***********\n\n\n");?
?win_startel("Security");
?printf("安全日志打開(kāi)\n");

?fprintf(fp, "\n\n***********應(yīng)用日志***********\n\n\n");?
?win_startel("Application");
?printf("應(yīng)用日志打開(kāi)\n");


?fprintf(fp, "\n\n***********系統(tǒng)日志***********\n\n\n");?
?win_startel("System");
?printf("系統(tǒng)日志打開(kāi)\n");

?

?

?fclose(fp);
?if(fclose(fp))
?{
??printf("關(guān)閉了\n");
?}
?else
?{
??printf("還開(kāi)著呢了,,抓緊關(guān)它吧\n");
?}
?return(0);
}

posted on 2006-08-28 14:18 啤酒 閱讀(2593) 評(píng)論(7)  編輯 收藏 引用

評(píng)論

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2006-08-28 14:39 萬(wàn)連文

寫(xiě)的好,但是還是轉(zhuǎn)化為C++類(lèi)用起來(lái)才方便  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2006-08-28 17:49 啤酒


我本相做個(gè)分析,所以就直接讀了
但是分析起來(lái)比較困難
實(shí)在不止到用什么算法合適,策略也不好定  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2006-08-29 09:53 游客

@啤酒
不錯(cuò),還是寫(xiě)的可以的,以后我也寫(xiě)一個(gè)試試  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2006-08-31 09:24 Khan's Notebook

呵呵,我c寫(xiě)了一個(gè)讀取日志的, c雖然麻煩,但是直接..  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2009-03-27 15:42

你只是修改了OSSEC的源碼而已,只有1%是你自己寫(xiě)的。
不過(guò)你能看懂OSSEC的代碼也不錯(cuò)。  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2011-04-11 15:05 韓長(zhǎng)坤

代碼功能是有的 不過(guò) 有內(nèi)存泄露哦 你忘記了CloseEventLog  回復(fù)  更多評(píng)論   

# re: 用C寫(xiě)的“讀取系統(tǒng)日志”,花了我不少時(shí)間的,雖然不難 2012-05-18 17:08 huang

非常感謝!  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(2)

隨筆檔案

收藏夾

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美伊人久久久久久午夜久久久久 | 久久婷婷亚洲| 亚洲精品视频在线| 欧美国产91| 日韩视频在线观看一区二区| 99精品欧美一区二区三区| 一区二区黄色| 日韩视频久久| 欧美一级久久久| 牛人盗摄一区二区三区视频| 久久综合精品国产一区二区三区| 欧美国产日韩精品| 亚洲免费在线电影| 亚洲天堂偷拍| 老司机午夜精品| 国产精品一区二区久久| 国产深夜精品福利| 亚洲经典在线| 久久成人在线| 欧美成人激情视频| 一本到高清视频免费精品| 91久久香蕉国产日韩欧美9色| 亚洲欧洲一二三| 久久国产精品久久精品国产| 欧美激情综合五月色丁香小说| 欧美色播在线播放| 黄色日韩精品| 一区二区三区高清不卡| 亚洲欧美在线磁力| 最新国产精品拍自在线播放| 亚洲视频免费观看| 狂野欧美激情性xxxx欧美| 亚洲电影免费在线观看| 欧美一区二区三区喷汁尤物| 久久精品国产久精国产思思| 久久久久久久一区| 先锋影音国产一区| 亚洲风情亚aⅴ在线发布| 久热精品视频在线观看| 久久激情五月激情| 亚洲精品欧洲精品| 夜夜夜久久久| 国内久久精品视频| 久久婷婷av| 一区二区三区久久精品| 欧美一级日韩一级| 韩国av一区二区三区在线观看| 久久久久久久波多野高潮日日 | 亚洲毛片一区| 欧美激情久久久| 亚洲综合国产激情另类一区| 国产欧美日韩综合一区在线播放| 欧美一区在线直播| 欧美成年人视频网站| 亚洲三级性片| 久久夜色精品国产欧美乱极品| 亚洲综合大片69999| 欧美激情影院| 免费在线亚洲| 国产亚洲欧美一区二区| 在线性视频日韩欧美| 韩国女主播一区二区三区| 亚洲国产精品一区二区三区| 欧美日韩国产综合新一区| 香蕉久久精品日日躁夜夜躁| 嫩模写真一区二区三区三州| 亚洲欧美卡通另类91av| 久久综合狠狠| 久久国产精品色婷婷| 欧美精品97| 亚洲欧美日本国产有色| 亚洲尤物视频在线| 亚洲欧美制服另类日韩| 欧美日韩美女在线| 亚洲一级在线| 欧美在线999| 国产精品国产福利国产秒拍| 亚洲一区二区网站| 亚洲一级黄色| 亚洲伦理中文字幕| 欧美三级免费| 在线一区二区日韩| 午夜免费久久久久| 国产精品黄页免费高清在线观看| 亚洲愉拍自拍另类高清精品| 欧美亚洲一区二区三区| 国产真实乱子伦精品视频| 欧美成人一二三| 亚洲精品久久久久久久久久久 | 午夜精品免费在线| 欧美激情亚洲精品| 日韩午夜中文字幕| 一区二区三区四区在线| 国产精品第一页第二页第三页| 亚洲精品视频在线| 久久综合九色九九| 日韩午夜av在线| 欧美性猛交xxxx乱大交退制版| 一区二区欧美在线观看| 久久人人九九| 亚洲人成小说网站色在线 | 欧美a级片网站| 伊人一区二区三区久久精品| 欧美久久久久| 亚洲一区二区三区视频| 欧美激情亚洲国产| 久久久久久**毛片大全| 亚洲香蕉网站| 一本不卡影院| 黄色成人av在线| 国产精品久久久久秋霞鲁丝| 久久久久久97三级| 国产偷国产偷亚洲高清97cao| 美女视频黄a大片欧美| 亚洲国产mv| 狠狠入ady亚洲精品经典电影| 国产在线精品一区二区中文| 国产私拍一区| 亚洲国产精品v| 国产精品99久久久久久有的能看| 99视频有精品| 亚洲视频中文| 午夜在线成人av| 久久国产精品电影| 久久偷窥视频| 欧美大香线蕉线伊人久久国产精品| 久久一区欧美| 一本色道**综合亚洲精品蜜桃冫| 欧美一区1区三区3区公司| 久久天天躁夜夜躁狠狠躁2022| 久久中文字幕一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美大片免费看| 国产老女人精品毛片久久| 亚洲欧洲一区二区天堂久久 | 欧美日韩黄色大片| 国产亚洲人成a一在线v站| 黄色精品在线看| 欧美亚洲午夜视频在线观看| 久久综合国产精品| 亚洲精品一区二区三区婷婷月| 玖玖综合伊人| 红桃视频成人| 亚洲国产成人久久综合| 亚洲免费视频成人| 亚洲高清视频中文字幕| 99ri日韩精品视频| 一区二区三区视频在线观看| 国产日韩欧美日韩大片| 亚洲国产女人aaa毛片在线| 免费看成人av| 在线观看福利一区| 欧美激情亚洲综合一区| 欧美精品国产一区二区| 亚洲精品久久久久久下一站| 欧美成人精精品一区二区频| 欧美理论在线| 久久久久久久久久久久久9999| 国产日韩欧美电影在线观看| 欧美自拍偷拍午夜视频| 久久综合给合久久狠狠色| 亚洲精品日韩综合观看成人91| 在线一区免费观看| 国产亚洲欧洲一区高清在线观看| 麻豆精品精华液| 欧美日韩亚洲国产一区| 最新国产成人av网站网址麻豆 | 亚洲在线成人| 欧美一区二区视频97| av成人国产| 亚洲免费视频一区二区| 国产亚洲女人久久久久毛片| 亚洲第一在线综合网站| 国产精品久久久久国产a级| 久久久久久夜精品精品免费| 久久五月婷婷丁香社区| 亚洲女性喷水在线观看一区| 欧美va日韩va| 久久精品国产亚洲一区二区三区| 欧美精品18+| 老**午夜毛片一区二区三区| 米奇777在线欧美播放| 美女精品自拍一二三四| 欧美在线观看日本一区| 国产一区二区三区在线观看免费视频| 亚洲精品中文在线| 亚洲欧美一区二区激情| 亚洲国产高清高潮精品美女| 一本在线高清不卡dvd| 樱桃国产成人精品视频| 亚洲欧美一区二区原创| 一区二区三区黄色| 麻豆91精品91久久久的内涵| 久久久久久噜噜噜久久久精品| 欧美.日韩.国产.一区.二区| 午夜精品国产更新| 欧美精品少妇一区二区三区| 欧美国产精品人人做人人爱| 亚洲国产综合视频在线观看| 久久久久久久久久看片|