这里的目的是解析输入文件,如果文件在任何行中包含时间,我只需要从该行中提取时间信息并写入输出文件,其余行保持原样。我正在使用 fgets 获取行通过 line 和 sscanf 查看所需的模式,但这会给出 seg 错误。
这是我的代码:
#include<stdio.h>
int main()
{
FILE *fIn,*fOut;
char buffer[100];
int Hr=0,Min=0,Sec=0,MSec=0;
fIn = fopen("dat.txt","r+");
fOut= fopen("kel.txt","w+");
if (fIn == NULL) {
printf("Can't open input file in.list!\n");
exit(1);
}
while(!feof(fIn))
{
fgets(buffer,100,fIn);
#if 1
if(sscanf(buffer,"%u:%u:%u.%u",Hr,Min,Sec,MSec) ==4)
{
fprintf(fOut,"%02u:%02u:%02u.%6u",Hr,Min,Sec,MSec);
printf("hello");
continue;
}
#endif
fputs(buffer,fOut);
}
fclose(fIn);
fclose(fOut);
}
这是 dat.txt 的几行:
17:48:22.618782 IP n003-000-000-000.static.ge.com > n003-000-000-000.static.ge.com: ICMP echo request, id 2105, seq 4, length 64
0x0000: b870 f414 033b b870 f414 0343 0800 4500
0x0010: 0054 0000 4000 4001 2e9c 0303 0305 0303
0x0020: 0303 0800 e69d 0839 0004 43bc 4a52 8d13
0x0030: 0300 0809 0a0b 0c0d 0e0f 1011 1213 1415
0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
0x0060: 3637
17:48:22.618817 IP n003-000-000-000.static.ge.com > n003-000-000-000.static.ge.com: ICMP echo reply, id 2105, seq 4, length 64
0x0000: b870 f414 0343 b870 f414 033b 0800 4500
0x0010: 0054 7821 0000 4001 f67a 0303 0303 0303
0x0020: 0305 0000 ee9d 0839 0004 43bc 4a52 8d13
0x0030: 0300 0809 0a0b 0c0d 0e0f 1011 1213 1415
0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
0x0060: 3637
实际上,我正处于尝试将上述数据包写入 text2pcap 可理解形式的阶段。我应该使用 c 代码 [不会使用 od 和 hexdump]。