#include "GetInfo.h" char szdomain[64]; int GetInfoToWrite(char* path, char* domain,Write_t* pwrite); int SearchForContent(char* FilePath,Write_t *pwrite); int main() { //ReadFeatureFromXml("163.com"); char* PATH="/root/Desktop/login/2014-06-27---passport.csdn.net_443---192.168.1.24_62213.http"; //SearchForContent(PATH); // Write_t pwrite; // GetInfoToWrite("22","22",&pwrite); Write_t pt; char* domain= "passport.csdn.net"; GetInfoToWrite(PATH,domain,&pt); return 0; } int GetInfoToWrite(char* path, char* domain,Write_t* pwrite) { strncpy(szdomain,domain,sizeof(szdomain)-1); szdomain[sizeof(szdomain)-1] = '\0'; if(OP_SUCCESS == ReadFeatureFromXml(domain)) { printf("Start Process....\n"); }else { printf("ReadXML Failed..\n"); return OP_FAILED; } if(OP_SUCCESS==SearchForContent(path,pwrite)) { printf("Search and Write Complete..\n"); free(pF.FIdBegin); free(pF.FIdEnd); free(pF.FPBegin); free(pF.FPEnd); mysql_close(conn); return OP_SUCCESS; }else { printf("Search and Write Failed..\n"); free(pF.FIdBegin); free(pF.FIdEnd); free(pF.FPBegin); free(pF.FPEnd); return OP_FAILED; } } int InitMysqlConnect(void) { mysql_init(conn); if(!mysql_real_connect(conn, "127.0.0.1", "root", "", "SecDR_F118", 0, NULL, 0)) { printf("connect mysql %d time error \n %s \n", mysql_errno(conn),mysql_error(conn)); mysql_close(conn); sleep(1); return OP_FAILED; } printf("\tInit Mysql Ok !!\n\n"); return OP_SUCCESS; }; int UseMysqlStr(char *sqlcmd) { if(strlen(sqlcmd)==0) { printf("Nothing in sqlcmd !\n"); return OP_FAILED; } if (mysql_query(conn, sqlcmd)) { //如果错误,把sql语句记录到日志中去 printf("-------------------line------------------\n"); printf("%s",sqlcmd); printf("\n-------------------line------------------\n"); printf("mysql error %s\n", mysql_error(conn)); if (1062 == mysql_errno(conn))// { printf("mysql error 1062\n"); return OP_FAILED; } mysql_close(conn); if (OP_SUCCESS != InitMysqlConnect()) { printf("mysql Init Error in Function \n"); return OP_FAILED; } if (mysql_query(conn, sqlcmd)) { printf("Insert or update Data error \n"); mysql_close(conn); if (OP_SUCCESS != InitMysqlConnect()) { printf("mysql Init Error i !!!\n"); return OP_FAILED; } return OP_FAILED; } } return OP_SUCCESS; }; int FindKeyWord(char *sour,Write_t *pwrite) { char username[128]; char password[128]; //printf("begin :%s\n",pF.FIdBegin); //printf("end :%s\n",pF.FPBegin); //printf("buf :%s\n ",sour); if( strstr(sour,(char*)(pF.FIdBegin))==NULL || strstr(sour,(char*)(pF.FIdEnd))==NULL) { printf("Can't Matching The Feature Error: Please Check XML Feature....\n"); return OP_FAILED; } while(*sour != '\0') { if( NULL == strstr(sour,(char*)(pF.FIdEnd)) || NULL == strstr(sour,(char*)(pF.FIdBegin)) || strstr(sour,(char*)(pF.FPBegin))==NULL || strstr(sour,(char*)(pF.FPEnd))==NULL) { break; } char *p=strstr(sour,(char*)(pF.FIdBegin)); sour = p+xmlStrlen(pF.FIdBegin); char *q=strstr(p,(char*)(pF.FIdEnd)); sour = q+xmlStrlen(pF.FIdEnd); char *p1=p+xmlStrlen((pF.FIdBegin)); int i=q-p1; if(i>100 || i<=0) { printf("Invalid Length Of Username \n"); continue; } username[i] = '\0'; memcpy(username,p1,i); //strcpy(pInfo.username,username); url_decode(username,username); printf("username=%s \n",username); p=strstr(sour,(char*)(pF.FPBegin)); sour = p+xmlStrlen(pF.FPBegin); q=strstr(p,(char*)(pF.FPEnd)); sour = q+xmlStrlen(pF.FPEnd); p1=p+xmlStrlen((pF.FPBegin)); i=q-p1; if(i>100 || i<=0) { printf("Invalid Length Of Password \n"); continue; } password[i] = '\0'; memcpy(password,p1,i); //strcpy(pInfo.password,password); url_decode(password,password); printf("password=%s \n",password); if(pwrite==NULL) { printf("error : pwrite is NULL"); return OP_FAILED; } //select from database . char sqlupdate[1024]; //memset(sqlupdate,0,1024); snprintf(sqlupdate, sizeof(sqlupdate)-1, FORMAT_UPDATE_INFORES,username,szdomain); char sqlcmd[1024]; //memset(sqlcmd,0,1024); snprintf(sqlcmd, sizeof(sqlcmd)-1, FORMAT_INSERT_INFORES,szdomain,pwrite->szSrcIP, pwrite->szAccount,username,password); char sqlselect[1024]; //memset(sqlselect,0,1024); snprintf(sqlselect, sizeof(sqlselect)-1, FORMAT_SELECT_INFORES,username,szdomain); int gs=mysql_query(conn,sqlselect); if(gs){ printf("select error:\n"); } int num_rows=0; MYSQL_RES* res_ptr = mysql_store_result(conn); if(res_ptr != NULL){ num_rows = mysql_num_rows(res_ptr); printf("Well . There exist %lu data .\n",(unsigned long)num_rows); } else { return OP_FAILED; } if(num_rows!=0) { printf("update..\n"); if(UseMysqlStr(sqlupdate)) { printf("update failed \n"); return OP_FAILED; } }else { printf("insert..\n"); if(UseMysqlStr(sqlcmd)) { printf("insert failed \n"); return OP_FAILED; } } // mysql_free_result(res_ptr); } return OP_SUCCESS; } int SearchForContent(char* FilePath,Write_t *pwrite) { printf("FILE PATH: %s \n",FilePath); if (OP_SUCCESS != InitMysqlConnect()) { printf("mysql Init Error in Function \n"); return OP_FAILED; } char insertRaw[1024] = {0}; snprintf(insertRaw,sizeof(insertRaw),FORMAT_INSERT_RAW,szdomain,pwrite->szAccount,pwrite->szSrcIP,FilePath); if(OP_SUCCESS != UseMysqlStr(insertRaw)) { printf("insert into RawResult Failed \n"); return OP_FAILED; } FILE *fp =NULL; if(NULL == (fp=fopen(FilePath,"rb"))) { fprintf(stderr,"Cannot Open The File ..\n"); return OP_FAILED; } fseek(fp,0,SEEK_END); int number=ftell(fp); fseek(fp,0,SEEK_SET); if(number==0) { printf("Empty File...\n"); return OP_FAILED; } char* buf=(char*)malloc(sizeof(char)*number); char tmp[1000]; while(!feof(fp)) { fgets(tmp,1000,fp); strcat(buf,tmp); } // int fr= fread(buf,1,number,fp); // printf(" buf : %s\n fr=%d\n",buf,fr); // printf(" buf len :%d \n",strlen(buf)); // printf("sizeof(char)*number = %d\n",sizeof(char)*number); // printf(" rt :%d, number = %d\n",rt, number); if(OP_SUCCESS == FindKeyWord(buf,pwrite)) { printf("Process Success..\n---\n"); fclose(fp); free(buf); return OP_SUCCESS; }else { printf("Process Failed..\n---\n"); fclose(fp); free(buf); return OP_FAILED; } } int ReadFeatureFromXml(char* type) { xmlDocPtr doc = NULL; xmlNodePtr cur = NULL; xmlKeepBlanksDefault(0); doc = xmlParseFile(Xmlpath); if(doc == NULL) { fprintf(stderr,"XML docment not parsed succussfully!..\n"); return OP_FAILED; } cur = xmlDocGetRootElement(doc); if(cur == NULL) { fprintf(stderr,"empty document!.\n"); xmlFreeDoc(doc); return OP_FAILED ; } cur = cur->children; //printf("%s \n",cur->name); xmlChar* attr=NULL; // cur = cur->next; // if(!(xmlStrcmp(cur->name,(const xmlChar*)"MailType"))) // { // attr = xmlGetProp(cur,"type"); // printf("attr = %s \n",attr); // xmlFree(attr); // } while (cur != NULL) { if(!(xmlStrcmp(cur->name,(const xmlChar*)"MailType"))) { attr = xmlGetProp(cur,(const xmlChar*)"type"); if(!xmlStrcmp(attr,(const xmlChar*)type)) { xmlChar* tmp = xmlNodeGetContent(cur->children->children); pF.FIdBegin = malloc(xmlStrlen(tmp)+1); memset(pF.FIdBegin,0,xmlStrlen(tmp)+1); memcpy(pF.FIdBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->children->next); pF.FIdEnd = malloc(xmlStrlen(tmp)+1); memset(pF.FIdEnd,0,xmlStrlen(tmp)+1); memcpy(pF.FIdEnd,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children); pF.FPBegin=malloc(xmlStrlen(tmp)+1); memset(pF.FPBegin,0,xmlStrlen(tmp)+1); memcpy(pF.FPBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children->next); pF.FPEnd=malloc(xmlStrlen(tmp)+1); memset(pF.FPEnd,0,xmlStrlen(tmp)+1); memcpy(pF.FPEnd,tmp,xmlStrlen(tmp)); } } cur = cur->next; } if(pF.FIdBegin==NULL||pF.FIdEnd==NULL || pF.FPBegin==NULL || pF.FPEnd==NULL) { printf("XML Feature Parsed Failed: can't find.\n"); return OP_FAILED; } return OP_SUCCESS; }
xxx.h
#include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xmlmemory.h> #include <mysql/mysql.h> #include "KCommon.h" #define FORMAT_INSERT_INFORES "insert into ssltab_InfoResult(domain ,ipaddr, account, username, password, cap_time) values (\"%s\",\"%s\", \"%s\",\"%s\", \"%s\", now());" #define FORMAT_SELECT_INFORES "select * from ssltab_InfoResult where username=\"%s\" and domain=\"%s\";" #define FORMAT_UPDATE_INFORES "update ssltab_InfoResult set cap_time=now() where username=\"%s\" and domain=\"%s\" ;" #define FORMAT_INSERT_RAW "insert into ssltab_RawResult(domain,account,src_ip,res_path,cap_time) values (\"%s\",\"%s\",\"%s\",\"%s\",now());" char Xmlpath[]="/home/SecDR_F118/conf/tmp/info.xml"; int ReadFeatureFromXml(char* type); //int SearchForContent(char* FilePath,Write_t *pwrite); //int FindKeyWord(char *sour,Write_t *pwrite); int UseMysqlStr(char *sqlcmd); typedef struct tWrite{ char szAccount[64]; char szSrcIP[30]; time_t nTime; }Write_t; struct Info{ char username[100]; char password[100]; }pInfo; struct Feature{ xmlChar* FIdBegin; xmlChar* FIdEnd; xmlChar* FPBegin; xmlChar* FPEnd; }pF; static MYSQL conn[1]; /* 16进制字符表 */ static const char c2x_table[] = "0123456789ABCDEF"; /* 字符转16进制 */ //static unsigned char *c2x(unsigned what,unsigned char *where) // { // *where++ = '%'; // *where++ = c2x_table[what>>4]; // *where++ = c2x_table[what&0xf]; // return where; // } /* 16进制转字符 */ static char x2c(const char *what) { register char digit; digit = ((what[0] >= 'A') ? ((what[0] & 0xdf) - 'A') + 10 : (what[0] - '0')); digit *= 16; digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A') + 10 : (what[1] - '0')); return (digit); } size_t url_decode(const char *src,char *dest) { char *cp=dest; while(*src!='\0') { if(*src=='+') { *dest++=' '; } else if(*src=='%') { int ch; ch=x2c(src+1); *dest++=ch; src+=2; } else { *dest++=*src; } src++; } *dest='\0'; return(dest-cp); }