Skip to content

PotatoS229/netStalker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Привет, коллега! 👋

Добро пожаловать в проект Low-Level Network Mastery.

🎯 Цель

Цель этого проекта — дать вам глубокое, практическое понимание низкоуровневого сетевого программирования на C и C++.

Мы не будем прятаться за высокоуровневыми библиотеками и фреймворками. Мы пойдём туда, где живут пакеты, сокеты, заголовки и сырые байты.

Вы освоите:

  • Сырые сокеты (raw sockets) — создание и разбор пакетов вручную
  • Ethernet, ARP, IP, TCP, UDP — от заголовка до полезной нагрузки
  • Блокирующий и неблокирующий ввод-выводselect, poll, epoll (Linux)
  • Мультиплексирование соединений — асинхронная работа с десятками тысяч сокетов
  • Тонкая настройка TCPsetsockopt, буферы, флаги, таймауты
  • Парсинг и сборка пакетов без аллокаций — работа с фиксированными буферами

🤔 Почему C и C++?

Потому что, когда дело доходит до сети на самом нижнем уровне — вы не можете позволить себе лишних абстракций.

В Go, Python, Rust и других языках низкоуровневая работа с сетью либо невозможна (без unsafe), либо настолько завернута в безопасные обёртки, что вы теряете контроль. А контроль над каждым байтом — это единственное, что имеет значение, когда вы пишете:

  • Сетевые снифферы
  • Стейтлесс-фильтры и фаерволы
  • Собственные протоколы поверх UDP/TCP
  • Экспериментальные сетевые стеки
  • Инструменты для анализа трафика

Мы не учим «как отправить HTTP-запрос». Мы учим, как работает сеть до того, как HTTP стал возможен.

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

/
├── 00_sockets_basics/     # Классические Berkeley sockets
├── 01_raw_ethernet/       # Работа с сетевыми интерфейсами на уровне L2
├── 02_arp/                # ARP-запросы и ответы вручную
├── 03_ip/                 # Формирование IP-пакетов, фрагментация
├── 04_tcp/                # TCP без libc (почти), SYN, ACK, FIN, RST
├── 05_udp/                # Мультикаст, широковещательные рассылки
├── 06_nonblocking/        # select/poll/epoll — тысячи соединений
├── 07_tune/               # setsockopt, TCP_NODELAY, SO_REUSEADDR, буферы
└── 08_protocol/           # Создание собственного протокола поверх UDP

💡 Почему стоит заглянуть?

  • Никакого HTTP. Мы не учим запросы к REST API.
  • Никаких фреймворков. Только syscalls, сокеты и сырые буферы.
  • Посокетные объяснения. Каждый системный вызов объяснён — зачем, почему именно так, какие есть альтернативы.
  • Без магии. Вы будете видеть, куда идут байты, и сможете доказать это tcpdump'ом.
  • Промышленные паттерны. Обработка EAGAIN, EWOULDBLOCK, частичная запись/чтение, обработка сигналов.

✋ Кому сюда не стоит заходить?

  • Тем, кто хочет быстро написать чатик. Идите на WebSocket.
  • Тем, кто боится memcpy и утечек памяти.
  • Тем, кто считает, что std::string — это всегда ответ.

🔬 Пример того, что вы сможете делать

// Отправить TCP SYN-пакет вручную, сформировав Ethernet+IP+TCP заголовки
// Поймать SYN-ACK через raw socket
// Разобрать его по полям, не используя ни одной библиотеки
// Изменить TTL, флаги DF/MF, окно TCP
// Убедиться, что tcpdump показывает ТОЧНО то, что вы отправили

🏁 Начать обучение

Выберите папку 00_sockets_basics/ и откройте 01_tcp_echo_server.c.

Там не будет boost::asio. Там будет socket(), bind(), listen(), accept(), recv(), send() — и объяснение, ПОЧЕМУ они работают именно так, а не иначе.

Добро пожаловать под капот сети.
Там холодно, байты летят в лицо, и никто не подстрахует вашим любимым языком с GC.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors