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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перехват сообщений сервера 
:(
    Опции темы
Predator_2004
Дата 31.10.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую всех! Такая задача по сетевой безопасности: есть клиент и сервер- оба консоли. Они обмениваются между собой строками. Необходимо реализовать перехват сообщения с сервера, зная порт и адрес. Спасибо за любую помощь!
PM MAIL   Вверх
jonie
Дата 1.11.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



есть два вида атак : пассивный и активный.
в первом вы "нюхаете" трафик (sniffer), второй - вклиниваетесь между сервером и клиентом и изображаете из себя сервер и клиент соответсвенно...как вариант использование паяльника нетрадиционным методом...
Как хочется вам?)
Первое проще, второе - более вариантное... 
Если программы используют протоколы аутентификации типа керберос то вам будет сильно обломно заниматься перехватом...

гугл по словам: sniffer, ARP spuffing....
Читайте книжки, в них очень много написано (тот же Олифер "Компьютерные сети").....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Predator_2004
Дата 1.11.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Программы не используют никаких наворотов. Просто сокеты на низком уровне. Видимо мне требуется второе... Будем искать...
PM MAIL   Вверх
Predator_2004
Дата 1.11.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нашел то, что хотел в сдк. Спасибо за помощь!
PM MAIL   Вверх
fish9370
Дата 2.11.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

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



Цитата(Predator_2004 @ 1.11.2007,  22:06)
Нашел то, что хотел в сдк. Спасибо за помощь!

полюбопытствую, какое решение?


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Predator_2004
Дата 2.11.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Суть вся в процедурке ioctlsocket. Она позвояет контролировать режим ввода/вывода сокета и может быть пременена к сокету в любом состоянии. Также она позволяет применять или получать параметры данного сокета. 
PM MAIL   Вверх
Олег2005
Дата 3.11.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Predator_2004 @  31.10.2007,  21:50 Найти цитируемый пост)
Необходимо реализовать перехват сообщения с сервера, зная порт и адрес.

ioctlsocket() никак не решает вашу задачу
 Вот практически полный список методов фильтрации:
1. Промежуточный драйвер NDIS
Способ заключается в создании виртуального адаптера и его установки таким образом, что при каждом вызове реального адаптера сначала шло обращение к виртуальному, т.е виртуальный адаптер «накладывается» на реальный.
2. Перехват драйвера NDIS (NDIS Hooking Filter Driver)
3. TDI-фильтр
4. Фильтр сокетов в режиме ядра (“Kernel-mode sockets filter”)
5. Перехват драйвера фильтра IP (“Windows Filter-Hook Driver”)
6. API фильтрации пакетов
7. Winsock Layered Service Provider (LSP)
8. Замена системных динамических библиотек (DLL), предоставляющих приложениям различные сетевые интерфейсы
9. В версии ОС Windows Vista корпорация Microsoft предприняла попытку объединить, стандартизировать и упростить способы фильтрации сетевого трафика с помощью нового API - WFP. Это API открывает разработчикам ПО доступ к процессу обработки входящего и исходящего TCP/IP трафика, позволяя проверять содержимое и принимать решение по его дальнейшей обработке.
PM MAIL WWW MSN   Вверх
Predator_2004
Дата 4.11.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



To Олег2005
Нашел в сети пример, как говорят перехвата данных в аське. Аськи нет-> не пробовал.
Вот код:
Код

#define MAX_PACKET_SIZE    0x10000

static char buffer[MAX_PACKET_SIZE];

