All pastes #19924 Raw Edit

Stuff

public text v1 · immutable
#19924 ·published 2005-08-13 03:40 UTC
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()