[Archivе] [Archivе]
CyberGods_Alice 16 сен 2015
http сниффер
использовано visual c++
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#define MAX_PACKET_SIZE 0x10000
#define SIO_RCVALL 0x98000001
// Буфер для приёма данных
//char Buffer[MAX_PACKET_SIZE]; // 64 Kb
char *buffer;
char *data;
char *s_http;
char http_req1[] = "GET /";
char http_req2[] = "POST /";
FILE *stream = NULL;
void print_log(char *msg)
{
struct tm *ptr = NULL;
time_t lt;
lt = time(NULL);
ptr = localtime(<);
fprintf(stream,"\n>>> Detected HTTP-request %s\n",asctime(ptr));
fprintf(stream,"%s\n",msg);
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
//Структура заголовка IP-пакета
typedef struct IPHeader {
UCHAR iph_verlen; // версия и длина заголовка
UCHAR iph_tos; // тип сервиса
USHORT iph_length; // длина всего пакета
USHORT iph_id; // Идентификация
USHORT iph_offset; // флаги и смещения
UCHAR iph_ttl; // время жизни пакета
UCHAR iph_protocol; // протокол
USHORT iph_xsum; // контрольная сумма
ULONG iph_src; // IP-адрес отправителя
ULONG iph_dest; // IP-адрес назначения
ULONG iph_res1; // res1
ULONG iph_res2; // res2
} IPHeader;
char src[10] = "\0";
char dest[10] = "\0";
unsigned short lowbyte;
unsigned short hibyte;
USHORT hdr_size = sizeof(IPHeader); // 28 bytes
WSADATA wsadata; // Инициализация WinSock.
SOCKET s; // Cлущающий сокет.
char name[128]; // Имя хоста (компьютера).
HOSTENT* phe; // Информация о хосте.
SOCKADDR_IN sa; // Адрес хоста
//IN_ADDR sa1; //
unsigned long flag = 1; // Флаг PROMISC Вкл/выкл.
printf("HTTP-monitor v.1.0 W32\n(c) 2012 Dmitry Rusov 2509094@mail.ru\nUsage: %s [log file]\n",argv[0]);
if (argc <= 1)
{
printf("Log file not specified. Using stdout.\n");
stream = stdout;
} else
{
if ((stream = fopen( argv[1], "w" )) == NULL)
{
printf("Cannot open file: `%s'. Using stdout.\n",argv[1]);
stream = stdout;
} else
printf("Using log file: `%s'.\n",argv[1]);
}
// инициализация
int res;
res = WSAStartup(MAKEWORD(2,2), &wsadata);
if (res != NO_ERROR) {
printf("WSAStartup failed: %d\n", res);
exit(1);
}
s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
if (s == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
exit(1);
}
gethostname(name, sizeof(name));
phe = gethostbyname( name );
ZeroMemory( &sa, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
res = bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
if (res != NO_ERROR) {
printf("bind socket failed: %d\n", res);
exit(1);
}
printf("Listeing on: %s\n",inet_ntoa(sa.sin_addr));
// Включение promiscuous mode.
ioctlsocket(s, SIO_RCVALL, &flag);
while( TRUE )
{
int count;
buffer = (char *)malloc(MAX_PACKET_SIZE+1);
count = recv( s, (char *)buffer, MAX_PACKET_SIZE, 0 );
if( count < sizeof(IPHeader) ) break;
IPHeader* hdr;
hdr = (IPHeader *)malloc(sizeof(IPHeader));
memcpy(hdr,buffer,sizeof(IPHeader));
memset(buffer,'>',sizeof(IPHeader));
lowbyte = hdr->iph_length>>8;
hibyte = hdr->iph_length<<8;
hibyte = hibyte + lowbyte;
//printf("%u",hibyte);
if (count != hibyte)
{
printf("\nIncorrect pkt size. read=%d len=%d\n", count, hibyte);
free(hdr);
free(buffer);
break;
}
USHORT data_size = hibyte - hdr_size;
data = (char *)malloc(data_size+1);
int i;
for (i=0; i<data_size; i++)
{
if (buffer[i+hdr_size])
data[i] = buffer[i+hdr_size]; else
data[i] = ' ';
}
data[data_size] = '\0';
if ((s_http = strstr(data, http_req2)) != NULL) print_log(s_http);
if ((s_http = strstr(data, http_req1)) != NULL) print_log(s_http);
free(hdr);
free(buffer);
free(data);
}
closesocket( s );
WSACleanup();
return 0;
}
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#define MAX_PACKET_SIZE 0x10000
#define SIO_RCVALL 0x98000001
// Буфер для приёма данных
//char Buffer[MAX_PACKET_SIZE]; // 64 Kb
char *buffer;
char *data;
char *s_http;
char http_req1[] = "GET /";
char http_req2[] = "POST /";
FILE *stream = NULL;
void print_log(char *msg)
{
struct tm *ptr = NULL;
time_t lt;
lt = time(NULL);
ptr = localtime(<);
fprintf(stream,"\n>>> Detected HTTP-request %s\n",asctime(ptr));
fprintf(stream,"%s\n",msg);
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
//Структура заголовка IP-пакета
typedef struct IPHeader {
UCHAR iph_verlen; // версия и длина заголовка
UCHAR iph_tos; // тип сервиса
USHORT iph_length; // длина всего пакета
USHORT iph_id; // Идентификация
USHORT iph_offset; // флаги и смещения
UCHAR iph_ttl; // время жизни пакета
UCHAR iph_protocol; // протокол
USHORT iph_xsum; // контрольная сумма
ULONG iph_src; // IP-адрес отправителя
ULONG iph_dest; // IP-адрес назначения
ULONG iph_res1; // res1
ULONG iph_res2; // res2
} IPHeader;
char src[10] = "\0";
char dest[10] = "\0";
unsigned short lowbyte;
unsigned short hibyte;
USHORT hdr_size = sizeof(IPHeader); // 28 bytes
WSADATA wsadata; // Инициализация WinSock.
SOCKET s; // Cлущающий сокет.
char name[128]; // Имя хоста (компьютера).
HOSTENT* phe; // Информация о хосте.
SOCKADDR_IN sa; // Адрес хоста
//IN_ADDR sa1; //
unsigned long flag = 1; // Флаг PROMISC Вкл/выкл.
printf("HTTP-monitor v.1.0 W32\n(c) 2012 Dmitry Rusov 2509094@mail.ru\nUsage: %s [log file]\n",argv[0]);
if (argc <= 1)
{
printf("Log file not specified. Using stdout.\n");
stream = stdout;
} else
{
if ((stream = fopen( argv[1], "w" )) == NULL)
{
printf("Cannot open file: `%s'. Using stdout.\n",argv[1]);
stream = stdout;
} else
printf("Using log file: `%s'.\n",argv[1]);
}
// инициализация
int res;
res = WSAStartup(MAKEWORD(2,2), &wsadata);
if (res != NO_ERROR) {
printf("WSAStartup failed: %d\n", res);
exit(1);
}
s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
if (s == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
exit(1);
}
gethostname(name, sizeof(name));
phe = gethostbyname( name );
ZeroMemory( &sa, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
res = bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
if (res != NO_ERROR) {
printf("bind socket failed: %d\n", res);
exit(1);
}
printf("Listeing on: %s\n",inet_ntoa(sa.sin_addr));
// Включение promiscuous mode.
ioctlsocket(s, SIO_RCVALL, &flag);
while( TRUE )
{
int count;
buffer = (char *)malloc(MAX_PACKET_SIZE+1);
count = recv( s, (char *)buffer, MAX_PACKET_SIZE, 0 );
if( count < sizeof(IPHeader) ) break;
IPHeader* hdr;
hdr = (IPHeader *)malloc(sizeof(IPHeader));
memcpy(hdr,buffer,sizeof(IPHeader));
memset(buffer,'>',sizeof(IPHeader));
lowbyte = hdr->iph_length>>8;
hibyte = hdr->iph_length<<8;
hibyte = hibyte + lowbyte;
//printf("%u",hibyte);
if (count != hibyte)
{
printf("\nIncorrect pkt size. read=%d len=%d\n", count, hibyte);
free(hdr);
free(buffer);
break;
}
USHORT data_size = hibyte - hdr_size;
data = (char *)malloc(data_size+1);
int i;
for (i=0; i<data_size; i++)
{
if (buffer[i+hdr_size])
data[i] = buffer[i+hdr_size]; else
data[i] = ' ';
}
data[data_size] = '\0';
if ((s_http = strstr(data, http_req2)) != NULL) print_log(s_http);
if ((s_http = strstr(data, http_req1)) != NULL) print_log(s_http);
free(hdr);
free(buffer);
free(data);
}
closesocket( s );
WSACleanup();
return 0;
}
0 1 0
Для добавления комментариев необходимо авторизоваться
Родная деревня
Так увлекательно вести хозяйство Вам ещё никогда...