Stringzauberei



  • Hiho,
    also ich sitzt jetzt vor nem Problem:
    Hab immer noch diesen String wo unter anderem IPs drin vorkommen!
    So wenn ich jetzt genua wüsste das die IPs immer gleich lang sind, ok kein problem, hab da schon ne lustige funktion geschrieben gehabt, doch dann viel mir ein, ips könne unterschiedlich lang sein...was nun?

    Ein String sieht so aus
    **
    10/09/2002 | 13:38:20 | 163.183.200.46 | (E) 13:40:07 drop 163.183.200.46 >EL90X1 snmptrap product VPN-1 & FireWall-1 src 163.183.200.106 dst 163.183.200.46 proto icmp icmp-type 8 icmp-code 0 rule 1**

    Nun ja ich hantiere schon die ganze Zeit mit FIND / MID /LEFT / RIGHT umher, aber vieleicht hat ja jemand schon ne gute idee...

    Gesucht wir die IP im der dritten spalte, und die ips nach "src" und "dst"

    Leider weiss ich nciht ob nach der "dst" ip immer proto steht....

    need help (werd mal eben frische luft schnappen ) 🙂



  • Also ich würds so machen

    Für IP zwischen src und dst:

    st = read.Find("src", 0) + 3;
    dst = read.Find("dst", 0) -1;
    read.Mid(st, dst-st);
    

    Und für die IP in der 3-ten Spalte:

    st = read.ReverseFind(" |");
    CString dummy = read.Mid(0, st);
    dst = dummy.ReverseFind("| ");
    dummy = dummy.Mid(dst+2, st-dst+2);
    

    Kann mich mit den Zahlen da auch irren - müsste man ausprobieren.



  • Hi!
    Eine kleine Anregung:
    Bei der 1. IP suchst du nach "|" und schneidest ´sie dementsprechend heraus (ggf trimmen);
    Bei der 2. IP suchst du nach "src" und nach "dst";
    Bei der 3. IP nach "dst" suchen und nach " "(blanks), das nach "dst" steht



  • So für alle die interesse haben, die erste IP Filter ich folgendermasse:

    int end,kill,ipl,dul;
    CString dummy,tmp;
    dummy = read;
    dummy.Delete(0,25);
    end = dummy.Find("|");
    dummy = dummy.Mid(0,end);
    ipl = ip.GetLength();
    dul = dummy.GetLength();
    if(ipl != dul)
    {
        int x;
        x = dul-ipl;
            kill = dummy.Find(" ",0);
        dummy.Delete(kill,x);
    }
    tmp = dummy;
    

    So nun ist egal wie lang die IP ist, ich bekomme sie immer richtig raus 🙂
    weiter gehts...



  • So die anderen beiden IPs Filter ich so:

    int st,ed,st1,ed1;
    CString src,dst,attack;
    st = read.Find("src", 0) +4;
    ed = read.Find("dst", 0) -1;
    st1 = read.Find("dst",0) +4;
    ed1 = read.Find(" ",st1);
    src = read.Mid(st,ed-st);
    dst = read.Mid(st1,ed1-st1);´
    

    So bekomme ich das was ich brauche ...

    weiter gehts...


Log in to reply