#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>

/* packet header structures */

struct iphdr {
	unsigned int ihl:4;
	unsigned int ver:4;
	unsigned char tos;
	unsigned short totlen;
	unsigned short id;
	unsigned short frag_and_flags;
	unsigned char ttl;
	unsigned char proto;
	unsigned short checksum;
	unsigned int src;
	unsigned int dst;
};


struct tcphdr {
	unsigned short sport;
	unsigned short dport;
	unsigned int   seq;
	unsigned int   acknum;
	unsigned int   unused:4;
	unsigned int   tcphl:4;
	unsigned char  Flags;
	unsigned short Windows;
	unsigned short cksum;
	unsigned short UrgPointer;
};


struct udphdr {
	unsigned short sport;
	unsigned short dport;
	unsigned short len;
	unsigned short cksum;
};


struct icmphdr {
	unsigned char  type;
	unsigned char  code;
	unsigned short cksum;
	unsigned short id;
	unsigned short seq;
};


#define HOSTNAME_LEN 1024
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define MAXFMT 1024
#define PAKSIZE 65536

void init_opt(int, char **);
void init_net(void);
void usage(void);
void die(char *);
void process_pak(char *, int);
void list_interfaces(void);
void bind_to_interface(int);

/* G L O B A L S */

SOCKET s0k;
short interface_choice=-1;
short promiscuous=1;
short scantcp=1;
short scanudp=1;
short scanicmp=1;
char fmttcp[MAXFMT];
char fmtudp[MAXFMT];
char fmticmp[MAXFMT];


