Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 26.05.05 08:48
Оценка:
Есть некая клиент серверная система — сервер весит на iis. Нужно отлогировать трафик. Сначала с помощью Detours написал перехват WSASend, WSARecv, send recv ничего не ловится, хотя потестил на ie — там все ок.
Дальше начал цеплятся дебагером к svchost и ставить бряки на WSASend, WSARecv, send recv — тоже никаких результатов.
Цеплялся дебагером к w3wp.exe — никаких результатов.
Запускал разные apy-spy из под админа и localsystem — никаких результатов.


Может кто нибудь знает как таки отловить трафик iis6?
Или может быть можно штатными средставми iis включить логинг всего трафика?

PS решение с proxy не предлагать, потому что клиенты не интересным мне способом выцепляют конфигурацию iis динамически...
... << RSDN@Home 1.1.3 stable >>
Re: Пытаюсь перхватить трафик iis6
От: ship  
Дата: 26.05.05 09:46
Оценка:
Здравствуйте, Vish, Вы писали:

а лог файлы самого iis почему не катят?
Re[2]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 26.05.05 10:22
Оценка:
Здравствуйте, ship, Вы писали:

S>а лог файлы самого iis почему не катят?


Я не нашел такую фичу у iis'а.
Если етсть фича позволяющая весь поток складывать в лог — поделись плиз — буду очень благодарен...
... << RSDN@Home 1.1.3 stable >>
Re[3]: Пытаюсь перхватить трафик iis6
От: ship  
Дата: 26.05.05 11:15
Оценка:
Здравствуйте, Vish, Вы писали:

V>Здравствуйте, ship, Вы писали:


S>>а лог файлы самого iis почему не катят?


V>Я не нашел такую фичу у iis'а.

V>Если етсть фича позволяющая весь поток складывать в лог — поделись плиз — буду очень благодарен...
%SystemRoot%\system32\LogFiles,
соответствие каталогов смотреть в настройках конкрктного сайт на закладке WebSite внизу есть галка Enable Logging там каталог прописан. Для Default Web Site обычно W3SVC1
Re[4]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 26.05.05 11:41
Оценка:
V>>Я не нашел такую фичу у iis'а.
V>>Если етсть фича позволяющая весь поток складывать в лог — поделись плиз — буду очень благодарен...
S>%SystemRoot%\system32\LogFiles,
S>соответствие каталогов смотреть в настройках конкрктного сайт на закладке WebSite внизу есть галка Enable Logging там каталог прописан. Для Default Web Site обычно W3SVC1

Там все включено, в адвансед все галки.
Для урла http://localhost/test/1.txt в лог пишется только:

2005-05-26 11:38:20 W3SVC1 VV 127.0.0.1 GET /test/1.txt — 80 — 127.0.0.1 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+.NET+CLR+1.1.4322) — — localhost 200 0 0 253 307 15


А хочется увидеть все что пришло и ушло в сокет (заголовок и тело).
Может я туплю?
... << RSDN@Home 1.1.3 stable >>
Re[5]: Пытаюсь перхватить трафик iis6
От: ship  
Дата: 26.05.05 11:48
Оценка:
Здравствуйте, Vish, Вы писали:


V>А хочется увидеть все что пришло и ушло в сокет (заголовок и тело).

V>Может я туплю?
Вряд ли в лог такую инфу пихают, вообще то его можно настроить, но все что отдано в лог все равно не запишется, только факт запроса
Re[6]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 26.05.05 12:59
Оценка:
Здравствуйте, ship, Вы писали:

V>>Может я туплю?

S>Вряд ли в лог такую инфу пихают, вообще то его можно настроить, но все что отдано в лог все равно не запишется, только факт запроса


На самом деле логи я проверил первым делом и после того занялся перехватом api.
Таким образо вопрос остается откртым: как же все-таки отмониторить iis6 трафик?
... << RSDN@Home 1.1.3 stable >>
Re: Пытаюсь перхватить трафик iis6
От: Time Россия  
Дата: 26.05.05 15:07
Оценка:
Здравствуйте, Vish.

К сожалению, я не могу помочь Вам. Но дело в том что я сейчас бьюсь над такой же задачей но для IE. Насколько я понял необходимо для процесса iexplore.exe перехватить WSASend, WSARecv, но где менять ссылки на них ибо посмотрел дизассемблером файл iexplore.exe и не увидел там ничего похожего в таблице импорта. Не могли бы Вы меня немного просветить, м.б. дать ссылки на инфу.

