|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|
Анализ IP пакетов28.10.2013, 18:14. Показов 9230. Ответов 17
Метки нет (Все метки)
Делаю фильтр IP пакетов. Фильтрация идет по ключевым словам, которые задаются пользователем. Если в пакете будет обнаружено какое-либо ключевое слово, нужно запретить дальнейший прием любых пакетов с адреса-отправителя этого пакета.
Для сниффера использую библиотеку Winsock2. На данный момент мой сниффер умеет просматривать входящие пакеты и читать всё, что находится в их заголовке. Но как мне просматривать данные? Пробовал читать всё то, что находится после заголовка пакета, но в этом случае я вижу только всякие крокозябры. Добавлено через 30 минут Например, если я загружаю страницу http://en.wikipedia.org/wiki/I... ocol_suite, то в каких-то пакетах я должен видеть текст этой страницы ( пусть, не по порядку, с тегами и т.д., но все таки должен!). Или я что-то недопонимаю? И еще один вопрос появился. Как мне блокировать пакеты от определенного IP адреса?
0
|
|
| 28.10.2013, 18:14 | |
|
Ответы с готовыми решениями:
17
Задача передачи пакетов данных: смоделировать процесс обслуживания 5000 пакетов Потеря 50% пакетов через роутер и отброс пакетов Анализ ценных бумаг (построить Гистограмму и провести анализ) |
|
Ушел с форума
|
|||||
| 28.10.2013, 20:37 | |||||
|
Ведь на уровне IP придется возиться со сбором пакетов (которые могут приходить не в том порядке), а еще будут проблемы с шифрованными IPSec и VPN... Фильтровать трафик на уровне TCP на порядок проще. То есть, должно быть что-то типа конвейера: приняли пакеты, составили из них TCP-поток, разжали его (gzip/zlib/deflate и т.п.), убрали всякие chunk-и из HTTP-потока, и только после этого можно анализировать контент.
1
|
|||||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
||||
| 28.10.2013, 21:20 [ТС] | ||||
|
Спасибо за ответы!
![]() Хм, сейчас еще раз посмотрел то, что я прочитал в пакетах.. Я,конечно, могу ошибаться, но моя программа получила этот пакет после того,как его получил браузер
0
|
||||
|
Ушел с форума
|
||||
| 28.10.2013, 22:00 | ||||
|
его помощью нельзя. будет фильтровать трафик и отдавать его браузеру. Это типовое и многократно проверенное решение, которое широко используется всякими антивирусами, спам-фильтрами, программами родительского контроля и т.п. На роль редиректора обычно выбирают TDI-фильтр или WFP-callout (последнее обязательно для Windows 8 и выше). Оба эти решения - драйверные, работают в режиме ядра. Есть еще LSP, но она на Windows 8 не фильтрует уже, да и там есть другие ограничения. Сразу Вы такое не напишете, информация 100%, на такие решения с нуля можно вбухать кучу времени и сил (как я в свое время, например). Есть и другие варианты, не такие эффективные, но намного более простые в реализации. 1) Запустить фильтрующий прокси на локалхосте и прописать его в настройках браузеров. Плюсы: простота реализации, контроль содержимого веб-страниц. Минусы: фильтроваться будут только браузеры, перехватить трафик многих других приложений не получится. Пользователь при желании сможет изменить настройки, для этого ему не нужны права администратора. 2) Написать плагины для браузеров, которые будут выполнять фильтрацию прямо на месте, без всяких редиректов и прокси. Плюсы: относительная простота, контроль над DOM-страницы, контроль над HTTPS. Минусы: у фильтрации будут те же ограничения, что и в предыдущем пункте. Кроме того, придется осваивать науку написания плагинов для разных браузеров, что может занять ощутимое время. 3) Похукать сетевые функции во всех нужных процессах. Плюсы: контроль над большинством приложений, причем можно контролировать не только TCP, но и UDP, например. Минусы: сложность реализации (особенно в плане поддержки асинхронного I/O и некоторых специфических функций WinSock), конфликты с антивирусами и другим софтом (например, с программами, которые защищены протекторами или используют динамическую модификацию кода), способ не будет работать для Modern-приложений на Windows 8 и выше, ошибка в коде, внедренном в критический системный процесс, вызовет падение всей системы в BSOD.
0
|
||||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|
| 29.10.2013, 01:13 [ТС] | |
|
Да, всё гораздо сложнее, чем я изначально предполагал
Но моя цель - не создание первоклассной софтины. Вообще, опыт в написании небольших сетевых приложений есть. Вот и решил что-нить по-глобальнее попробовать сделать.Писать драйвер сейчас - не лучшая идея, тут Вы правы. Плагины тоже отпадают. То, что нужно вручную указывать адрес прокси в браузерах портит первый вариант.. Но на заметку его возьму. Не могли бы Вы посоветовать какую либо информацию относительно 3го варианта и LSP в рамках моей темы? Добавлено через 16 минут Кстати, где-то видел статью про библиотеку libPcap. В подробности не вдавался, но там было написано, что она позволяет так же фильтровать трафик. Вы не знаете, могла бы мне эта библиотека помочь?
0
|
|
|
Ушел с форума
|
||||
| 29.10.2013, 10:07 | ||||
|
Например: Перехват API-функций в Windows NT/2000/XP http://www.rsdn.ru/article/bas... ionAPI.xml Введение в перехват API для системы команд x86 http://www.securitylab.ru/analytics/428735.php
А еще куча такого же добра от независимых разработчиков. От себя добавлю, что хуки Winsock и LSP - это обманчивая простота, на самом деле написать рабочий TDI-фильтр на порядок проще, и он будет действовать намного более стабильно и перехватывать весь сокетный трафик, в отличие от. А здесь Вы получите глюки различной степени "тяжести" и некоторые проблемы, не имеющие принципиально качественных путей решения. По ряду причин, оба эти решения в коммерческом софте практически не встречаются. К тому же Pcap, насколько я знаю, не позволяет выполнять фильтрацию, а только мониторинг.
1
|
||||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|||||||||||
| 01.11.2013, 23:59 [ТС] | |||||||||||
|
Сегодня наткнулся вот на этот сниффер: https://gist.github.com/silv3rm00n/5991306
Судя по коду,насколько я понимаю, должно выводиться полное содержимое всех принятых пакетов. Однако, например, при загрузке какой-нибудь веб-страницы или txt файла в логе не видно содержимого этих ресурсов. Единственная принятая информация (помимо заголовков) - это информация следующего рода: Кликните здесь для просмотра всего текста
NOTIFY * HTTP/1.
1..HOST: 239.255 .255.250:1900..C ACHE-CONTROL: ma x-age=100..LOCAT ION: http://192. 168.0.1:1900/igd .xml..NT: upnp:r ootdevice..NTS: ssdp:alive..SERV ER: ipos/7.0 UPn P/1.0 TL-WR740N/ 4.0..USN: uuid:0 60b7353-fca6-407 0-85f4-1fbfb9add 62c::upnp:rootde vice.... и еще немного строк в непонятной кодировке, которые явно не являются тем контентом, который мне нужен. Да и суммарный размер всех принятых пакетов в десятки раз меньше загружаемой страницы или того же txt-файла. В общем, вопрос: Как мне все таки найти в пакетах содержимое всех загружаемых документов? PS Функции вывода пакетов в том сниффере:
0
|
|||||||||||
|
Ушел с форума
|
|||
| 02.11.2013, 02:18 | |||
|
Он ведь текст очень хорошо сжимает, разница легко может быть в несколько раз. Я бы выкинул всю копи-пасту и переписал бы сниффер с нуля, сведя его к вырожденному, так сказать, случаю. Минимум кода. Обычно после этого все довольно быстро проясняется.
0
|
|||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|
| 11.11.2013, 02:11 [ТС] | |
|
В общем, на данный момент программа умеет анализировать несжатый трафик. Но возникли сложности с gzip'ом.
Как я понимаю, для того, чтобы распаковать содержимое, нужно сперва собрать все пакеты, которые относятся к одному запросу. Но как понять, какие именно пакеты нужно соединять и в какой последовательности? Пакеты ведь могут приходить не по порядку, а так же дублироваться. И как мне выявить то, что данный пакет содержит именно gzip-содержимое? Подскажите идеи, плиз.
0
|
|
|
Ушел с форума
|
|||||
| 11.11.2013, 02:58 | |||||
|
HTTP-сообщения. Вообще, обычно для таких вещей пишется что-то типа стейт-машины. На просторах интернета можно найти хорошую библиотеку, заточенную под это дело. Изучать соответствующие RFC, статьи, литературу... прикладные протоколы (HTTP, SMTP, POP3, FTP и т.п.) на IP-уровне нерационально. Ибо кажущаяся простота, - а сниффер на базе того же promiscuous mode пишется в несколько сотен строк, - в итоге нивелируется сложностями со сбором TCP-потока из IP-пакетов. Если делать фильтрацию на уровне TCP, то мы сразу бы имели уже собранный поток данных, без всяких сегментов, reassembly и дублирования пакетов. Смотрите значение HTTP-заголовка Content-Encoding, если быть точным. По спецификации, там кроме gzip также может быть zlib (иногда встречается сырой deflate, хоть это и не по правилам), compress (из-за патентных ограничений, которые существовали несколько лет назад, способ компрессии стал непопулярным, последний раз я встречал его поддержку в ранних версиях Google Chrome), еще есть возможность встретить bzip2 и sdch.
1
|
|||||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
||||||
| 16.11.2013, 23:38 [ТС] | ||||||
|
Вообще, я думал, что работаю на уровне TCP. Но это уже не важно...
Копался в нете, но так и не нашел дельной инфы о том, как ловить пакеты именно на уровне TCP. Хотя куча информации о том, как ловить пакеты IP, содержащие в себе пакет TCP. Не могли бы Вы подсказать, как это сделать, какие библиотеки использовать, да и вообще, где можно об этом почитать? (Что-то мне подсказывает, что сам перехват пакетов на уровне TCP осуществляется сложнее, чем перехват пакетов уровня ниже). И еще вопрос.. Я уже знаю, что winsock - это сетевой уровень. Однако, если создавать сокет вот с такими параметрами:
Просто протестировать такой сокет у меня еще не получилось - выдает ошибку, когда выполняю функцию bind, поэтому и спрашиваю.
0
|
||||||
|
Ушел с форума
|
|||||||
| 17.11.2013, 10:36 | |||||||
Анализ IP пакетов
необходимость возиться с идентификацией и сбором IP-пакетов. Потому что никаких пакетов на этом уровне уже нету, а лишь поток данных: столько-то байт отправлено, столько-то байт принято, и т.д.
IPPROTO_TCP - это протокол TCP. Какие тут могут быть вопросы ?
1
|
|||||||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|||||||||||
| 17.11.2013, 11:46 [ТС] | |||||||||||
|
Ааа, теперь начинаю въезжать
Просто я себе немножко по-другому это представлял.. Ну да ладно.Ошибка теперь выдается в другом месте, и я понимаю из-за чего. Но хотел бы по этому поводу уточнить одну деталь. Код инициализации:
Добавлено через 7 минут PS ошибка в функции recv
0
|
|||||||||||
|
Ушел с форума
|
|
| 17.11.2013, 12:31 | |
|
Что должен делать приведенный код ?
0
|
|
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|||||||||||
| 17.11.2013, 12:32 [ТС] | |||||||||||
|
Программа должна принимать входящий TCP поток. Как я понимаю, нужно поставить сокет в режим прослушки (listen), а после в цикле ждать соединения, и функцией accept его принимать. Но на функции accept код виснет, хотя я загружаю с нета различную информацию.
Изменил код. Инициализация: i
0
|
|||||||||||
|
Ушел с форума
|
|||
| 17.11.2013, 12:48 | |||
|
Вы создали сокет, затем забиндили его на локальный адрес/порт, теперь функция accept ждет на него подключений. Трафик, идущий через браузеры и другие приложения, этого никаким образом не касается.
0
|
|||
|
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 23
|
|
| 17.11.2013, 13:10 [ТС] | |
|
Подскажите пожалуйста, как мне сделать так, чтобы этот сокет просматривал входящий трафик, который проходит через различные приложения? Можно ли это сделать аналогично тому, как это делает IP-сокет (т.е. инициализировали его, привязали к локальному адресу, поставили в неблокирующий режим и в бесконечном цикле принимаем трафик, приходящий на локальную машину) ?
0
|
|
|
Ушел с форума
|
||
| 17.11.2013, 13:22 | ||
|
Соединение образует уникальную комбинацию адресов и портов на клиенте и сервере: source address / source port <--> destination address / destination port, ее еще называют "4-tuple". Операции, которые выполняются над сокетом, относятся только к соединению которое на нем установлено. Другие приложения могут создавать (или принимать) свои подключения, в результате каждое подключение является как бы отдельным "каналом", который изолирован от других. Вообще, не знаю, уместно ли здесь писать о таких вещах, это ведь основы сокетов.
1
|
||
| 17.11.2013, 13:22 | |
|
Помогаю со студенческими работами здесь
18
Анализ сетевого трафика используя регрессионный анализ Отлов пакетов Перехват пакетов внедрение пакетов Потеря пакетов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|