Hackerboard WikiHaboBlog

[HaBo]

 
Network · LAN, WAN, Firewalls Alle Fragen rund um das große, kleine Internet finden hier eine Antwort. LANs, WANs, Router, Switches, Bridges, Verkabelung...

Ein paar dumme Fragen zum Thema Sniffing :S

Diskussion: Ein paar dumme Fragen zum Thema Sniffing :S im Forum Network · LAN, WAN, Firewalls, in der Kategorie Web, Network & Multimedia Palace; Hallo zusammen ich habe jetzt mit libpcap einen kleinen Sniffer geschrieben (der Code funktioniert nicht richtig :S (gibt auch ne ...

Antwort
Alt 05.12.09, 14:40   #1 (permalink)
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Standard Ein paar dumme Fragen zum Thema Sniffing :S


Hallo zusammen
ich habe jetzt mit libpcap einen kleinen Sniffer geschrieben (der Code funktioniert nicht richtig :S (gibt auch ne Warnmeldung aus)):

PHP-Code:
int main(void) {
    
char *dev;
    
char err[PCAP_ERRBUF_SIZE];
    
struct pcap_pkthdr head;
    
u_char *pack;
    
pcap_t *handle;
    
int i;
    
int j;

    if((
dev pcap_lookupdev(err)) == NULL) {
         
error("pcap_lookupdev()");
    }
    if((
handle pcap_open_live(devBUFSIZ110000err)) == NULL) {
         
error("pcap_open_live()");
    }
    for(
010i++) {
        
pack pcap_next(handle,&head);
        
printf("GOT A PACKET [SIZE: %i]",head.len);
        
dump(pack,head.len);
    }
    
pcap_close(handle);
    exit(
EXIT_SUCCESS);

und hier noch einmal die dumo funktion die ich benutze:
PHP-Code:
void dump(const char *packint packsize) {
    
int i0;

    for(
0packsizei++) {
       for(
0<= 16 j++) {
           
printf("%x",pack[i*16+j]);
       }
       for(
0<= 16 j++) {
           if((
pack[i*16+j] >= 33) && (pack[i*16+j] <= 126)) {
               
printf("%c",pack[i*16 j]);
           }
           else {
               
printf(".");
           }
       }
       
printf("\n");
    }

so meine Fragen sind eigentich eher dumme fragen weil w-lan nicht das gleiche wie ethernet ist -.-
also:
wenn ich jetzt den sniffer starte passiert nichts.
ich denke das liegt daran dass ich ethernet Packets sniffen möchte obwohl mein Netbook per W_Lan angeschlossen ist lige ich da richtig wenn ich denke dass das unter anderem desshalb nicht funktioniert?
meine zweite Frage ist was die warnung versucht mir zu sagen:
Code:
test.c: In Funktion »main«:
test.c:27: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp
<--- so ne Warnung hatte ich noch nie :S (wtf is ein Qualifizierer :S)

so das wars auch schon...
Hoffe auf Hilfe auch wenns dumme Fragen sind
mfg st4cky
st4cky ist offline   Mit Zitat antworten
Alt 06.12.09, 14:26   #2 (permalink)
Moderator
 
Benutzerbild von sTEk
 
Registriert seit: 02.10.01
sTEk Leistung: Pentium IIIsTEk Leistung: Pentium IIIsTEk Leistung: Pentium IIIsTEk Leistung: Pentium III
sTEk eine Nachricht über ICQ schicken
Likes: 126
Standard

Also erstmal was Grundsätzliches. Ich würde den Code so aufbauen:

Code:
    if((dev = pcap_lookupdev(err)) == NULL)
         error("pcap_lookupdev()"); 
    else {
     
       if((handle = pcap_open_live(dev, BUFSIZ, 1, 10000, err)) == NULL) 
            error("pcap_open_live()"); 
       else {
          for(i = 0; i < 10; i++) { 
              pack = pcap_next(handle,&head); 
              printf("GOT A PACKET [SIZE: %i]",head.len); 
              dump(pack,head.len);
          }
          pcap_close(handle);
       }
    }
Warum? Wenn kein Device gefunden werden kann geht er in Deinem Code trotzdem alles andere durch. Gleiches gilt fürs Handle.

Was sagt denn Dein Debugger?


Die Fehlermeldung besagt, dass Du z.B. eine direkte Zuweisung auf einen generischen Zeiger machst - also z.B. einen Zeiger auf einen char direkt mit einem char belegst.

Gib mal die Zeile, bei der der Fehler kommt - leider hat die von Dir gepostete main ja nicht mal 27 Zeilen.

Nachtrag: Ach so...für die genutzte Bibliothek ist es egal, was für ein Netzwerkadapter es ist - fürs System ist es einfach ein Ethernetadapter, das physikalisches Übertragungsmedium ist absolut uninteressant.
__________________


Steigerung des Luxus: eigenes Auto, eigene Villa, eigene Meinung.

Wieslaw Brudzinski

Würden die Menschen verstehen, wie unser Geldsystem funktioniert, hätten wir eine Revolution – und zwar schon morgen früh.
Henry Ford

Ich mag den Himmel blau - was will ich da mit ner Cloud?!

Geändert von sTEk (06.12.09 um 14:35 Uhr)
sTEk ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 06.12.09, 15:53   #3 (permalink)
AngelDelivery
Guest
 
Likes:
Standard

Zitat:
Zitat von sTEk Beitrag anzeigen

Nachtrag: Ach so...für die genutzte Bibliothek ist es egal, was für ein Netzwerkadapter es ist - fürs System ist es einfach ein Ethernetadapter, das physikalisches Übertragungsmedium ist absolut uninteressant.
Das Betriebssystem wäre hier schon interessant, im Bereich von WLAN monitor mode.
Unter Windows habe ich an einem Notebook hier auch noch weitere merkwürdige Sachen festgestellt: Über meinen WLAN Treiber hier, capture ich z.B. keine Pakete über den prom. mode. Wenn ich nicht über prom. mode sniffe, bekomme ich merkwürdiger weise die Menge der Pakete aus dem prom. mode.
  Mit Zitat antworten
Alt 06.12.09, 16:49   #4 (permalink)
Themenstarter
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Thumbs up

PHP-Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "st4ckys_header.h"

#include <pcap.h>

//////////////////////////////////////////////////////

int main(void) {
    
char *dev;
    
char err[PCAP_ERRBUF_SIZE];
    
struct pcap_pkthdr head;
    
u_char *pack;
    
pcap_t *handle;
    
int i;
    
int j;

    if((
dev pcap_lookupdev(err)) == NULL) {
         
error("pcap_lookupdev()");
    }
    if((
handle pcap_open_live(devBUFSIZ110000err)) == NULL) {
         
error("pcap_open_live()");
    }
    for(
010i++) {
        
pack pcap_next(handle,&head);
        
printf("GOT A PACKET [SIZE: %i]",head.len);
        
dump(pack,head.len);
    }
    
pcap_close(handle);
    exit(
EXIT_SUCCESS);

<----- der sourcecode komplett sry ich dachte ich hätte alles gepostet

Also die Warnung heißt dass ich dem Zeiger nicht die Adresse von einem Wert übergeben habe sondern den Wert selber?

Warum muss ich den da immer ein else{} machen das Programm wird doch beendet wenn ein Fehler auftaucht oder?

Und es ist vollkommen egal ob ich per W-Lan, Ethernet, Token Ring oder was auch immer an das Netzwerk angebunden es wird einfach alles eingefangen?

Vielen Dank für die Hilfe !!!


PS: hier nochmal der Header:
HTML-Code:
#include <stdio.h>

//////////////////////////////////////////////////////////////////////////////////
//prints a string on stderr and klls the programm:
void error(const char *str) {
    fprintf(stderr,"%s",str);
    exit(EXIT_FAILURE);
}

/////////////////////////////////////////////////////////////////////////////////
//dumps receved datagramms:
void dump(const char *pack, int packsize) {
    int i, j = 0;

    for(i = 0; i < packsize; i++) {
       for(j = 0; j <= 16 ; j++) {
           printf("%x",pack[i*16+j]);
       }
       for(j = 0; j <= 16 ; j++) {
           if((pack[i*16+j] >= 33) && (pack[i*16+j] <= 126)) {
               printf("%c",pack[i*16 + j]);
           }
           else {
               printf(".");
           }
       }
       printf("\n");
    }
}

/////////////////////////////////////////////////////////////////////////////////////
btw: was ist ein Karma???
st4cky ist offline   Mit Zitat antworten
Alt 06.12.09, 17:11   #5 (permalink)
AngelDelivery
Guest
 
Likes:
Standard

probierst Du mal pcap_next_ex anstatt pcap_next ?

die Singatur ist im Übringen: pcap_next_ex(Handle, header , rdata);
  Mit Zitat antworten
Alt 06.12.09, 18:10   #6 (permalink)
Themenstarter
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Standard

ich habe es jetzt mit pcap_loop() gemacht.
Es kommen keine Fehler aber wenn ich eine Seite aufrufe (mit dem Browser)
werden auch keine Packts gedumpt woran kann das liegen?
hier der Source:
PHP-Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "st4ckys_header.h"

#include <pcap.h>

//////////////////////////////////////////////////////

void print_pack(u_char *args, const struct pcap_pkthdr *header, const u_char *pack) {
    
int i,j;
    for(
i=0< (header->len); i++) {
        for(
j=0j<=15j++) {
        
printf("%x",pack[i*15+j]);
        }
        
printf("  ||  ");
        for(
j=0j<=15j++) {
            if((
pack[i*15+j] >= 33) && (pack[i*15+j] <= 126)) {
                
printf("%c",pack[i*15+j]);
            }
            else {
                
printf(".");
            }
        }
        
printf("\n");
    }
}
        

int main(void) {
    
char *dev;
    
pcap_t *handle;
    
char err[PCAP_ERRBUF_SIZE];

    if((
dev pcap_lookupdev(err)) == NULL) {
        
error("pcap_lookupdev()");
    }
    if((
handle pcap_open_live(dev,BUFSIZ,1,0,err)) == NULL) {
        
error("pcap_open_live()");
    }
    
printf("sniffing on: %s",dev);
    
pcap_loop(handle, -1print_packNULL);

    
pcap_close(handle);
    exit(
EXIT_SUCCESS);

mfg st4cky
st4cky ist offline   Mit Zitat antworten
Alt 06.12.09, 18:28   #7 (permalink)
AngelDelivery
Guest
 
Likes:
Standard

hast Du denn nun pcap_next_ex probiert ? die callback Implementierung ist offenbar buggy, so meine Erfahrung.
  Mit Zitat antworten
Alt 06.12.09, 21:15   #8 (permalink)
Themenstarter
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Standard

genau so wars bei pcap_next() auch...
aber ich werde es mal mit pcap_next_ex() schreiben
mfg st4cky
st4cky ist offline   Mit Zitat antworten
Alt 07.12.09, 16:41   #9 (permalink)
Themenstarter
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Standard

sry für doppelpost aber wie zur hölle kann ich hier meinen thread editieren?

@topic ich denke nicht das es an der Callback funktion liegt denn ich hatte mit der pcap_next() funktion das gleiche Problem wie mit pcap_loop :S
(ich denke ich war einfach nur 2 mahl zu blöd für die selbe sache -.-)

mfg st4cky
st4cky ist offline   Mit Zitat antworten
Alt 07.12.09, 19:09   #10 (permalink)
AngelDelivery
Guest
 
Likes:
Standard

bei der pcap_open_live implementierung zum schluss hast du den timeout
auf 0 gesetzt, da können keine Pakete kommen !
  Mit Zitat antworten
Alt 08.12.09, 07:30   #11 (permalink)
Moderator
 
Benutzerbild von sTEk
 
Registriert seit: 02.10.01
sTEk Leistung: Pentium IIIsTEk Leistung: Pentium IIIsTEk Leistung: Pentium IIIsTEk Leistung: Pentium III
sTEk eine Nachricht über ICQ schicken
Likes: 126
Standard

Zitat:
Zitat von st4cky Beitrag anzeigen
sry für doppelpost aber wie zur hölle kann ich hier meinen thread editieren?
Den Button dazu findest Du am unteren Ende des Beitrags links neben dem Zitat-Button.
__________________


Steigerung des Luxus: eigenes Auto, eigene Villa, eigene Meinung.

Wieslaw Brudzinski

Würden die Menschen verstehen, wie unser Geldsystem funktioniert, hätten wir eine Revolution – und zwar schon morgen früh.
Henry Ford

Ich mag den Himmel blau - was will ich da mit ner Cloud?!
sTEk ist offline   Mit Zitat antworten
Alt 08.12.09, 21:21   #12 (permalink)
Themenstarter
 
Registriert seit: 25.11.09
st4cky Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Den Button dazu findest Du am unteren Ende des Beitrags links neben dem Zitat-Button.
nein da ist bei mir nur ein Zitat Button :S
sonst nichts
st4cky ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » Network · LAN, WAN, Firewalls » Ein paar dumme Fragen zum Thema Sniffing :S
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61