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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват пакетов конкретного приложения, Проблемма в AcceptEx 
:(
    Опции темы
asm2asm
Дата 24.5.2005, 16:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я занимаюсь разработкой программы перехвата сетевых пакетов у конкретного приложения с целью их анализа. А именно у игры Warcraft III. Проблемма состоит в том что перехватываються все пакеты за исключением входящих, тех, которые были подключены командой AcceptEx (она происходит при подключении клиентов к хосту какойлибо карты) не могу найти точку входа в процедуру получения данных из сокета. Перехватываю recv, recvfrom, wsarecv, wsarecvfrom, wsarecvex, readfile, readfileex в библиотеках wsock32.dll, ws2_32.dll, mswsock.dll. и при этом ни в одну их них вызова не происходит. Может я чтото не понимаю или есть какието недокументированные способы получения потока?
Какие ещё команды могут получать информацию из сокетов?
Все остальные входящие пакеты перехватываються нормально, за исключением тех сокетов которые были обработаны командой AcceptEx.
И ещё одна проблемма это вычисления удалённого IP у таких соединений. После всех процедур описанных в MSDN, команда getpeername возвращает 0.
И мало того по непонятной причине после принятия сокета командой AcceptEx он меняет свой указатель, т.е. пакеты приходят на другой сокет (принятый тойже командой, но предыдуей). Хотя у толькочто принятого сокета можно определить удалённый адрес. Эта проблемма не столь важна и имеет обход в данной ситуации, но всётаки может кто знает.
Это низкоуровневое программирование, поэтому не пишите названия функций всяких дочерних классов. В данном случае вопрос на более низком уровне. Замучался уже пробовать и искать. Дебугеры ничем не помагают.
Очень уж охото зделать полезную утилиту для WC3, такую какой ещё нет, да и самому интересно.
  Вверх
Arush
Дата 25.5.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Получать данные из сокетов может целая куча функций, например GetOverlappedResult smile
Когда мне надо было перехватывать трафик я пользовался Layered Service Provider (LSP).
Эта штука работает на более низком уровне WinSock2, поэтому функций там не очень много - насколько помню только те, что начинаются на WSP.
Где-то был работающий пример. Потерялся. Брал его вроде на микрософте. Гугл должен помочь.

ЗЫ. Скорее всего данные не перехватываются, потому, что используется Overlapped режим, т.е. винсок сам вызывает функцию, которая указана в этой структуре, либо выставляет событие, что пора забирать данные, не помню точно.

Это сообщение отредактировал(а) Arush - 25.5.2005, 20:35
PM MAIL   Вверх
Arush
Дата 25.5.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот тут статья на эту тему:
http://www.microsoft.com/msj/0599/LayeredS...redService.aspx

PM MAIL   Вверх
Lurker
Дата 30.4.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди а можно пример подобной программы ? для перехвата пакетов определенно программы ? я так понял ее можно использовать не только для Варкрафта.
PM MAIL   Вверх
Lurker
  Дата 31.7.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди а можно рабочий пример программы простого перехвата пакетов ?
Киньте кому не жалко... на готовом примере легче разбираться с нуля не получается осилить :(


Это сообщение отредактировал(а) Lurker - 31.7.2008, 13:44
PM MAIL   Вверх
Олег2005
Дата 2.8.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(asm2asm @  24.5.2005,  15:57 Найти цитируемый пост)
Все остальные входящие пакеты перехватываються нормально, за исключением тех сокетов которые были обработаны командой AcceptEx.

Мне кажется что это происходит из-за особенностей этой функции
Цитата
4.5.1.    API функций расширения
Спецификация WinSock 2 предоставляет программисту целый ряд дополнительных функций –Extension API, расширяющих его возможности по созданию масштабируемых приложений, в основном высокопроизводительных серверов. Эти функции – AcceptEx(), ConnectEx(), DisconnectEx(), TransmitFile(), TransmitPackets() и WSARecvMsg(). Еще одна функция – GetAcceptExSockaddrs() – применяется совместно с AcceptEx(). Описание прототипов функций находится в заголовочном файле MSWSOCK.H, а сами функции - в mswsock.dll. Однако только 3 функции могут быть непосредственно экспортированы из mswsock.dll – AcceptEx(), GetAcceptExSockaddrs() и TransmitFile(), в связи с чем и для них и других функций рекомендован другой подход, не требующий линковки с библиотекой mswsock.lib. Этот прием позволяет непосредственно из DLL загрузить нужную функцию с помощью функции WSAIoctl() и ее команды SIO_GET_EXTENSION_ FUNCTION_POINTER, причем необходимая функция определяется по ее GUID

Цитата

Сокет sAcceptSd должен быть предварительно создан, в результате чего существенно сокращается время обслуживания соединения, так как операция по созданию сокета достаточно трудоемкая и требует много времени. Создание набора сокетов впрок и их последующее использование функцией AcceptEx() и есть ее основное преимущество. Однако здесь есть одна тонкость. Если для обычного accept() возвращаемый им дескриптор относится к сокету, который полностью соответствует по своим характеристикам "прослушивающему" сокету, ибо создается на его основе, то при возврате функции AcceptEx() сокет sAcceptSd имеет по умолчанию статус сокета соединения, но не наследует всех свойств сокета sListenSd до тех пор, пока для этого сокета не выполнена функция setsockopt() с параметром SO_UPDATE_ACCEPT_CONTEXT


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


Фигасе
****


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

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



Во намутили  smile 


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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