Заранее благодарен.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[2]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 27.05.05 09:47
Оценка: 6 (1)
Здравствуйте, Time, Вы писали:

T>Здравствуйте, Vish.


T>К сожалению, я не могу помочь Вам. Но дело в том что я сейчас бьюсь над такой же задачей но для IE. Насколько я понял необходимо для процесса iexplore.exe перехватить WSASend, WSARecv, но где менять ссылки на них ибо посмотрел дизассемблером файл iexplore.exe и не увидел там ничего похожего в таблице импорта. Не могли бы Вы меня немного просветить, м.б. дать ссылки на инфу.


T>Заранее благодарен.


На тебе рыббу!
Рыбба инжектится в процесс експлорера.
Читай доки по detours — там все понятно.

#include <stdio.h>
#include <windows.h>
#include <detours.h>
#include <Winsock2.h>

DETOUR_TRAMPOLINE(int WINAPI SysWSASend(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE),WSASend);
DETOUR_TRAMPOLINE(int WINAPI SysWSARecv(SOCKET,OUT LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE),WSARecv);

DETOUR_TRAMPOLINE(int WINAPI SysSend(SOCKET,const char*,int,int),send);
DETOUR_TRAMPOLINE(int WINAPI SysRecv(SOCKET,OUT char*,int,int),recv);





int WINAPI MyWSASend(
            SOCKET s,
            LPWSABUF lpBuffers,
            DWORD dwBufferCount,
            LPDWORD lpNumberOfBytesSent,
            DWORD dwFlags,
            LPWSAOVERLAPPED lpOverlapped,
            LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
    int iRet = SysWSASend(
                s,
                lpBuffers,
                dwBufferCount,
                lpNumberOfBytesSent,
                dwFlags,
                lpOverlapped,
                lpCompletionRoutine);
    return iRet;
}   


int WINAPI MyWSARecv(
        SOCKET s,
        OUT LPWSABUF lpBuffers,
        DWORD dwBufferCount,
        LPDWORD lpNumberOfBytesRecvd,
        LPDWORD lpFlags,
        LPWSAOVERLAPPED lpOverlapped,
        LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
    return iRet;
    
}

int WINAPI MySend(
           IN SOCKET s,
           IN const char* buf,
           IN int len,
           IN int flags)
{
    int iRet = SysSend(
        s,
        buf,
        len,
        flags);

    return iRet;
}

int WINAPI MyRecv (
                     IN SOCKET s,
                     OUT char* buf,
                     IN int len,
                     IN int flags)
{
    int iRet = SysRecv(
        s,
        buf,
        len,
        flags);
    return iRet;
}




BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
    if (dwReason == DLL_PROCESS_ATTACH) 
    {
    
        DetourFunctionWithTrampoline((PBYTE)SysWSASend, (PBYTE)MyWSASend);
        DetourFunctionWithTrampoline((PBYTE)SysWSARecv, (PBYTE)MyWSARecv);
        DetourFunctionWithTrampoline((PBYTE)SysSend, (PBYTE)MySend);
        DetourFunctionWithTrampoline((PBYTE)SysRecv, (PBYTE)MyRecv);
        
    }
    else if (dwReason == DLL_PROCESS_DETACH) 
    {
        DetourRemove((PBYTE)SysWSASend, (PBYTE)MyWSASend);
        DetourRemove((PBYTE)SysWSARecv, (PBYTE)MyWSARecv);
        DetourRemove((PBYTE)SysSend, (PBYTE)MySend);
        DetourRemove((PBYTE)SysRecv, (PBYTE)MyRecv);
    }
    return TRUE;
}
//
///////////////////////////////////////////////////////////////// End of File.


detours ищи на microsoft.com
... << RSDN@Home 1.1.3 stable >>
Re[3]: Пытаюсь перхватить трафик iis6
От: Time Россия  
Дата: 28.05.05 01:26
Оценка:
Здравствуйте, Vish.

Попробовал, уже как 4 часа маюсь не могу понять в чем дело . Всё сделал по шаблону, работает на ура (в смысле ничего ни плохого не хорошего не замечено, это когда внутри моей функции просто вызов настоящей). Но при малейшем изменении возникает беда: IE просто говорит "Сервер не найден". Вот то что я добавил:

