#include // подключаем библиотеку чтобы выводить информацию на экран #include // незабудим и про манипуляторы потоком I/O #include // - главное, что нам необходимо typedef unsigned short int word; typedef unsigned char byte; void printdg(char *buf,const int bufsize) // данная функция распечатывает содержимое пакета { // но не претендует на оптимальность  struct icmpdg // структура заголовка ICMP датаграммы  { byte type; byte code; word chksum; word id; word num; }; icmpdg *packet; packet =(icmpdg *)buf; // накладываем нашу структуру на имеющийся пакет cout<type<code<chksum<id<num<> err; exit(1); } addr = new sockaddr_in; // Инициализация адресса и протокола addr->sin_family = AF_INET; addr->sin_port = htons(0); addr->sin_addr.s_addr = htonl(INADDR_ANY); protocol = getprotobyname("icmp"); if(protocol == NULL) { cout << "Error in getprotobyname(): " << WSAGetLastError(); cin >> err; exit(1); } sock = socket(AF_INET,SOCK_RAW,protocol->p_proto);  if(sock == INVALID_SOCKET) { cout << "Error in socket(): " << WSAGetLastError(); cin >> err; exit(1); } err = bind(sock,(sockaddr *)addr,sizeof(*addr)); if(err == SOCKET_ERROR) { cout << "Error in bind(): " << WSAGetLastError(); cin >> err; exit(1); } cout<<"start listening..."<> err; break; } cout<<"received from: "<sin_addr)<