工作日志2014-06-10(实现C语言解析XML获得查询关键字)
#include "GetInfo.h"
char szdomain[];
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 ;
} int GetInfoToWrite(char* path, char* domain,Write_t* pwrite)
{
strncpy(szdomain,domain,sizeof(szdomain)-);
szdomain[sizeof(szdomain)-] = '\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", , NULL, ))
{
printf("connect mysql %d time error \n %s \n", mysql_errno(conn),mysql_error(conn));
mysql_close(conn);
sleep();
return OP_FAILED;
}
printf("\tInit Mysql Ok !!\n\n"); return OP_SUCCESS;
}; int UseMysqlStr(char *sqlcmd)
{
if(strlen(sqlcmd)==)
{
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 ( == 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[];
char password[];
//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> || i<=)
{
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> || i<=)
{
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[];
//memset(sqlupdate,0,1024);
snprintf(sqlupdate, sizeof(sqlupdate)-, FORMAT_UPDATE_INFORES,username,szdomain); char sqlcmd[];
//memset(sqlcmd,0,1024);
snprintf(sqlcmd, sizeof(sqlcmd)-, FORMAT_INSERT_INFORES,szdomain,pwrite->szSrcIP, pwrite->szAccount,username,password); char sqlselect[];
//memset(sqlselect,0,1024);
snprintf(sqlselect, sizeof(sqlselect)-, FORMAT_SELECT_INFORES,username,szdomain); int gs=mysql_query(conn,sqlselect);
if(gs){
printf("select error:\n");
} int num_rows=;
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!=)
{
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[] = {};
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,,SEEK_END);
int number=ftell(fp);
fseek(fp,,SEEK_SET); if(number==)
{
printf("Empty File...\n");
return OP_FAILED;
}
char* buf=(char*)malloc(sizeof(char)*number);
char tmp[];
while(!feof(fp))
{
fgets(tmp,,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();
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)+);
memset(pF.FIdBegin,,xmlStrlen(tmp)+);
memcpy(pF.FIdBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->children->next);
pF.FIdEnd = malloc(xmlStrlen(tmp)+);
memset(pF.FIdEnd,,xmlStrlen(tmp)+);
memcpy(pF.FIdEnd,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children);
pF.FPBegin=malloc(xmlStrlen(tmp)+);
memset(pF.FPBegin,,xmlStrlen(tmp)+);
memcpy(pF.FPBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children->next);
pF.FPEnd=malloc(xmlStrlen(tmp)+);
memset(pF.FPEnd,,xmlStrlen(tmp)+);
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[];
char szSrcIP[];
time_t nTime;
}Write_t; struct Info{
char username[];
char password[];
}pInfo; struct Feature{ xmlChar* FIdBegin;
xmlChar* FIdEnd;
xmlChar* FPBegin;
xmlChar* FPEnd;
}pF; static MYSQL conn[]; /* 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[] >= 'A') ? ((what[] & 0xdf) - 'A') + : (what[] - ''));
digit *= ;
digit += (what[] >= 'A' ? ((what[] & 0xdf) - 'A') + : (what[] - ''));
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+);
*dest++=ch;
src+=;
}
else
{
*dest++=*src;
}
src++;
}
*dest='\0';
return(dest-cp);
}
工作日志2014-06-10(实现C语言解析XML获得查询关键字)的更多相关文章
- 使用go语言解析xml
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml): <?xml ...
- 使用SharePoint Designer定制开发员工工作日志系统实例!
昨天已介绍了一篇<使用SharePoint Designer定制开发专家库系统实例!>,今天继续来介绍使用SharePoint Designer定制开发员工工作日志系统实例,主要功能包括填 ...
- 2014年10月底/终于/HTML5定稿……/技术从来不会成为发展的绝对瓶颈/反而商业成了无法逾越的鸿沟【转载+整理】
原文地址 本文内容 一.HTML5 诞生 二.HTML5 第一阶段: Web 增强与打破垄断 三.HTML5 第二阶段: 移动互联网 四.HTML5 这回真的来了 五.颠覆原生 App 六.还有什么会 ...
- 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)
0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...
- 2014 年10个最佳的PHP图像操作库
2014 年10个最佳的PHP图像操作库 Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Pytho ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
- 工作日志,error parsing query: unable to find time zone
工作日志,error parsing query: unable to find time zone 坑 Windows 系统使用influxdb数据库,在执行查询语句时提示 ERR: error p ...
- 转载_最值得阅读学习的10个C语言开源项目代码
"源代码面前,了无秘密",阅读优秀代码无疑是开发人员得以窥见软件堂奥而登堂入室的捷径.本文选取10个C语言优秀开源项目的代码作为范本,分别给予点评,免去东搜西罗之苦,点赞!那么问题 ...
- 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...
随机推荐
- Java 获取 文件md5校验码
讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个 ...
- J2EE在Web容器中启动报错:com.sun.jdi.InvocationException occurred invoking method.
我只是将Hibernate映射文件中的lazy属性有true改为lazy="false",即解决了上述问题.当然我之前也遇到一个问题是不调试时插入数据是不成功的,但是在Debug模 ...
- 树 -- AVL树
前言 通过之前对二叉查找树的讨论,我们知道在给定节点数目的情况下,二叉树的高度越低,查找所用时间也就越短. 在讨论红黑树的时候,我们说过红黑树并非完全"平衡"的二叉树,只是近似&q ...
- spring mybatis 整合问题Error parsing Mapper XML. Cause: java.lang.NullPointerException
14:30:40,872 DEBUG SqlSessionFactoryBean:431 - Parsed configuration file: 'class path resource [myba ...
- EntityFramework、Dapper vs 草根框架性能
EntityFramework.Dapper vs 草根框架性能 扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 Entit ...
- python encode和decode函数说明【转载】
python encode和decode函数说明 字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在p ...
- 9.java.lang.ClassCastException
java.lang.ClassCastException 数据类型转换异常 当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码. Object o ...
- 有关文件夹与文件的查找,删除等功能 在 os 模块中实现
最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在 os 模块中实现.使用时需先导入这个模 ...
- 偷懒的inline-block解决方法
最近这几天看了inline-block的用法,用它来代替浮动实现水平排列很不错,只是要解决一下浏览器兼容和间隙的问题.关于ie6,7的兼容问题 <inline-block 前世今生>(ht ...
- Android 学习之 开源项目PullToRefresh的使用
首先 下载 Android-PullToRefresh-master 下载地址 https://github.com/chrisbanes/Android-PullToRefresh 下载之后将其解 ...