Code44free's Blog

Старая статья, примитивный HTTP сервер

Posted in c/c++, programming by code44free on Январь 2, 2013

Simple HTTPD.

Когда мы в браузере набираем http://www.sex.com, запрос от нашего браузера уходит на
шлюз, тот в свою очередь запрашивает DNS сервер, об IP-адресе принадлежащем хосту
sex.com, 209.81.7.23. Далее запрос направляется на этот IP-адрес на соответствующий
службе порт (www-80, ftp-21 и т.д.). Так выглядит эта схема с точки зрения канального
уровня сетевой модели OSI. Сам же диалог между браузером и веб-сервером проходит
на прикладном уровне. Типичный диалог выглядит следующим образом:
(more…)

Старая статья, снифер на С с использованием libpcap

Posted in c/c++, networking, programming by code44free on Январь 2, 2013

Послушаем?

В этой статье речь пойдет о «сетевых нюхачах», о сниферах. Если точнее, о том, каким образом можно самому написать снифер. Хотя в массовом сознании снифер ассоциируется со взломом, с разрушением, изначально сниферы были созданы для «мирных» целей, отладка сетевых приложений, сетевых частей операционных систем, протоколов передачи данных.

Принцип работы снифера достаточно прост. Переводим сетевую карту в Promiscuous mode, в этом режиме сетевая карта принимает все пакеты проходящие по сети, а не только предназначенные ей, то есть с MAC адресом назначения не совпадающем с MAC адресом сетевой карты. Далее в зависимости от операционной системы через определенный механизм получаем эти пакеты, анализируем их. Я написал, «в зависимости от операционной системы», поскольку различные операционные системы предоставляют различные механизмы для работы с непосредственно сетевой картой компьютера, в Solaris это интерфейс DLPI, FreeBSD — BPF, Linux — SOCK_PACKET. В результате, что бы написать снифер для работы на этих операционных системах, необходимо написать три различных подсистемы для работы с сетевой картой. Но не все так мрачно. Одним из результатов проекта http://tcpdump.org (разработка известного анализатора сетевых пакетов), стала разработка библиотеки libpcap. Она предоставляет удобный интерфейс для перехвата сетевых пакетов, перенесена на множество платформ, перечисленные выше Solaris, FreeBSD, Linux, практически все Unix’like, и Windows (WinPcap). Все эти библиотеки можно свободно скачать с сайта разработчика.
(more…)