现在我正在研究解析nmap-os-db文件的项目,该文件是NMap源代码的一部分。它包含与此类似的条目:
# Apple Time Capsule, firmware 7.3.1
# Apple Airport Extreme
# Linux 2.6.25.18-0.2-default #1 SMP 2008-10-21 16:30:26 +0200 x86_64 x86_64 x86_64 GNU/Linux
Fingerprint Apple AirPort Extreme WAP or Time Capsule NAS device (NetBSD)
Class Apple | embedded || storage-misc
Class Apple | embedded || WAP
CPE cpe:/h:apple:airport_extreme
SEQ(SP=CC-D8%GCD=1-6%ISR=D7-E1%TI=I%II=I%SS=S%TS=0)
OPS(O1=M5B4NW0NNT01SNN%O2=M5B4NW0NNT01SNN%O3=M5B4NW0NNT01%O4=M5B4NW0NNT01SNN%O5=M5B4NW0NNT01SNN%O6=M5B4NNT01SNN)
WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000%W6=8000)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=8000%O=M5B4NW0SNN%CC=N%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=Y%DF=N%T=3B-45%TG=40%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=8000%S=O%A=S+%F=AS%O=M5B4NW0NNT01SNN%RD=0%Q=)
T4(R=Y%DF=N%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=N%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=N%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=N%T=3B-45%TG=40%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)
U1(DF=N%T=FA-104%TG=FF%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=I%RUCK=G%RUD=G)
IE(DFI=N%T=FA-104%TG=FF%CD=S)
我的要求是在解析此文本文件后,其中大约有3000个条目与上面的内容非常相似。我需要能够进行汇总统计,就像打印出SEQ线内SP测试的等号右边的每个可能值以及它的相对百分比一样。我还需要能够在必要时调出整个条目,并可能将它们分组到类似的产品中,例如Apple与Apple,Microsoft与Microsoft等。
下面我有我所做的结构的代码,让我完成摘要和个人入口要求。我解析信息没有问题,只想知道是否有更好的方法来跟踪它们。
//Holds a test value
typedef struct
{
char *name;
int numberOccurences;
void *nextValue;
} Value;
//Holds all the possible values for a given test
typedef struct
{
char *name;
Value *value_head;
int totalOccurences;
void *nextTest;
} Test;
//Create probe type to hold the all the possible tests for a given probe
typedef struct
{
char *name;
Test *test_head;
void *nextProbe;
} Probe;
typedef struct
{
char *classLine;
char *manufacturer;
char *product;
void *nextClass;
} PrintClass;
//Create type to hold all the gathered fingerprints
typedef struct
{
char *name;
//char **class;
//int numClass;
PrintClass *class_head;
char **cpe;
int numCPE;
char **probes;
int numProbes;
void *nextPrint;
} Fingerprint;
typedef struct
{
char *name;
void *nextProduct;
} Product;
typedef struct
{
char *manufacturer;
Product *product_head;
void *nextGroup;
} PrintGroup;
我的主要问题是我担心我所拥有的东西可能比它需要的更麻烦,我可能过于专注于使其面向对象。我只是想知道是否有人有更聪明的方式,或者我可能能够改进或压缩它的区域可能是一种类型。我希望我明白我的要求。
如果从代码中不清楚,我有指纹的结构,跟踪文件中的所有单个条目,我有探针结构和附加到它的所有结构收集统计信息每个探针(SEQ,OPS等)的测试(SP,GCD,ISR等)和测试值。最后,我有印刷小组来跟踪印刷系列,例如Apple,Microsoft等,尽管这部分仍在进行中。