/*
* Written by Pejman Moghadam / 1401-02-30
* Public domain.
*
*/
/* gcc src.c -lpcap */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <pcap/pcap.h>
void show_packet(char *buf, int len)
{
unsigned char ch;
int i, j, k, space;
printf("\n");
for (i = 0; i < len; i+=16) {
printf("\t0x%04x ", i);
for (j = i; j < i+16 && j < len; j++) {
ch = (unsigned char)buf[j];
printf("%02X ", ch);
}
if (j == i+16)
space = 1;
else
space = 1 + (16*3) - (j-i)*3;
for (k = 0; k < space; k++)
printf(" ");
for (j = i; j < i+16 && j < len; j++) {
ch = (unsigned char)buf[j];
if (ch <= 32 || ch >= 127)
ch = '.';
printf("%c", ch);
}
printf("\n");
}
printf("\n");
}
void packet_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes)
{
static int packet_count = 0;
printf("Packet: %d , Size: %d\n", ++packet_count, h->len);
show_packet((char *)bytes, h->len);
}
int main()
{
pcap_t *p;
char errbuf[PCAP_ERRBUF_SIZE];
p = pcap_open_offline("capture.pcap", errbuf);
if (p == NULL) {
fprintf(stderr, "\npcap_open_offline() failed: %s\n", errbuf);
exit(EXIT_FAILURE);
}
if (pcap_loop(p, 0, packet_handler, NULL) < 0) {
fprintf(stderr, "\npcap_loop() failed: %s\n", pcap_geterr(p));
exit(EXIT_FAILURE);
}
return 0;
}
|