int main()
{
    WSADATA wsadata;
    SOCKET s;
    char name[128];
    HOSTENT* hostent;
    sockaddr_in addr;
    unsigned long flag = 1;
    int code, iplen, tcplen, datalen;
    IPHeader* ip;
    TCPHeader* tcp;
    ofstream logf;

    logf.open("log.txt");
    WSAStartup(MAKEWORD(2, 0), &wsadata);
    s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    gethostname(name, sizeof(name));
    hostent = gethostbyname(name);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = ((struct in_addr *)hostent->h_addr_list[0])->s_addr;
    bind(s, (sockaddr *)&addr, sizeof(addr));
    ioctlsocket(s, SIO_RCVALL, &flag);
    while (1) {
        code = recv(s, buffer, sizeof(buffer), 0);
        if (code == SOCKET_ERROR) break;
        if (code > 0) {
            ip = (IPHeader *)buffer;
            iplen = 4 * (ip->verlen & 0x0f);
            tcp = (TCPHeader * &buffer[iplen];
            tcplen = (4 * tcp->hdrle);
            logf << "\n\nData\n";
            logf.write(&buffer[iplen+tcplen], code-iplen-tcplen);
            logf.flush();
        }
    }
    logf.close();
    closesocket(s);
    WSACleanup();
    return 0;
}
 Попытался переделать под свое, но прога не хочет делать bind с сокетом.
Код

#include<Winsock2.h>
#include<iostream>

#pragma comment(lib,"Ws2_32.lib")

using namespace std;

#define MAX_PACKET_SIZE    0x10000

static char buffer[MAX_PACKET_SIZE];

int main()
{
    WSADATA wsadata;
    SOCKET s;
    char name[128];
    HOSTENT* hostent;
    sockaddr_in addr;
    unsigned long flag = 1;
    int code, iplen, tcplen, datalen;
    WSAStartup(0x0101, &wsadata);
    s = socket(PF_INET, SOCK_STREAM, 0);
    gethostname(name, sizeof(name));
    hostent = gethostbyname(name);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    if(bind(s, (sockaddr *)&addr, sizeof(addr))) cout<<"bound!"<<endl;;
    ioctlsocket(s,  FIONREAD, &flag);
    while (1) {
        code = recv(s, buffer, sizeof(buffer), 0);
        if (code == SOCKET_ERROR) break;
        if (code > 0) {
            cout<<buffer<<endl;
        }
    }
    closesocket(s);
    WSACleanup();
    return 0;
}
 Может что-то не так делаю?
+ не могли бы вы разъяснить предыдущее сообщение(рассказать поподробнее о перечисленных способах, если можно)
PM MAIL   Вверх
Олег2005
Дата 5.11.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не знаю причины, но ни в первом, ни во втором варианте кода отсутствует порт в структуре адреса:
sa.sin_port=htons(0);
Несмотря на то, что равсокеты не работают с портами - поле порта в структуре адреса должно быть обнулено - иначе там мусор.
Больше пока идей особых нет, пожалуй здесь некорректно:
WSAStartup(0x0101, &wsadata);
Подключаете (lib,"Ws2_32.lib"), 
а запрашиваете 1.1
Надо бы
WSAStartup(MAKEWORD(2, 0), &wsadata);
Цитата

(рассказать поподробнее о перечисленных способах, если можно)

Это довольно долго - на пальцах не объяснить - попробуйте в сети поискать по пунктам
PM MAIL WWW MSN   Вверх
Predator_2004
Дата 5.11.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to Олег2005
Порт был объявлен кажется в другом модуле. Переделал, но bind все равно не выполняется. Нельзя делать bind для третьего? Тогда как сделать связь с портом, если он занят? Не понимаю...
PM MAIL   Вверх
Олег2005
Дата 5.11.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подозрение вызывает еще одна строка
gethostname(name, sizeof(name));
Зачем она?
Какое у вас имя хоста? Это имя Netbios или доменное имя???
Зачем оно вам нужно?
Цитата

The gethostname function queries namespace providers to determine the local host name using the SVCID_HOSTNAME GUID defined in the Svgguid.h header file. If no namespace provider responds, then the gethostname function returns the NetBIOS name of the local computer.

PM MAIL WWW MSN   Вверх
Predator_2004
Дата 6.11.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Это остатки вставки из примера. Ничего они не делают и не используются- забыл удалить. Извините за неточность.
PM MAIL   Вверх
ptr
Дата 8.11.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

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



Цитата(Predator_2004 @  5.11.2007,  00:28 Найти цитируемый пост)
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);


Цитата(Predator_2004 @  5.11.2007,  00:28 Найти цитируемый пост)
s = socket(PF_INET, SOCK_STREAM, 0);

Найди 2 отличия.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Олег2005
Дата 8.11.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Predator_2004, 
Ну ка как новые результаты - есть какие???
PM MAIL WWW MSN   Вверх
Predator_2004
Дата 8.11.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to ptr
Первый пример создан не мной! Я адаптировал его под свою задачу.
to Олег2005
Пока не выходит. Этот несчастный bind не выполняется. Как вы думаете, что если заблокировать клиента и перехватить данные?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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