
30.07.2009, 03:53
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами:
9023100
Репутация:
395
|
|
а вот так будет выглядеть симбиоз tcpdump-а и фильтра в windows
Код:
#include "stdafx.h"
#include <windows.h>
#define TCPDUMP_PATH "c:\\Downloads\\tcpdump_trial_license\\tcpdump.exe"
#define TCPDUMP_ARG "-t -p -n -i 3 -c100 -w-"
int _tmain(int argc, _TCHAR* argv[])
{
SECURITY_ATTRIBUTES sat;
HANDLE hRead,hWrite;
STARTUPINFO startupinfo;
PROCESS_INFORMATION pinfo;
DWORD cnt=1;
unsigned char buf[1024];
sat.lpSecurityDescriptor=NULL;
sat.nLength=sizeof(SECURITY_ATTRIBUTES);
sat.bInheritHandle=TRUE;
if(CreatePipe(&hRead,&hWrite,&sat,NULL)==NULL){perror("not CreatePipe");}
else {
startupinfo.cb=sizeof(STARTUPINFO);
GetStartupInfo(&startupinfo);
startupinfo.hStdOutput=hWrite;
//startupinfo.hStdError=hWrite;
startupinfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHANDLES;
startupinfo.wShowWindow=SW_HIDE;
if(CreateProcess(TCPDUMP_PATH,TCPDUMP_ARG,
NULL,NULL,TRUE,NULL,NULL,NULL,&startupinfo,&pinfo)==NULL){perror("not CreateProcess");}
else {
CloseHandle(hWrite);
while(1)
{
RtlZeroMemory(&buf,sizeof(buf));
if(ReadFile(hRead,&buf,sizeof(buf)-1,&cnt,NULL)==NULL){break;}
/*--------------------
обработка потока buf
======================*/
}
}
CloseHandle(hRead); }
return 0;
}
вот наткнулся на очень полезную статью по RAW сокетам
длинну передаваемого пакета можно определить по IP заголовку... дальше посмотреть заголовки TCP и если например порты которые мы фильтруем совпадают то вычеслить размер пакета и забрать его полностью из буфера чтения... а дальше анализировать ой как весело зная что это приблизительно за пакет хех )) удаче
|
|
|