Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Перехват пакетов |
Автор: dandy77 2.9.2008, 06:07 |
Каким образом можно перехватывать пакеты, которые программа, скажем броузер посылает на сервер. я пробывал connect к 80-му порту своего компьютера и recv, но дело в том, что в заголовке IP пакета которое посылает приложение указан же адрес сервера а не моего компьютера, поэтому пакеты не ловяться. или как? |
Автор: Ches 2.9.2008, 07:32 |
Зависит от ОС |
Автор: dandy77 2.9.2008, 11:10 |
У меня Win XP, я хочу перехватывать те пакеты, что посылает броузер- его запросы, так как те пакеты, что приходят на 80 порт с интернета у меня получаеться видеть. То есть фактически мне надо видеть запрос- ответ. |
Автор: Ches 2.9.2008, 13:10 |
http://www.codeproject.com/KB/IP/FwHookDrv.aspx http://www.codeproject.com/KB/IP/drvfltip.aspx http://www.codeproject.com/KB/cpp/firewallpapi.aspx http://www.codeproject.com/KB/IP/smfirewall.aspx |
Автор: smartov 3.9.2008, 23:02 | ||
dandy77, малолетний хацкер? 1) http://forum.vingrad.ru/forum/topic-226539/unread-1.html 2) http://forum.vingrad.ru/forum/topic-226502/unread-1.html 3) http://forum.vingrad.ru/forum/topic-226411/unread-1.html
|
Автор: Rickert 4.9.2008, 03:21 |
smartov, третья тема ![]() |
Автор: A1ukard 22.9.2008, 16:35 |
Пакеты можно перехватить как минимум четырьмя способами 1) Написать драйвер-перехватчик. Хорошая идея - почитать про NDIS. Начать можно с википедии. 2) Использовать сырые (RAW) сокеты. Если у тебя винда >= SP2, то для их использования надо поправить реестр. 3) Написать прокси-сервер и указать в настройках программы, чтобы трафик шел через него 4) Инжектироваться в адресное пространство интересующего тебя процесса и перехватывать системные сервисы (к примеру функции send/recv). Это в свою очередь также можно сделать в первом приближении примерно 5-ю разными способами. Подробности на wasm.ru, раздел статьи. Исходники в соответствующем цикле на Delphi (реально - все на winapi). (5) Использовать стороннюю библиотеку, использующую один из перечисленных выше способов. |
Автор: Олег2005 23.9.2008, 22:38 | ||
С помощью рав-сокетов перехватить ничего не удастся - разве что скопировать ![]() |
Автор: MAKCim 23.9.2008, 23:47 | ||
да и скопировать тоже ![]() |
Автор: Олег2005 24.9.2008, 09:46 |
Ну почему же...... Сниффера на равсокетах работают и неплохо - и копируют все что приходит на сетевой уровень Идея та же что и BPF - эти фильтры копируют с канального уровня - и тоже неплохо... |
Автор: MAKCim 24.9.2008, 21:09 | ||||
нам нужно
через RAW сокеты перехватить исходящие пакеты не получится |
Автор: Олег2005 25.9.2008, 20:09 |
MAKCim, Это известная проблема - и теоретически так оно и должно быть - исходящие с данного компа скопировать нельзя....... Но...... На сорсах у меня на эту тему были большие дискуссии - я стоял именно на этой позиции. Однако мне прислали исходник - и он зараза ловил исходящие ![]() Но как только я поменял конфигурацию сети - поставил рутер вместо свича - все, лафа закончилась. Такое же мнение высказывали и авторы исходника - в некоторых конфигурациях ловит, в некоторых - нет - что теоретически верно. Так эта загадка и осталась загадкой - видимо есть какой-то нюанс, связанный с работой устройства, через который идет подключение в сеть - будь то свич, будь то рутер. |
Автор: Loki 27.9.2008, 10:58 | ||
как это? интерфейс это как дверь, с какой стороны входишь\выходишь там и есть входящий или исходящий. |
Автор: MAKCim 27.9.2008, 11:19 |
очень просто скажем так, в Linux стандартными средствами (без модуля ядра, устанавливающего хук на NF_IP_POST_ROUTING) нельзя (мало того, через RAW сокеты запрещено работать с TCP/UDP пакетами) могу объяснить почему по аналогии и в WIndows должно быть так если приведешь пример обратного, возьму свои слова назад ![]() |
Автор: Loki 28.9.2008, 14:25 |
а, пардон, через сырые-нет, через собственные-да;) |
Автор: Loki 22.10.2008, 12:05 | ||
А все таки похоже нет=) Вот что можно из raw получить, покрайней мере на примере ethernet-frame....
return result; |