#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <net/ethernet.h>

int dump(char*);
void analyze(u_char *, const struct pcap_pkthdr *, const u_char *);
char* etheraddr_string(u_char *);

/*globals*/
/* char rtn[sizeof("00:00:00:00:00:00")]; -useless after function replacement */

int main(int argc, char **argv)
{
  char *dev;
  dev = (char *)pcap_lookupdev(NULL);

  /*test*/

  /*test*/

  if(dev)
  {
	dump(dev);
  }
  else
  {
    printf("No network device found");
    exit(0);
  }
  exit(0);
}

int dump(char *dev)
{
  pcap_t *PCAP_T;
  int numcaptured=0; 

  printf("Using device: %s\n",dev);
  PCAP_T = pcap_open_live(dev,4096,1,1000,NULL);
    numcaptured = pcap_loop(PCAP_T, -1, analyze, NULL);
    printf("Packets captured: %i\n", numcaptured);
  return(0);
}

void analyze(u_char *unknown, const struct pcap_pkthdr *PCAP_PKTHDR, const u_char *data)
{
  int length = PCAP_PKTHDR->len;
  char *ether_src, *ether_dst, *ether_host;
  struct ether_header *ep;

  ep = (struct ether_header *)data;
  ether_src = ep->ether_shost;
  ether_dst = ep->ether_dhost;

  ether_host = (char *)malloc(1024);
  ether_ntohost(ether_host,(struct ether_addr *)ether_dst);
 
  printf("MAC: %s -> %s\n", ether_ntoa((struct ether_addr *)ether_src), ether_ntoa((struct ether_addr *)ether_dst));
  printf("TEST HOST: %s\n", ether_host);
  printf("Length : %i\n", length);
  printf("\n");
}
/* Useless function - replaced by ether_ntoa 
char* etheraddr_string(u_char *addr)
{
 char buf[sizeof("00:00:00:00:00:00")];

 int hex[] = {48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102};
 int i,j,k=0;
 for(i=0; i<6; i++){
   if(addr[i] > 0){
	 if((addr[i]/16)>0){
       buf[i*3] = hex[(addr[i]/16)];
	 }
	 else{
	   buf[i*3] = hex[0];
	 }
	 if((addr[i]%16)>0){
       buf[(i*3)+1] = hex[(addr[i]%16)];
	 }
	 else{
	   buf[(i*3)+1] = hex[0];
	 }
   }
   else{
	 buf[i*3] = hex[0];
	 buf[(i*3)+1] = hex[0];
   }
   if(i < 5){
     buf[(i*3)+2] = 58;
   }
 }
 buf[17] = NULL;
 memcpy(rtn,buf,sizeof(buf));
 return(rtn);
}*/
