rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <netinet/ether.h>
#include <netinet/tcp.h>
int main(int argc, char **argv) {
int i;
char errbug[PCAP_ERRBUF_SIZE];
char *device;
char *filter;
char *pkt;
char *payload;
struct pcap_pkthdr hdr;
struct bpf_program filter_t;
struct ip *iphdr;
struct tcphdr *tcp;
bpf_u_int32 netmask;
pcap_t *p;
// Init crap
filter = "tcp";
device = pcap_lookupdev(errbug);
device = "lo";
p = pcap_open_live(device, 65534, 1, 500, errbug);
if(p == NULL) {
fprintf(stderr, "Error: couldnt open live capture: %s\n", errbug);
exit (-1);
}
if(pcap_compile(p, &filter_t, filter, 1, netmask) < 0) {
fprintf(stderr, "Error: Couldn't pcap_compile");
exit (-1);
}
// The infinite capture
while(1) {
pkt=(u_char *)(pcap_next(p,&hdr));
if(pkt == NULL) {
continue;
}
// Align the packet
iphdr = (struct ip *)(pkt+sizeof(struct ether_header));
payload = (char *)pkt+
(sizeof(struct ip)+sizeof(struct ether_header)+sizeof(struct tcphdr));
tcp = (struct tcphdr *)(pkt+sizeof(struct ether_header)+sizeof(struct ip));
// Check that the requirements are met
if(iphdr->ip_p != 6) {
printf("Non-TCP\n");
continue;
}
printf("[PACKET](frm)%s(to)%s(port)%d\n",
(char *)inet_ntoa(iphdr->ip_src),
(char *)inet_ntoa(iphdr->ip_dst),
(int *)tcp->dest
);
//if(strcmp("22.22.22.22", (char *)inet_ntoa(iphdr->ip_src))) {
// printf("Incorrect IP source\n");
// continue;
//}
printf("--------+--------\n%s\n--------+--------\n", payload);
} // while()
} // main()