информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?Все любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Notepad++ полгода раздавал зараженные... 
 Китайский прорыв из ESXi 
 С наступающим 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Проблема с сниффером под XP 05.03.03 08:11  
Автор: Tamas Статус: Member
<"чистая" ссылка>
в обшем вопрос такой как зделать что бы прехватывались пакеты не толко те которые приходят ко мне но и пакеты которые уходят от меня ???

делаю следушие
OS Win XP Pro
компилятор Lcc-Win32

#include <stdio.h>
#include <stdbool.h>
#include <windows.h>
#include <winsock2.h>
#include <mstcpip.h>

#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)

struct SSOCKET_ADDRESS_LIST
{
int iAddressCount;
SOCKET_ADDRESS Address[255];
};
typedef struct SSOCKET_ADDRESS_LIST SOCKET_ADDRESS_LIST;

#define NET_ADAPTER_NUM 0
#define MAX_PACKET_SIZE 0x10000

struct SIPHEADER
{
unsigned char VerLen;
unsigned char ServiceType;
unsigned short PacketLength;
unsigned short Id;
unsigned short Offset;
unsigned char TTL;
unsigned char Protocol;
unsigned short XSum;
unsigned char SrcIP[4];
unsigned char DestIP[4];
};
typedef struct SIPHEADER IPHEADER;

struct SIPPACKET
{
unsigned char Header[sizeof(IPHEADER)];
unsigned char Data[MAX_PACKET_SIZE];
};
typedef struct SIPPACKET IPPACKET;

bool main()
{
SOCKET SocketAddr;
SOCKET SocketBind;
SOCKET_ADDRESS_LIST AddrList;
WSADATA WSAData;
SOCKADDR_IN LocalAddr;

IPPACKET IPPacket;
IPHEADER IPHeader;

unsigned char AddrBuffer[2048];
unsigned long AddrRet;
unsigned long Recl;

int RecvOpt;

if(WSAStartup(MAKEWORD(2,2),&WSAData))return false;

if(LOBYTE(WSAData.wVersion)>=2)
{
if(LOBYTE(WSAData.wHighVersion)<2)return false;
}
else
{
return false;
}

LocalAddr.sin_family=AF_INET;

if((SocketAddr=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==INVALID_SOCKET)return false;

if(WSAIoctl(SocketAddr,SIO_ADDRESS_LIST_QUERY,NULL,0,(void *)&AddrList,sizeof(AddrList),&AddrRet,NULL,NULL)==SOCKET_ERROR)
{
closesocket(SocketAddr);
return false;
}

if(NET_ADAPTER_NUM>=AddrList.iAddressCount)
{
closesocket(SocketAddr);
return false;
}

LocalAddr.sin_addr.s_addr=((SOCKADDR_IN *)AddrList.Address[NET_ADAPTER_NUM].lpSockaddr)->sin_addr.s_addr;

closesocket(SocketAddr);

if((SocketBind=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET)return false;

if(bind(SocketBind,(SOCKADDR *)&LocalAddr,sizeof(LocalAddr))==SOCKET_ERROR)
{
closesocket(SocketBind);
return false;
}

RecvOpt=RCVALL_ON;

ioctlsocket(SocketBind,SIO_RCVALL,&RecvOpt);

ZeroMemory(&IPPacket,sizeof(IPPacket));
ZeroMemory(&IPHeader,sizeof(IPHeader));

while((Recl=recv(SocketBind,(unsigned char *)&IPPacket,sizeof(IPPacket),0))!=SOCKET_ERROR)
{
if(Recl>=sizeof(IPHEADER))
{
memcpy(&IPHeader,&IPPacket.Header,sizeof(IPHEADER));

printf("%d.%d.%d.%d -> %d.%d.%d.%d\n",IPHeader.SrcIP[0],IPHeader.SrcIP[1],IPHeader.SrcIP[2],IPHeader.SrcIP[3]
,IPHeader.DestIP[0],IPHeader.DestIP[1],IPHeader.DestIP[2],IPHeader.DestIP[3]);

}

ZeroMemory(&IPPacket,sizeof(IPPacket));
ZeroMemory(&IPHeader,sizeof(IPHeader));
}

closesocket(SocketBind);
WSACleanup();

return true;
}
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach