|
  
- UID
- 244
- 帖子
- 13
- 精华
- 0
- 积分
- 47
- 威望
- 20
- 金钱
- 0
- 贡献
- 0
- 阅读权限
- 100
- 在线时间
- 2 小时
- 注册时间
- 2008-9-3
- 最后登录
- 2008-9-9
|
再回一下!后续!快速的重复的MAC找出来!
找朋友研究了一个,上次说到生成了一个MAC_TABLE的一个文件里面存的是ARP表对吧,如果有重复的,怎么快速的把重复的找出来呢,让同事用C做了个小程序,在这里谢谢同事毛毛了!因为这个C是他做的,哈哈-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char* mac_addr[1000];
-
- read_file(char* filename)
- {
- //fstream f_dir;
- FILE *file_stream = NULL;
- file_stream = fopen(filename, "r");
- if(file_stream == NULL)
- {
- printf("can not open file ! \n");
- return;
- }
- //f_dir.open(filename, ios::in |ios::out | ios::app);
- int line_num=0;
- int i=0;
- int j=0;
- while(feof(file_stream) == 0)
- {
- char * mac = malloc(256);
- //f_dir.getline(charword,256);//读出文件中的一行
- fgets(mac,255,file_stream);
- //printf("line:%s\n",mac);
- mac_addr[line_num]=mac;
- line_num++;
- }
- line_num--;
- //printf("line num : %d \n",line_num);
- fclose(file_stream);
- for(i;i<line_num;i++)
- {
- for(j=i+1;j<line_num;j++)
- {
- char mac_perline_1[18];
- char mac_perline_2[18];
- char * line_1 = mac_addr[i];
- char * line_2 = mac_addr[j];
- int position = 0;
- int count = 0;
- //printf("line_1:%s\n",line_1);
- //printf("line_2:%s\n",line_2);
- while(line_1[position]!='\n')
- {
- //printf("position:%d\n",position);
- if(line_1[position]==' ')
- {
- count++;
- if(count == 3)
- {
- //printf("befor copy \n");
- memcpy(mac_perline_1,line_1+position+1,17);
- //printf("bbbbb\n");
- mac_perline_1[17]='\0';
- //printf("mac addr1 %s\n",mac_perline_1);
- break;
- }
- }
- position++;
- }
- position = 0;
- count = 0;
- while(line_2[position]!='\n')
- {
- if(line_2[position]==' ')
- {
- count++;
- if(count == 3)
- {
- memcpy(mac_perline_2,line_2+position+1,17);
- mac_perline_2[17]='\0';
- //printf("mac addr2 %s\n",mac_perline_2);
- break;
- }
- }
- position++;
- }
- if(strcmp(mac_perline_2,mac_perline_1)==0)
- {
- printf("same MAC_ADDR find in line %d and %d \n",i,j);
- printf(" %s %s \n",mac_addr[i],mac_addr[j]);
- }
- }
- }
- for(i=0;i<line_num+1;i++)
- {
- free(mac_addr[i]);
- }
-
- }
- main(int argc, char *argv[])
- {
- int err, nargc, i;
- if(argc<2)
- {
- printf("please input the filename\n");
- return -1;
- }
-
-
- read_file(argv[1]);
-
- return 0;
-
-
- }
复制代码 这个是原码,
下面说用法,
在附件里有一个叫file.c的文件,还有一个叫Makefile的文件,还有一个用来测试的mac_table,到时候把file.c 和Makefile放到同一个目录下,执行会生成一个mac的执行文件,用法就是在当前目录下执行MAC表文件就行了,比如在当前的目录下生成mac文件了,也有一个ARP表文件mac_table 执行就把重复MAC的那一行ARP表列出来了,能快速的知道那台电脑在发ARP广播,快速的找到中毒的电脑!!!
在此谢谢同事毛毛!!!
[ 本帖最后由 tang 于 2008-9-5 17:28 编辑 ] |
附件: 您所在的用户组无法下载或查看附件
|