Traffic Counter



  • Danke für den Hinweis!habe versucht das Beispiel zu kompilieren, nur leider gehts nicht. Benutze Dev-C++ und habe ein neues c projekt gestartet, die wpcap include in das Dev-C++ include kopiert und die entsprechende lib (libwpcap.a) dem Projekt hinzugefügt. Leider bekomme ich folgenden Fehler:

    Compiler: Default compiler
    Building Makefile: "C:\Dev-Cpp\counter_test\Makefile.win"
    Finding dependencies for file: C:\Dev-Cpp\counter_test\..\WpdPack\Lib\main.c
    Führt make... aus
    make.exe -f "C:\Dev-Cpp\counter_test\Makefile.win" all
    gcc.exe -D__DEBUG__ -c ../WpdPack/Lib/main.c -o ../WpdPack/Lib/main.obj -I"C:/Dev-Cpp/include" -I"C:/Dev-Cpp/include/wcap" -fexpensive-optimizations -O3 -g3

    In file included from C:/Dev-Cpp/include/wcap/pcap-stdinc.h:52,
    from C:/Dev-Cpp/include/wcap/pcap.h:41,
    from ../WpdPack/Lib/main.c:36:
    C:/Dev-Cpp/include/wcap/bittypes.h:36: error: redefinition of typedef 'int8_t'
    C:/Dev-Cpp/include/stdint.h:27: error: previous declaration of 'int8_t' was here
    C:/Dev-Cpp/include/wcap/bittypes.h:52: error: redefinition of typedef 'int16_t'
    C:/Dev-Cpp/include/stdint.h:29: error: previous declaration of 'int16_t' was here
    C:/Dev-Cpp/include/wcap/bittypes.h:71: error: redefinition of typedef 'int32_t'
    C:/Dev-Cpp/include/stdint.h:31: error: previous declaration of 'int32_t' was here

    ../WpdPack/Lib/main.c: In function main': ../WpdPack/Lib/main.c:59: error:PCAP_OPENFLAG_PROMISCUOUS' undeclared (first use in this function)
    ../WpdPack/Lib/main.c:59: error: (Each undeclared identifier is reported only once
    ../WpdPack/Lib/main.c:59: error: for each function it appears in.)
    ../WpdPack/Lib/main.c:59: warning: assignment makes pointer from integer without a cast

    ../WpdPack/Lib/main.c:44: warning: return type of 'main' is not `int'

    make.exe: *** [../WpdPack/Lib/main.obj] Error 1

    Ausführung beendet

    Kann mir eventuell wer weiterhelfen?

    Danke & Gruß



  • Wie wäre es mit der GetTcpStatistics/GetUdpStatistics Funktion der WinApi, da kannst du doch ermitteln wie viele Segmente gesendet/empfangen wurde und noch vieles mehr. In der Doku ist sogar ein Quelltextfragment vorhanden.

    cya,
    0xDEADBEEF



  • fub0815 schrieb:

    habe versucht das Beispiel zu kompilieren, nur leider gehts nicht.

    Mir ist gerade aufgefallen, dass der Beispielcode etwas fehlerhaft bzw. veraltet ist:

    fub0815 schrieb:

    ../WpdPack/Lib/main.c: In function main': ../WpdPack/Lib/main.c:59: error:PCAP_OPENFLAG_PROMISCUOUS' undeclared (first use in this function)
    ../WpdPack/Lib/main.c:59: error: (Each undeclared identifier is reported only once
    ../WpdPack/Lib/main.c:59: error: for each function it appears in.)

    Um PCAP_OPENFLAG_PROMISCUOUS verwenden zu können, musst du <remote-ext.h> einbinden.

    fub0815 schrieb:

    ../WpdPack/Lib/main.c:44: warning: return type of 'main' is not `int'

    Es sollte natürlich "int main(int argc, char **argv)" heißen.

    fub0815 schrieb:

    C:/Dev-Cpp/include/wcap/bittypes.h:36: error: redefinition of typedef 'int8_t'
    C:/Dev-Cpp/include/stdint.h:27: error: previous declaration of 'int8_t' was here

    Diese Fehler kann ich leider nicht nachvollziehen, da ich Visual Studio verwende, und es dort nach den genannten Änderungen problemlos kompiliert.

    Versuch im Zweifelsfall auch mal, eins von den direkt mitgelieferten Beispielen (z.B. basic_dump) zu kompilieren. Die sollten eigentlich auf Anhieb funktionieren.



  • Um PCAP_OPENFLAG_PROMISCUOUS verwenden zu können, musst du <remote-ext.h> einbinden.

    das bringt leider wieder neu Fehler hervor...
    Compiler: Default compiler
    Building Makefile: "C:\Dev-Cpp\counter_test\Makefile.win"
    Finding dependencies for file: C:\Dev-Cpp\counter_test\..\WpdPack\Lib\main.c
    Führt make... aus
    make.exe -f "C:\Dev-Cpp\counter_test\Makefile.win" all
    gcc.exe -D__DEBUG__ -c ../WpdPack/Lib/main.c -o ../WpdPack/Lib/main.obj -I"C:/Dev-Cpp/include" -I"C:/Dev-Cpp/include/wcap" -fexpensive-optimizations -O3 -g3

    In file included from ../WpdPack/Lib/main.c:35:
    C:/Dev-Cpp/include/wcap/remote-ext.h:414: error: syntax error before '*' token
    C:/Dev-Cpp/include/wcap/remote-ext.h:414: warning: data definition has no type or storage class

    C:/Dev-Cpp/include/wcap/remote-ext.h:417: error: syntax error before "pcap_if_t"
    C:/Dev-Cpp/include/wcap/remote-ext.h:418: error: syntax error before '*' token
    C:/Dev-Cpp/include/wcap/remote-ext.h:428: error: syntax error before "pcap_remoteact_accept"

    C:/Dev-Cpp/include/wcap/remote-ext.h:428: warning: data definition has no type or storage class

    In file included from C:/Dev-Cpp/include/wcap/pcap-stdinc.h:52,
    from C:/Dev-Cpp/include/wcap/pcap.h:41,
    from ../WpdPack/Lib/main.c:37:
    C:/Dev-Cpp/include/wcap/bittypes.h:36: error: redefinition of typedef 'int8_t'
    C:/Dev-Cpp/include/stdint.h:27: error: previous declaration of 'int8_t' was here
    C:/Dev-Cpp/include/wcap/bittypes.h:52: error: redefinition of typedef 'int16_t'
    C:/Dev-Cpp/include/stdint.h:29: error: previous declaration of 'int16_t' was here
    C:/Dev-Cpp/include/wcap/bittypes.h:71: error: redefinition of typedef 'int32_t'
    C:/Dev-Cpp/include/stdint.h:31: error: previous declaration of 'int32_t' was here

    ../WpdPack/Lib/main.c: In function `main':
    ../WpdPack/Lib/main.c:60: warning: assignment from incompatible pointer type

    make.exe: *** [../WpdPack/Lib/main.obj] Error 1

    Ausführung beendet

    @0xDEADBEEF
    Habe GetTcpStatistics mal getestet und bekomme folgende ausgabe:
    dwRtoAlgorithm: 4
    dwRtoMin: 300
    dwRtoMax: 120000
    dwMaxConn: -1
    dwActiveOpens: 8482
    dwPassiveOpens: 939
    dwAttemptFails: 517
    dwEstabResets: 543
    dwCurrEstab: 24
    dwInSegs: 1060304
    dwOutSegs: 981843
    dwRetransSegs: 806
    dwInErrs: 3
    dwOutRsts: 886
    dwNumConns: 40

    Wo sehe ich da den Traffic?



  • @thommy88
    jetzt gehts!
    Habe vor

    #include <pcap.h>
    
    #define HAVE_REMOTE
    

    gesetzt und jetzt kann ich es kompilieren und ausführen!
    Danke!
    Nur möchte das prog ja den adapter wissen... keine Ahnung was ich da eingeben soll. und "WinDump -D" funktioniert nicht, liefert

    Unable to open adapter Error opening adapter: Das System kann das angegebene Gerõt nicht finden. (20).



  • Habe auch das Problem gelöst, in dem ich die Adapter auswahl aus dem Beispiel "basic_dump" eingebaut habe!
    kompiliert und geht auch. Nur wird mir null traffic angezeigt obwohl definitiv was passiert ist!
    So sieht die Ausgabe in der Konsole aus:

    C:\Dev-Cpp\counter_test>counter_test
    1. \Device\NPF_GenericDialupAdapter (Adapter for generic dialup and VPN capture)
    2. \Device\NPF_{53C2D91A-EAA7-4595-89AF-757CF33E6AC9} (Intel(R) PRO/100 VE Network Connection (Microsoft's Packet Scheduler) )
    3. \Device\NPF_{EB9806A3-E4DC-4E2D-A640-E4DBE5E4FFCC} (Intel(R) PRO/Wireless 3945ABG Network Connection (Microsoft's Packet Scheduler) )
    Enter the interface number (1-3):3
    TCP traffic summary:
    16:11:00 BPS=0 PPS=0
    16:11:01 BPS=0 PPS=0
    16:11:02 BPS=0 PPS=0
    16:11:03 BPS=0 PPS=0
    16:11:04 BPS=0 PPS=0
    16:11:05 BPS=0 PPS=0
    16:11:06 BPS=0 PPS=0
    16:11:07 BPS=0 PPS=0
    16:11:08 BPS=0 PPS=0
    16:11:09 BPS=0 PPS=0
    16:11:10 BPS=0 PPS=0
    16:11:11 BPS=0 PPS=0
    16:11:12 BPS=0 PPS=0
    16:11:13 BPS=0 PPS=0
    16:11:14 BPS=0 PPS=0
    16:11:15 BPS=0 PPS=0
    16:11:16 BPS=0 PPS=0
    16:11:17 BPS=0 PPS=0
    16:11:18 BPS=0 PPS=0
    16:11:19 BPS=0 PPS=0
    16:11:20 BPS=0 PPS=0

    Vermutungen warum nichts angezeigt wird?
    Danke & Gruß



  • fub0815 schrieb:

    Nur wird mir null traffic angezeigt obwohl definitiv was passiert ist!

    hmm... sicher dass du den richtigen adapter genommen hast?
    Und wenn ja, ich weiß nicht genau, ob der Promiscuous Mode mit WLAN funktioniert (das du ja offensichtlich hast). Versuchs evtl. auch mal ohne dieses Flag.

    Um ganz sicher zu gehen, kannst du's noch mit nem anderen Programm testen, das WinPCap verwendet (z.B. Wireshark).



  • Es war wie du vermutet hattest. Es lag an dem Promiscuous Mode Flag, ohne das funktionierts! Ich denke da werd ich mir dann was draus Stricken können...

    16:57:56 BPS=575 PPS=0
    16:57:57 BPS=1167 PPS=1
    16:57:58 BPS=239251 PPS=76
    16:57:59 BPS=249200 PPS=67
    16:58:00 BPS=256222 PPS=79
    16:58:01 BPS=191977 PPS=66
    16:58:02 BPS=100573 PPS=44
    16:58:03 BPS=0 PPS=0

    Wenn ich mir den Quelltext anschaue sind die BPS schon Byte, richtig?



  • eine frage bezüglich des Beispiels hätte ich noch, bezieht sich auf folgenden Bereich:

    ......
      /* Start the main loop */
        pcap_loop(fp, 0, dispatcher_handler, (PUCHAR)&st_ts);
    
        pcap_close(fp);
        return;
    }
    
    void dispatcher_handler(u_char *state, const struct pcap_pkthdr *header, const u_char *pkt_data)
    {
        struct timeval *old_ts = (struct timeval *)state;
        u_int delay;
    .....
    

    Hier

    pcap_loop(fp, 0, [b]dispatcher_handler[/b], (PUCHAR)&st_ts);
    

    wird ja offensichtlich die Funktion dispatcher_handler aufgefufen, nur ohne argumente! wie geht das denn? die funktion ist doch so definiert:

    void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *)
    

    möchte nämlich diese Geschichte in mein Projekt einbauen, nur meckert der Compiler an der Stelle mit dem Funktionsaufruf.

    argument of type `void (AuslastungFrm::)(u_char*, const pcap_pkthdr*, const u_char*)' does not match `void ()(u_char, const pcap_pkthdr*, const u_char*)'

    Danke & Gruß



  • fub0815 schrieb:

    Es war wie du vermutet hattest. Es lag an dem Promiscuous Mode Flag, ohne das funktionierts!

    Gut zu wissen, ich hab nämlich selbst ein Programm geschrieben, das WinPCap verwendet, nur hab ich leider kein WLAN zum testen.

    fub0815 schrieb:

    Wenn ich mir den Quelltext anschaue sind die BPS schon Byte, richtig?

    Steht ziemlich eindeutig im Quelltext:

    /* Get the number of [b]Bits per second[/b] */
    Bps.QuadPart=(((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay));
    

    fub0815 schrieb:

    Hier

    pcap_loop(fp, 0, [b]dispatcher_handler[/b], (PUCHAR)&st_ts);
    

    wird ja offensichtlich die Funktion dispatcher_handler aufgefufen, nur ohne argumente! wie geht das denn? die funktion ist doch so definiert:

    void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *)
    

    pcap_loop ruft den dispatcher_handler in Intervallen auf. Das Intervall ist im Statistikmodus der read_timeout, der bei pcap_open angegeben ist, also hier 1000ms, ansonsten wird dispatcher_handler für jedes Paket einmal aufgerufen.
    Die Argumente von dispatcher_handler werden durch WinPCap ausgefüllt.

    Schau dir ansonsten auch mal das WinPCap Tutorial an, da sind die meisten Funktionen recht gut erklärt.

    fub0815 schrieb:

    möchte nämlich diese Geschichte in mein Projekt einbauen, nur meckert der Compiler an der Stelle mit dem Funktionsaufruf.

    argument of type `void (AuslastungFrm::)(u_char*, const pcap_pkthdr*, const u_char*)' does not match `void ()(u_char, const pcap_pkthdr*, const u_char*)'

    Es sieht so aus als ob dein handler in ner klasse ist.
    Wenn ja, dann solltest du den handler static machen, und über den "user"-Parameter bei pcap_loop den Zeiger auf deine Klasse übergeben.


Anmelden zum Antworten