Показать сообщение отдельно

  #10  
Старый 30.07.2009, 03:53
Gar|k
Постоянный
Регистрация: 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 и если например порты которые мы фильтруем совпадают то вычеслить размер пакета и забрать его полностью из буфера чтения... а дальше анализировать ой как весело зная что это приблизительно за пакет хех )) удаче
 
Ответить с цитированием