#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <sys/ioctl.h>
#include <time.h>

int main(int argc, char *argv[])
  {
  int s;                     /* Socket-Handle */
  int bytes;                 /* Bytes gelesen */
  struct timeval t_last;     /* Zeit/Datum inkl. Mikrosekunden */
  time_t ctime;              /* Zeit/Datum (Sekunden) */
  int mikrosek;              /* Anteil Mikrosekunden */
  char time_buffer[30];      /* Puffer fuer Datum + Uhrzeit */
  char packet[1600];         /* Datenpaket */

  /* Socket kreieren */
  s = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
  if (s == -1)
    {
    perror("socket() ging schief");
    if (errno == EACCES) printf(" (EACCES)\n");
    if (errno == EAFNOSUPPORT) printf(" (EAFNOSUPPORT)\n");
    return 1;
    }

  while(1)
    {
    /* Datenpaket lesen */
    bytes = read(s, packet, sizeof(packet));

    /* Ankuftszeit des letzten Paketes lesen und aufspalten */
    ioctl(s, SIOCGSTAMP, &t_last);
    ctime = t_last.tv_sec;
    mikrosek = (int)t_last.tv_usec;

    /* Datum/Zeit in String umwandeln und ausgeben */
    strftime(time_buffer, 30, "%Y-%m-%d, %T", localtime(&ctime));
    printf("%s.%06d\n", time_buffer, mikrosek);
    }

  return(0);
  }