Home » Linux Kernel » Linux Device Drivers » WiFi Driver » Simple wifi packet sniffer to capture every packet received on wlan0 interface

Simple wifi packet sniffer to capture every packet received on wlan0 interface

This program captures the network packets received on wifi interface.

 $ vim simplesniffer.c 
/* Simple Raw Sniffer                                                    */
/* Author: Luis Martin Garcia. luis.martingarcia [.at.] gmail [d0t] com  */
/* To compile: gcc simplesniffer.c -o simplesniffer -lpcap               */
/* Run as root!                                                          */
/*                                                                       */
/* This code is distributed under the GPL License. For more info check:  */
/* http://www.gnu.org/copyleft/gpl.html                                  */
 
#include <pcap.h> 
#include <string.h> 
#include <stdlib.h> 
 
#define MAXBYTES2CAPTURE 2048 
 
 
/* processPacket(): Callback function called by pcap_loop() everytime a packet */
/* arrives to the network card. This function prints the captured raw data in  */
/* hexadecimal.                                                                */
void processPacket(u_char *arg, const struct pcap_pkthdr* pkthdr, const u_char * packet){ 
 
 int i=0, *counter = (int *)arg; 
 
 printf("Packet Count: %d\n", ++(*counter)); 
 printf("Received Packet Size: %d\n", pkthdr->len); 
 printf("Payload:\n"); 
 for (i=0; i<pkthdr->len; i++){ 
 
    if ( isprint(packet[i]) ) /* If it is a printable character, print it */
        printf("%c ", packet[i]); 
    else
        printf(". "); 
     
     if( (i%16 == 0 && i!=0) || i==pkthdr->len-1 ) 
        printf("\n"); 
  } 
 return; 
} 
 
 
 
/* main(): Main function. Opens network interface and calls pcap_loop() */
int main(int argc, char *argv[] ){ 
     
 int i=0, count=0; 
 pcap_t *descr = NULL; 
 char errbuf[PCAP_ERRBUF_SIZE], *device=NULL; 
 memset(errbuf,0,PCAP_ERRBUF_SIZE); 
 
 if( argc > 1){  /* If user supplied interface name, use it. */
    device = argv[1];
 }
 else{  /* Get the name of the first device suitable for capture */
 
    if ( (device = pcap_lookupdev(errbuf)) == NULL){
        fprintf(stderr, "ERROR: %s\n", errbuf);
        exit(1);
    }
 }
 
 printf("Opening device %s\n", device); 
  
 /* Open device in promiscuous mode */
 if ( (descr = pcap_open_live(device, MAXBYTES2CAPTURE, 1,  512, errbuf)) == NULL){
    fprintf(stderr, "ERROR: %s\n", errbuf);
    exit(1);
 }
 
 /* Loop forever & call processPacket() for every received packet*/
 if ( pcap_loop(descr, -1, processPacket, (u_char *)&count) == -1){
    fprintf(stderr, "ERROR: %s\n", pcap_geterr(descr) );
    exit(1);
 }
 
return 0; 
 
} 
 
/* EOF*/
 $ gcc -o simplesniffer simplesniffer.c -lpcap 
 $ sudo ./simplesniffer wlan0 

If you don’t know which interface to use, use command “ifconfig -a” to see your wifi interface.

ESP8266 UDP Send & Receive Exam...
ESP8266 UDP Send & Receive Example (Step by Step Arduino Guide)

1 thought on “Simple wifi packet sniffer to capture every packet received on wlan0 interface”

Leave a Comment