Сырой сокет
Сырой сокет — интерфейс программирования приложений (API), разновидность сокетов Беркли, позволяющий собирать TCP/IP-пакеты, контролируя каждый бит заголовка и отправляя в сеть нестандартные пакеты.
Пример
Создание сокета. Код на языке Си
. int i32SocketFD = socket( PF_INET, SOCK_RAW, IPPROTO_RAW ); .
Код на языке Си в ОС Windows
. wSocket = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0,0); .
Поддержка
В каждом конкретном случае необходимо проверять, поддерживает ли ОС сырые сокеты. Приблизительно поддержка отражена в таблице:
полностью поддерживает сырые сокеты после остановки брандмауэра («net stop alg»);
Ссылки
- TCP/IP Raw Sockets
- Крис Касперски «Сырость не радость»
- API
- Межпроцессное взаимодействие
Wikimedia Foundation . 2010 .
Какой тип пакета принимает сырой сокет
Всем привет, я пытаюсь разобраться с тем, какой пакет видит сокет в программе. Я знаю, что единицей информации, передаваемой по сети, является интернет фрейм, которой содержит в себе заголовок и полезную нагрузку. Внутри этой полезной нагрузки находится заголовок «адресного» протокола. Потом идут сами данные, среди которых находится заголовок TCP/UDP. Правильно ли я понял структура интернет пакетов? И какой пакет получает сырой сокет, принимающий TCP и UDP пакеты?
Отслеживать
задан 7 окт 2021 в 12:02
WelcomeToMyTutorial WelcomeToMyTutorial
33 3 3 бронзовых знака
7 окт 2021 в 20:27
@avp, спасибо большое.
8 окт 2021 в 13:46
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- c
- сеть
- сокеты
Что такое сырой ip пакет
Всем здравствуйте кто заглянул на эту тему.
Вот задачка не могу даже приблезительно найти по этой теме.
Имеется hex код:
[CPP]00 21 56 D8 DC 1B 00 16-36 95 AE AB 88 64 11 00
EA 98 00 2D 00 21 45 00-00 2B 2C 56 00 00 C8 11
9D 23 B2 16 C1 B5 D9 C7-DB B4 13 57 1E 62 00 17
59 90 53 41 4D 50 D9 C7-DB B4 62 1E 70 72 22 8F
00 [/CPP]
это код IP пакета.
Нада этот hex код программно отправить на сетевое устройство.
Пользователь
Регистрация: 24.08.2010
Сообщений: 34
http://www.opennet.ru/docs/RUS/tcpip/
Если я правильно помню теорию, то нужно отрезать 20 байт заголовка ip, потом заголовок транспортного уровня. скажем tcp 20 байт, и получим датаграмму, которую нужно отправить. В заголовках получаем и адреса , и порты, и всю настройку. Как -то так. Винда вроде не позволит сырой ip отправить
Последний раз редактировалось blob; 18.09.2010 в 15:16 .
Пользователь
Регистрация: 30.08.2010
Сообщений: 41
Винда позволяет отправить сырой код на сетивое устройство так как винду не кто не спрашивает скачай снифер CommView_60590_.rar и убедись.
Пользователь
Регистрация: 30.08.2010
Сообщений: 41
да забыл может если по протоколу TCP опровлять сырой пакет на какойто адрес то естествено ответа не будет от адреса получателя так
как небыло установлено соединения а этот код относится к протоколу UDP а как известно этот протокол не устанавливает соединения и поэтому пакеты уходят на пямую.
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пакет java.io | Syltan | Общие вопросы по Java, Java SE, Kotlin | 3 | 17.06.2010 15:46 |
flap пакет | Chel-0007 | Общие вопросы C/C++ | 0 | 21.05.2010 14:00 |
Открыть файл как Hex найти там некий участок кода, заменить его и сохранить | AstraZak | Общие вопросы C/C++ | 10 | 05.03.2010 18:58 |
Как настроить эксель, чтобы он открывал в виде таблицы тхт файл с разделителем в виде точки с запятой | xhour | Microsoft Office Excel | 1 | 05.05.2009 14:17 |
как в Си прочитать ЕХЕ файл в HEX виде ?? | Юрий_BASE | Общие вопросы C/C++ | 1 | 18.04.2008 22:54 |
Особенности получения пакетов через raw socket в Linux
Linux (в отличии, к примеру, от FreeBSD) позволяет использовать сырые сокеты не только для отправки, но и для получения данных. В этом месте существуют интересные грабли, на которые я наступил. Теперь спешу показать их тем, кто еще на знает, чтобы каждый, используя свой любимый язык программирования, будь то C++ или Python, мог опробовать их в деле.
Суть граблей изображена на рисунке, чтобы те, кто уже в курсе, не тратили свое время.
Я буду писать примеры на С, но вы можете перенести их и на другие языки, предоставляющие возможность низкоуровневой работы со стеком TCP\IP в Linux.
Некоторые понятия
Напомню, что для инициализации сырого сокета мы передаем параметр, обозначающий тип протокола. Например UDP:
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
Этот протокол я буду называть уровнем на котором работает сырой сокет. В примере мы создали сырой сокет на уровне UDP.
Уровень сырого сокета не ограничивает вас в формировании пакета на отправку, вы можете самостоятельно сформировать как UDP, так и IP заголовок. А вот при получении данных начинается самое интересное…
Грабли
Допустим мы создали 2 сырых сокета на уровне UDP и воспользовались одним из них для отправки UDP пакета на UDP эхо сервер. Эхо вернет нам UDP payload обратно. Так вот, Стек TCP\IP скопирует полученный пакет на все сырые сокеты того уровня, который указан в поле Protocol IP заголовка пришедшего пакета. Еще раз повторюсь — на ВСЕ, даже те, которые открыты в других приложениях (по этой причине приложение, оперирующее сырыми сокетами может быть запущено только с правами суперпользователя). Так как UDP эхо сервер отвечает UDP пакетом, то все сырые сокеты UDP уровня его получат.
Отметим еще одну важную особенность. Не зависимо от уровня сырого сокета, ему доставляется полный пакет, включающий IP заголовки.
Таким образом, каждый сырой сокет в Linux является сниффером на том уровне, на котором он был создан. Следует помнить об этом при разработке приложений.
Пример
Не стал нагружать заметку кодом. Для тех, кому интересно попробовать, я
выложил свой пример на github. Там cmake проект, который собирает простенький UDP эхо-сервер и приложение, создающее 2 сырых сокета уровня UDP, один из которых посылает данные, но оба отправляются в epoll в ожидании ответа. Для чистоты эксперимента эхо-сервер и пример желательно пустить на разных машинах (не забудьте поправить код в соответствии вашим IP-шникам). Для интереса можно запустить несколько экземпляров примера.
Для внешкольного чтения есть хорошая статья.
Спасибо за внимание и поменьше граблей!