int WINAPI MyWSARecv(
        SOCKET s,
       OUT LPWSABUF lpBuffers,
        DWORD dwBufferCount,
        LPDWORD lpNumberOfBytesRecvd,
        LPDWORD lpFlags,
        LPWSAOVERLAPPED lpOverlapped,
        LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
    int iRet = SysWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
    FILE *f = fopen("d:\\buff", "a+");
    fputs(lpBuffers->buf, f);
    fclose(f);
    return iRet;
}


Извините за беспокойство. Качнул я Detour 1.5 ибо она бесплатная, а там доков то не так уж и много, обясняют только политику партии в общем и приводят названия функций и краткую расшировку зачем используется.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: Пытаюсь перхватить трафик iis6
От: Time Россия  
Дата: 28.05.05 01:58
Оценка:
Странно, а Opera 8 при таком подходе нормально вертится и лог показывается
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re: Пытаюсь перхватить трафик iis6
От: Lonely Dog Россия  
Дата: 29.05.05 16:41
Оценка:
Здравствуйте, Vish, Вы писали:

V>Есть некая клиент серверная система — сервер весит на iis. Нужно отлогировать трафик. Сначала с помощью Detours написал перехват WSASend, WSARecv, send recv ничего не ловится, хотя потестил на ie — там все ок.

V>Дальше начал цеплятся дебагером к svchost и ставить бряки на WSASend, WSARecv, send recv — тоже никаких результатов.
V>Цеплялся дебагером к w3wp.exe — никаких результатов.
V>Запускал разные apy-spy из под админа и localsystem — никаких результатов.
На сколько я знаю, часть iis6 реализована в режиме ядра. Может быть там и происходит то, что вам надо?
Re[4]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 30.05.05 09:03
Оценка:
Здравствуйте, Time, Вы писали:

T>Здравствуйте, Vish.


T>Попробовал, уже как 4 часа маюсь не могу понять в чем дело . Всё сделал по шаблону, работает на ура (в смысле ничего ни плохого не хорошего не замечено, это когда внутри моей функции просто вызов настоящей). Но при малейшем изменении возникает беда: IE просто говорит "Сервер не найден". Вот то что я добавил:


T>
T>int WINAPI MyWSARecv(
T>        SOCKET s,
T>       OUT LPWSABUF lpBuffers,
T>        DWORD dwBufferCount,
T>        LPDWORD lpNumberOfBytesRecvd,
T>        LPDWORD lpFlags,
T>        LPWSAOVERLAPPED lpOverlapped,
T>        LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
T>{
T>    int iRet = SysWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
T>    FILE *f = fopen("d:\\buff", "a+");
T>    fputs(lpBuffers->buf, f);
T>    fclose(f);
T>    return iRet;
T>}  
T>


T>Извините за беспокойство. Качнул я Detour 1.5 ибо она бесплатная, а там доков то не так уж и много, обясняют только политику партии в общем и приводят названия функций и краткую расшировку зачем используется.


    FILE *f = fopen("d:\\buff", "a+");
>>    fputs(lpBuffers->buf, f);
    fclose(f);



С сокетами давно уже не баловался...

Читаем МSDN:

lpBuffers
[in, out] Pointer to an array of WSABUF structures. Each WSABUF structure contains a pointer to a buffer and the length of the buffer, in bytes.
dwBufferCount
[in] Number of WSABUF structures in the lpBuffers array.


Вот тут вполне может улететь какой-нить av потому что:

1) Вроде бы не гарантировано что lpBuffers не NULL — проверяй dwBufferCount
2) Вроде бы не гарантировано lpBuffers[...].buf NULL — проверяй lpBuffers[...].len
3) lpBuffers[...].buf не заканчивается нулем,юзай fwrite.

Про detours ничего рассказыать не буду Бо рыба работает, а самлов в detours много, и дока есть
... << RSDN@Home 1.1.3 stable >>
Re[2]: Пытаюсь перхватить трафик iis6
От: Vish  
Дата: 30.05.05 09:03
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Здравствуйте, Vish, Вы писали:


V>>Цеплялся дебагером к w3wp.exe — никаких результатов.

V>>Запускал разные apy-spy из под админа и localsystem — никаких результатов.
LD>На сколько я знаю, часть iis6 реализована в режиме ядра. Может быть там и происходит то, что вам надо?

Ага слышал это — неповерил
Очень на то похоже... Почитаю на досуге — пока заюзал снифер.
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.