#include #include #include #include #include #include #include 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()