информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
вот пример сниффера... этот работает...(Lcc-Win32) 20.10.06 01:14  Число просмотров: 2941
Автор: Tamas Статус: Member
<"чистая" ссылка>
вот пример сниффера... этот работает...(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 %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],IPHeader.Protocol,Recl);

}

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

closesocket(SocketBind);
WSACleanup();

return true;
}
<programming>
[C++] TCP RAW 19.10.06 23:01  
Автор: fidel Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Не получается наначать работу с RAW socket. После установки свойств сокета функцией WSAIoctl возвращается ошибка 10022.(Типа не правельны какие-то параметры.)

void RecvPacket()
{
SOCKET sock;
WSADATA wsd;
char RecvBuf[65535] = {0};
DWORD dwBytesRet;
unsigned int optval = 1;

WSAStartup(MAKEWORD(2,1),&wsd);

sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

char FAR name[MAX_HOSTNAME_LAN];
gethostname(name, MAX_HOSTNAME_LAN);

struct hostent FAR * pHostent;
pHostent = (struct hostent * )malloc(sizeof(struct hostent));
pHostent = gethostbyname(name);

SOCKADDR_IN sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(600);

memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);

int err=bind(sock, (SOCKADDR *)&sa, sizeof(sa));
if(err==0){MessageBox(0,"Bind OK","",0);};
ZeroMemory(&dwBytesRet,sizeof(dwBytesRet));

err=WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NULL,NULL,&dwBytesRet, NULL, NULL);
if(err==0){MessageBox(0,"","",0);};
err=WSAGetLastError();

while (1)
{
memset(RecvBuf, 0, sizeof(RecvBuf));

recv(sock, RecvBuf, sizeof(RecvBuf), 0);

}
сниффер можно установить только на реальный интерфейс...так... 20.10.06 01:16  
Автор: Tamas Статус: Member
<"чистая" ссылка>
сниффер можно установить только на реальный интерфейс...так что gethostname(name, MAX_HOSTNAME_LAN); не прокатит

> Не получается наначать работу с RAW socket. После установки
> свойств сокета функцией WSAIoctl возвращается ошибка
> 10022.(Типа не правельны какие-то параметры.)
>
> void RecvPacket()
> {
> SOCKET sock;
> WSADATA wsd;
> char RecvBuf[65535] = {0};
> DWORD dwBytesRet;
> unsigned int optval = 1;
>
> WSAStartup(MAKEWORD(2,1),&wsd);
>
> sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
>
> char FAR name[MAX_HOSTNAME_LAN];
> gethostname(name, MAX_HOSTNAME_LAN);
>
> struct hostent FAR * pHostent;
> pHostent = (struct hostent * )malloc(sizeof(struct
> hostent));
> pHostent = gethostbyname(name);
>
> SOCKADDR_IN sa;
> sa.sin_family = AF_INET;
> sa.sin_port = htons(600);
>
> memcpy(&sa.sin_addr.S_un.S_addr,
> pHostent->h_addr_list[0], pHostent->h_length);
>
> int err=bind(sock, (SOCKADDR *)&sa,
> sizeof(sa));
> if(err==0){MessageBox(0,"Bind OK","",0);};
> ZeroMemory(&dwBytesRet,sizeof(dwBytesRet));
>
> err=WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NUL
> L,NULL,&dwBytesRet, NULL, NULL);
> if(err==0){MessageBox(0,"","",0);};
> err=WSAGetLastError();
>
> while (1)
> {
> memset(RecvBuf, 0, sizeof(RecvBuf));
>
> recv(sock, RecvBuf, sizeof(RecvBuf), 0);
>
> }
вот пример сниффера... этот работает...(Lcc-Win32) 20.10.06 01:14  
Автор: Tamas Статус: Member
<"чистая" ссылка>
вот пример сниффера... этот работает...(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 %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],IPHeader.Protocol,Recl);

}

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

closesocket(SocketBind);
WSACleanup();

return true;
}
1




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


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach