Skip to content

RustamKuramshin/ping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ping

Учебный проект: реализация упрощённого аналога утилиты ping на C++.

Проект разрабатывается на macOS с использованием CLion + CMake + C++20.

Цель проекта — изучение:

  • raw sockets
  • протокола ICMP
  • сетевого программирования на C++
  • POSIX API
  • CMake

Текущий статус

Сейчас реализовано:

  • ICMP Echo Request (type=8/code=0) + checksum
  • Отправка/получение пакетов через sendto() / recvfrom() (с таймаутом)
  • RTT измерение
  • Циклический ping (несколько запросов)
  • TTL вывод
  • Статистика как в ping (packet loss, min/avg/max/stddev)
  • Обработка аргументов командной строки (например, -c, -W, -i)
  • Unit-тесты без необходимости sudo:
    • checksum_test
    • icmp_packet_test

Пример вывода:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=57 time=12.345 ms

Требования

  • macOS
  • clang / AppleClang
  • CMake >= 3.20
  • root-доступ (для raw sockets)

Проверка:

clang++ --version
cmake --version

Структура проекта

ping/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   ├── ping.cpp
│   ├── icmp.cpp
│   └── ...
└── tests/
    ├── checksum_test.cpp
    └── icmp_packet_test.cpp

Сборка проекта

Из корня проекта:

cmake -S . -B cmake-build-debug
cmake --build cmake-build-debug --target ping

После сборки появится бинарник:

cmake-build-debug/ping

Запуск

Raw sockets требуют root-прав.

Запуск:

sudo ./cmake-build-debug/ping 8.8.8.8

Ожидаемый вывод:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=57 time=12.345 ms

Без root-прав будет ошибка:

socket: Operation not permitted

Тестирование

Проект содержит unit-тесты, которые можно запускать без sudo.

Сборка тестов + прогон через CTest:

cmake -S . -B cmake-build-debug
cmake --build cmake-build-debug --target checksum_test icmp_packet_test
ctest --test-dir cmake-build-debug --output-on-failure

Используемые технологии

  • C++20
  • POSIX sockets API
  • ICMP protocol
  • CMake
  • AppleClang

Компиляция

Компилятор:

Apple clang 17+

Флаги компиляции:

-Wall -Wextra -Wpedantic

Стандарт языка:

C++20

Планы развития

Идеи для дальнейшего развития (не реализовано):

  • hostname → IP (DNS)
  • IPv6 (ICMPv6)
  • опции -s (размер payload), -t (TTL), -D (timestamp)
  • opt-in интеграционный тест, который реально шлёт/получает ICMP (будет требовать sudo)

Пример будущего использования

sudo ./cmake-build-debug/ping -c 2 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=57 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=11.8 ms

About

Реализация упрощённого аналога утилиты `ping` на C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors