Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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

Автор: MAKCim 3.9.2008, 21:19
dandy77
http://sourceforge.net/projects/libpcap/

Добавлено через 2 минуты и 31 секунду
Цитата(dandy77 @  2.9.2008,  06:07 Найти цитируемый пост)
я пробывал connect к 80-му порту своего компьютера и recv, но дело в том, что в заголовке IP пакета которое посылает приложение указан же адрес сервера а не моего компьютера, поэтому пакеты не ловяться. 

советую ознакомиться с теорией для начала (например, книга Стивенса по TCP/IP)
потому как исходя из цитаты, сниферы вам писАть пока рано

Автор: 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

 ! 
smartov
Посиди ка на предмодерации

Автор: Rickert 4.9.2008, 03:21
smartov, третья тема smile 

Автор: 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
Цитата(A1ukard @  22.9.2008,  15:35 Найти цитируемый пост)
2) Использовать сырые (RAW) сокеты. Если у тебя винда >= SP2, то для их использования надо поправить реестр.

С помощью рав-сокетов перехватить ничего не удастся - разве что скопировать smile 

Автор: MAKCim 23.9.2008, 23:47
Цитата(Олег2005 @  23.9.2008,  22:38 Найти цитируемый пост)
С помощью рав-сокетов перехватить ничего не удастся - разве что скопировать

да и скопировать тоже  smile 

Автор: Олег2005 24.9.2008, 09:46
Цитата(MAKCim @  23.9.2008,  22:47 Найти цитируемый пост)
да и скопировать тоже  smile  

Ну почему же......
Сниффера на равсокетах работают и неплохо - и копируют все что приходит на сетевой уровень
Идея та же что и BPF - эти фильтры копируют с канального уровня - и тоже неплохо...

Автор: MAKCim 24.9.2008, 21:09
Цитата(Олег2005 @  24.9.2008,  09:46 Найти цитируемый пост)
Сниффера на равсокетах работают и неплохо - и копируют все что приходит на сетевой уровень

нам нужно
Цитата(dandy77 @  2.9.2008,  06:07 Найти цитируемый пост)
Каким образом можно перехватывать пакеты, которые программа, скажем броузер посылает на сервер

через RAW сокеты перехватить исходящие пакеты не получится


Автор: Олег2005 25.9.2008, 20:09
MAKCim
Это известная проблема - и теоретически так оно и должно быть - исходящие с данного компа скопировать нельзя.......
Но......
На сорсах у меня на эту тему были большие дискуссии - я стоял именно на этой позиции.
Однако мне прислали исходник - и он зараза ловил исходящие smile 
Но как только я поменял конфигурацию сети - поставил рутер вместо свича - все, лафа закончилась.
Такое же мнение высказывали и авторы исходника - в некоторых конфигурациях ловит, в некоторых - нет - что теоретически верно.
Так эта загадка и осталась загадкой - видимо есть какой-то нюанс, связанный с работой устройства, через который идет подключение в сеть - будь то свич, будь то рутер.

Автор: Loki 27.9.2008, 10:58
Цитата

через RAW сокеты перехватить исходящие пакеты не получится

как это?
интерфейс это как дверь, с какой стороны входишь\выходишь там и есть входящий или исходящий.

Автор: MAKCim 27.9.2008, 11:19
Цитата(Loki @  27.9.2008,  10:58 Найти цитируемый пост)
как это?

очень просто
скажем так, в Linux стандартными средствами (без модуля ядра, устанавливающего хук на NF_IP_POST_ROUTING) нельзя (мало того, через RAW сокеты запрещено работать с TCP/UDP пакетами)
могу объяснить почему
по аналогии и в WIndows должно быть так
если приведешь пример обратного, возьму свои слова назад  smile 


 

Автор: Loki 28.9.2008, 14:25
а, пардон, через сырые-нет, через собственные-да;)

Автор: Loki 22.10.2008, 12:05
А все таки похоже нет=)
Вот что можно из raw получить, покрайней мере на примере ethernet-frame....
Код

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <errno.h>
int main (int argc, char* argv[]){
int result = 0;
int s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if(s != -1){
struct sockaddr_ll socket_address;
socket_address.sll_family = AF_PACKET;
socket_address.sll_protocol = htons(ETH_P_ALL);
bind(s, (struct sockaddr*) &socket_address, sizeof(socket_address));
char* buffer= (char*)malloc(ETH_FRAME_LEN+1);
int length=recvfrom(s, buffer, ETH_FRAME_LEN,0,NULL,NULL);
printf("%ld\n", length);
}
else{
printf("Socket creation error %d\n",errno);
result = s;
}

return result;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)