#include #include #include #include #include #define BUFSIZE 2048 static void die(struct ipq_handle *h) { ipq_perror("passer"); ipq_destroy_handle(h); exit(1); } int main(int argc, char **argv) { int status; unsigned char buf[BUFSIZE]; struct ipq_handle *h; h = ipq_create_handle(0,PF_INET); if (!h) die(h); status = ipq_set_mode(h,IPQ_COPY_PACKET,BUFSIZE); if (status < 0) die(h); while (1) { status = ipq_read(h,buf,BUFSIZE,0); if (status < 0) die(h); switch(ipq_message_type(buf)) { case NLMSG_ERROR: fprintf(stderr,"Recieved Error Message: %d\n",ipq_get_msgerr(buf)); break; case IPQM_PACKET: { struct ipq_packet_msg_t *m = ipq_get_packet(buf); struct iphdr *ip = (struct iphdr*) m->payload; /*this line give the error*/ fprintf(stdout,"Saddr: %d\nDaddr: %d\n",ip->saddr,ip->daddr); status = ipq_set_verdict(h,m->packet_id,NF_ACCEPT,0,NULL); /*this line also borks*/ if (status < 0) die(h); break; } default: fprintf(stderr,"Unknown Message Type!\n"); } } ipq_destroy_handle(h); return 0; }