1

現在、NMap ソース コードの一部である nmap-os-db ファイルを解析するプロジェクトに取り組んでいます。次のようなエントリが含まれています。

# 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;

私の主な問題は、私が持っているものが必要以上に扱いにくく、オブジェクト指向にすることに集中しすぎているのではないかと心配していることです。誰かがそれを行うためのよりインテリジェントな方法を持っているか、またはそれを改善または1つのタイプに凝縮できる可能性のある領域があるかどうかを知りたかっただけです. 私が求めていることが明確であることを願っています。

コードから明確でない場合のために、ファイルからすべての個々のエントリを追跡するフィンガープリントの構造体と、プローブ構造体とそれに接続されたすべての構造体が各プローブの統計を収集します( SEQ、OPSなど)のテスト(SP、GCD、ISRなど)、およびテスト値。最後に、Apple、Microsoft などの印刷ファミリーを追跡するための印刷グループがありますが、その部分はまだ進行中です。

4

0 に答える 0