Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Linux: пакетный сокет 
:(
    Опции темы
vektor554
Дата 21.1.2017, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 21.1.2017

Репутация: нет
Всего: нет



Добрый день!
Имеется приложение в котором создается пакетный сокет:

pack_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

Данным сокетом с канального уровня сетевого стека вычитываются все входящие/выходящие пакеты. Однако, получается что пакетный сокет не удаляет пакет с канального уровня, а только копирует его, после чего пакет передается выше по сетевому стеку/в драйвер для передачи в сеть. 
То есть, если в дополнение к пакетному сокету открыть и присоединить к нужному ip и порту, скажем, udp сокет, то данным сокетом можно повторно вычитать данные  (с удаленными ethernet, ip и udp заголовками), уже полученные пакетным сокетом.
Вопрос: можно ли каким либо образом (выставлением флагов, модификацией стека) предотвратить передачу ВХОДЯЩИХ пакетов, вычитанных пакетным сокетом, выше по сетевому стеку?
PM MAIL   Вверх
tzirechnoy
Дата 22.1.2017, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



В правила firewallа (iptables) их добавь, чтобы -j DROP и всё такое.

Хотя, конечно, это тожэ будет неправильное решэние какой-то твоей задачи, которую ты здесь не привёл.
PM MAIL   Вверх
Olej
Дата 22.1.2017, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 30.11.2016

Репутация: нет
Всего: нет



Цитата(vektor554 @ 21.1.2017,  16:21)
Вопрос: можно ли каким либо образом (выставлением флагов, модификацией стека) предотвратить передачу ВХОДЯЩИХ пакетов, вычитанных пакетным сокетом, выше по сетевому стеку?

Можно. И довольно элементарно, написав фильтр в стек TCP/IP ядра Linux - по форме это модуль ядра, драйвер.
Для этого нужно иметь высокую квалификацию в языке C и, желательно, в программировании модулей ядра Linux.
См. Драйверы и модули ядра Linux - там есть практически ваш код.

P.S. кто это вас научил называть SOCK_RAW "пакетным" сокетом? это всегда было "сырой" сокет.
SOCK_RAW - это нестандартное расширение техники TCP/IP, нестандартно для POSIX, это специфическое расширение Linux и оно может работать как угодно (даже от версии к версии).

Добавлено через 1 минуту и 58 секунд
Цитата(tzirechnoy @ 22.1.2017,  15:31)
В правила firewallа (iptables) их добавь, чтобы -j DROP и всё такое.

iptables ничего не знает о пакетах канального уровня ... он даже не догадывается о его существовании smile 
PM MAIL   Вверх
tzirechnoy
Дата 24.1.2017, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
он даже не догадывается о его существовании



Да уж, когда мой iptables начнёт о чём-нибудь догадываться, мне станет по-настоящему страшно.

PS Но кстати да, совет топикстартеру: не употребляйте слов "канальный уровень" и прочие дурацкие наборы букв из описания сетевого протокола имени ISO/OSI, сдохшэго примерно 30 лет назад. Сейчас это выглядит некоторым академическим позёрством, не очень способствующим общению. 
PM MAIL   Вверх
feodorv
Дата 21.2.2017, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 1
Всего: 45



Цитата(Olej @  22.1.2017,  21:55 Найти цитируемый пост)
кто это вас научил называть SOCK_RAW "пакетным" сокетом?

Не SOCK_RAW. Именно PF_PACKET. И "пакетный сокет" - общепринятое название для сокетов семейства PF_PACKET smile 



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1205 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.