OBD数据分析(一)

这篇博客介绍了如何使用C语言对OBD采集的数据进行处理,包括删除Timestamp、按ID分文件、排序去重等步骤。作者分享了代码实现过程,并展示了处理后的文件内容。
摘要由CSDN通过智能技术生成

您好,请多指教

这是我第一次写博客,在文案和代码方面都还有很多的不足,请多包涵,可以的话,请多指教~~

本次主要是对OBD采集并保存到txt文件中的数据进行分析(C语言),比如在DoS攻击下采集的数据,数据大概是下面这样子的:
OBD采集的数据的一部分
需要做的是:

  1. 将不同的数据导入到不同的文件里,并以如id00000000.txt里面装的就是id为0000000的不同数据。
  2. 将每个txt文件中的数据按从小到大排序并删除内容重复的数据,以便于进行数据分析。

我们现在开始啦~

小准备

将数据进行分片输入

  1. 如以下数据:
    一条数据的具体内容
    数据用结构体进行封装,如下:
typedef struct
{
   
	//基本是按一个不包含空格的字符串为一段的 
	char Timestamp[20];//第一片数据“Timestamp” 
	char timestamp[20];//第二片数据为Timestamp的内容 
	char ID[5];//第三片数据为“ID:” 
	char id[5];//第四片数据为ID的前一段内容,四个字符 
	char id2[5];//第五片数据为ID的后一段内容,三个字符 
	char DLC[5];//第六片数据为“DLC:” 
	char dlc[15];//第七片数据为DLC的内容 
	char Data[50];//第八片数据为Data的具体内容 
}data;
  1. 写代码前的一些基本的定义
	data table;//定义结构体 
	data tmp;//定义中间结构体,在进行数据排序时用到 
	data tablepx[9000];//排序时用的结构体 
	char f[] = {
   "ID"};//数据是两个两个一小段的,所以用gets()输入 
	char fd[] = {
   "DLC"};
	char *p; //找到ID时用到的指针 
	char *pd; //找到DLC时用到的指针 
	char buf[999];//定义缓冲区,用于暂时存储数据 
	FILE *fp;
	FILE *fout;
	int table_len = 0, i=0, j;	
	FILE *fp1;//定义中间文件 
	
	char a[] = "F:\\id1.txt";//DoS_attack_dataset整理后格式标准的数据 
	char b[] = "F:\\1.txt";//b存储删掉了"Timestamp"数据 
	char e[] = "0153";//要挑出来放在另外一个txt文件中的id的前半段 
	char c[] = "F:\\id0153.txt";//因为id的后半段几乎是000,所以先暂定全部后部分为000 
	char d[] = "F:\\id0153000.txt";//排序并且删除了重复的数据 
	

删除Timestamp及其后的内容输入到一个txt文件中

在排序过程中,因为Data的内容中间包含了空格,所以用到了strstr方法来找到其首位置

在之前的尝试中,将table定义为了字符串,所以在下面代码的运行过程中出现了在读数据方面的错误,现已经通过加入组件文件来储存数据解决了这个问题


	fp = fopen(a,"r+");//打开文件 
	if(fp == NULL)
	{
   
		printf("read error!\n");
		return 0;
	}
	while(fgets(buf, 100, fp) != NULL)
	{
   
		sscanf(buf,"%s%s%s%s%s%s%s",&table.Timestamp,&table.timestamp, &table.ID,&table.id,&table.id2,&table.DLC,&table.dlc);
		p=strstr(buf,f);//找到“ID”所在的位置 
		p=p+4;//找到id内容开始的位置 
		i++;//行数 
		printf("%d\n",i);
		fp1 = fopen(b, "a+");
		if (fp1==0) 
		{
    
			printf("can't open file\n");
			return 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值