АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Тексти програм

Читайте также:
  1. Creating a VHDL Source (создание файла, содержащего текст программы на языке VHDL).
  2. II-й этап: Гала – концерт 25 июня 2013года. В программе празднования Дня города.
  3. II. Требования к структуре образовательной программы дошкольного образования и ее объему
  4. III. Обучение по образовательным программам
  5. III. ПРОГРАМА НАВЧАЛЬНОЇ ТА ВИРОБНИЧОЇ ПРАКТИКИ В ОРГАНАХ ДЕРЖАВНОЇ ВИКОНАВЧОЇ СЛУЖБИ УКРАЇНИ
  6. III. Требования к условиям реализации основной образовательной программы дошкольного образования
  7. IV ПРОГРАМА ПРАКТИКИ
  8. IV. Программа соревнований
  9. IV. Требования к результатам освоения основной образовательной программы дошкольного образования
  10. SWOT-анализ раздела «Цели образовательной программы»
  11. USB программатор ЭБУ.
  12. V. КРОССВОРД «ПУТЕШЕСТВИЕ ПО ТЕАТРАЛЬНОЙ ПРОГРАММКЕ»

 

Текст програми Сервер

 

// sniff.cpp : Defines the entry point for the application.

//

 

#include "stdafx.h"

 

//Функция обработки сообщений диалогового окна

INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

static HANDLE hLogFile;

static SOCKET s;

 

static HWND hStartButton;

static HWND hStopButton;

 

static HWND hIDC_CHECK_PROTO_IGMPWnd;

 

static HWND hIDC_CHECK_OPTION_LOG_TARGET_IPWnd;

static HWND hIDC_CHECK_OPTION_LOG_SENDER_IPWnd;

static HWND hIDC_CHECK_OPTION_WRITE_PROTO_NAMEWnd;

static HWND hIDC_CHECK_OPTION_WRITE_PACKET_LENWnd;

 

static HWND hIDC_EDIT_LOG_FILENAMEWnd;

 

SYSTEMTIME st;

char time[20];

char *token;

int hms[3];

int count =0;

char AMPM[3];

 

switch (uMsg) {

case WM_INITDIALOG:

 

CheckDlgButton(hwndDlg, IDC_CHECK_PROTO_ALL, BST_CHECKED);

CheckDlgButton(hwndDlg, IDC_CHECK_OPTION_LOG_TARGET_IP, BST_CHECKED);

CheckDlgButton(hwndDlg, IDC_CHECK_OPTION_LOG_SENDER_IP, BST_CHECKED);

CheckDlgButton(hwndDlg, IDC_CHECK_OPTION_WRITE_PROTO_NAME, BST_CHECKED);

CheckDlgButton(hwndDlg, IDC_CHECK_OPTION_WRITE_PACKET_LEN, BST_CHECKED);

 

SendDlgItemMessage(hwndDlg, IDC_EDIT_LOG_FILENAME, EM_LIMITTEXT, _MAX_FNAME - 1, 0);

SetDlgItemText(hwndDlg, IDC_EDIT_LOG_FILENAME, "sniff.log");

 

hStartButton = GetDlgItem(hwndDlg, IDC_BUTTON_START);

hStopButton = GetDlgItem(hwndDlg, IDC_BUTTON_STOP);

hIDC_CHECK_PROTO_IGMPWnd = GetDlgItem(hwndDlg, IDC_CHECK_PROTO_IGMP);

 

hIDC_CHECK_OPTION_LOG_TARGET_IPWnd = GetDlgItem(hwndDlg, IDC_CHECK_OPTION_LOG_TARGET_IP);

hIDC_CHECK_OPTION_LOG_SENDER_IPWnd = GetDlgItem(hwndDlg, IDC_CHECK_OPTION_LOG_SENDER_IP);

hIDC_CHECK_OPTION_WRITE_PROTO_NAMEWnd = GetDlgItem(hwndDlg, IDC_CHECK_OPTION_WRITE_PROTO_NAME);

hIDC_CHECK_OPTION_WRITE_PACKET_LENWnd = GetDlgItem(hwndDlg, IDC_CHECK_OPTION_WRITE_PACKET_LEN);

 

hIDC_EDIT_LOG_FILENAMEWnd = GetDlgItem(hwndDlg, IDC_EDIT_LOG_FILENAME);

 

WSADATA wsadata;

 

//Инициализация сокетов

if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается инициализировать сокеты.");



} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Сокеты инициализированы.");

}

 

//Создание сокета

s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

if (s == INVALID_SOCKET) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается создать сокет.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Сокет создан.");

 

CHAR szHostName[16];

 

//Получение имени локального хоста

if (gethostname(szHostName, sizeof szHostName) != 0) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается определить имя хоста.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Имя хоста получено.");

 

//Получение информаций о локальном хосте

HOSTENT *phe = gethostbyname(szHostName);

 

if (phe == NULL) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается получить описание хоста.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Описание хоста получено.");

 

SOCKADDR_IN sa; //Адрес хоста

 

ZeroMemory(&sa,sizeof sa);

sa.sin_family = AF_INET;

sa.sin_addr.s_addr = ((struct in_addr*)phe->h_addr_list[0])->s_addr;

 

//Связывание локального адреса и сокета

if (bind(s, (SOCKADDR*)&sa, sizeof SOCKADDR) != 0) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается осуществить привязку сокета.");;

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Сокет привязан.");

 

//Включение promiscuous mode

DWORD flag = TRUE; //Флаг PROMISC Вкл/Выкл

 

if (ioctlsocket(s, SIO_RCVALL, &flag) == SOCKET_ERROR) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается включить режим promiscuous.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Режим promiscuous включен.");

 

‡агрузка...

//Разблокирование кнопки "Старт"

EnableWindow(hStartButton, TRUE);

}

}

}

}

}

return TRUE;

 

case WM_COMMAND:

switch (HIWORD(wParam)) {

case EN_UPDATE:

if (LOWORD(wParam) == IDC_EDIT_LOG_FILENAME) {

CHAR szFileName[_MAX_FNAME];

DWORD dwFileSize = 0;

 

GetDlgItemText(hwndDlg, IDC_EDIT_LOG_FILENAME, szFileName, _MAX_FNAME);

 

HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);

if (hFile != INVALID_HANDLE_VALUE) {

dwFileSize = GetFileSize(hFile, NULL);

CloseHandle(hFile);

}

SetDlgItemInt(hwndDlg, IDC_EDIT_LOG_SIZE, dwFileSize, FALSE);

}

break;

}

 

switch (LOWORD(wParam)) {

case IDC_CHECK_PROTO_ALL: {

BOOL bChecked = IsDlgButtonChecked(hwndDlg, IDC_CHECK_PROTO_ALL);

 

EnableWindow(hIDC_CHECK_PROTO_IGMPWnd, !bChecked);

}

break;

 

case IDC_BUTTON_START:

//Создаем файл лога

CHAR szFileName[_MAX_FNAME];

 

GetDlgItemText(hwndDlg, IDC_EDIT_LOG_FILENAME, szFileName, _MAX_FNAME);

 

hLogFile = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, 0);

if (hLogFile == INVALID_HANDLE_VALUE) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается создать лог-файл.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Лог-файл создан (открыт).");

 

SetFilePointer(hLogFile, 0, NULL, FILE_END);

 

EnableWindow(hStartButton, FALSE);

EnableWindow(hStopButton, TRUE);

 

EnableWindow(hIDC_CHECK_PROTO_IGMPWnd, FALSE);

 

EnableWindow(hIDC_CHECK_OPTION_LOG_TARGET_IPWnd, FALSE);

EnableWindow(hIDC_CHECK_OPTION_LOG_SENDER_IPWnd, FALSE);

EnableWindow(hIDC_CHECK_OPTION_WRITE_PROTO_NAMEWnd, FALSE);

EnableWindow(hIDC_CHECK_OPTION_WRITE_PACKET_LENWnd, FALSE);

 

EnableWindow(hIDC_EDIT_LOG_FILENAMEWnd, FALSE);

 

//Связываем событие FD_READ с окном

WSAAsyncSelect(s, hwndDlg, WM_RECV, FD_READ);

 

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Прием пакетов.");

}

break;

 

case IDC_BUTTON_STOP:

DWORD flag;

BOOL bChecked;

 

CloseHandle(hLogFile);

 

EnableWindow(hIDC_EDIT_LOG_FILENAMEWnd, TRUE);

 

EnableWindow(hIDC_CHECK_OPTION_LOG_TARGET_IPWnd, TRUE);

EnableWindow(hIDC_CHECK_OPTION_LOG_SENDER_IPWnd, TRUE);

EnableWindow(hIDC_CHECK_OPTION_WRITE_PROTO_NAMEWnd, TRUE);

EnableWindow(hIDC_CHECK_OPTION_WRITE_PACKET_LENWnd, TRUE);

 

EnableWindow(hStopButton, FALSE);

 

//EnableWindow(hIDC_CHECK_PROTO_ALLWnd, TRUE);

EnableWindow(hIDC_CHECK_PROTO_IGMPWnd, TRUE);

 

bChecked = IsDlgButtonChecked(hwndDlg, IDC_CHECK_PROTO_ALL);

 

EnableWindow(hIDC_CHECK_PROTO_IGMPWnd, !bChecked);

 

//Включение promiscuous mode

flag = TRUE; //Флаг PROMISC Вкл/Выкл

 

if (ioctlsocket(s, SIO_RCVALL, &flag) == SOCKET_ERROR) {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Ошибка. Не удается включить режим promiscuous.");

} else {

SetDlgItemText(hwndDlg, IDC_EDIT_STATUS, "Режим promiscuous включен.");

 

EnableWindow(hStartButton, TRUE);

}

 

break;

 

case IDC_BUTTON_ABOUT:

DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hwndDlg, AboutDialogProc);

break;

 

case IDC_BUTTON_CLOSE:

SendMessage(hwndDlg, WM_CLOSE, 0, 0);

break;

}

return TRUE;

 

case WM_RECV:

if (WSAGETSELECTERROR(lParam)) {

} else {

if (WSAGETSELECTEVENT(lParam) == FD_READ) {

//Буфер размера 64 Кб

CHAR btBuffer[65536];

 

//Получаем входящие данные

if (recv(s, btBuffer, sizeof(btBuffer), 0) >= sizeof(IPHeader)) {

IPHeader* hdr = (IPHeader*)btBuffer;

 

//Вычисляем размер. Т.к. в сети принят прямой порядок байт,

//а не обратный, то придется поменять байты местами.

WORD size = (hdr->iph_length << 8) + (hdr->iph_length >> 8);

 

//Получен пакет?

if (size >= 60 && size <= 1500) {

 

memset(time,0,20);

memset(AMPM,0,3);

get the local time

GetLocalTime(&st);

GetTimeFormat(0,LOCALE_NOUSEROVERRIDE,&st,NULL,time,sizeof(time));

 

//Проверяем протокол

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_PROTO_ALL) != TRUE) {

if (hdr->iph_protocol == IPPROTO_IGMP && IsDlgButtonChecked(hwndDlg, IDC_CHECK_PROTO_IGMP) == TRUE) {

return TRUE;

}

}

 

DWORD dwWritten;

 

//Записываем данные

WriteFile(hLogFile, "--Packet begin--\r\n", 18, &dwWritten, 0);

 

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_LOG_TARGET_IP) == TRUE) {

IN_ADDR ia;

 

ia.s_addr = hdr->iph_dest;

CHAR *pszTargetIP = inet_ntoa(ia);

 

WriteFile(hLogFile, "To: ", 4, &dwWritten, 0);

WriteFile(hLogFile, pszTargetIP, lstrlen(pszTargetIP), &dwWritten, 0);

WriteFile(hLogFile, "\r\n", 2, &dwWritten, 0);

}

 

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_LOG_SENDER_IP) == TRUE) {

IN_ADDR ia;

 

ia.s_addr = hdr->iph_src;

CHAR *pszSourceIP = inet_ntoa(ia);

 

WriteFile(hLogFile, "From: ", 6, &dwWritten, 0);

WriteFile(hLogFile, pszSourceIP, lstrlen(pszSourceIP), &dwWritten, 0);

WriteFile(hLogFile, "\r\n", 2, &dwWritten, 0);

}

 

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_WRITE_PROTO_NAME) == TRUE) {

WriteFile(hLogFile, "Protocol: ", 10, &dwWritten, 0);

 

switch (hdr->iph_protocol) {

 

case IPPROTO_IGMP:

WriteFile(hLogFile, "IGMP\r\n", 6, &dwWritten, 0);

break;

 

}

}

 

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_WRITE_PACKET_LEN) == TRUE) {

CHAR szTemp[17];

 

WriteFile(hLogFile, "Packet length: ", 15, &dwWritten, 0);

wsprintf(szTemp, "%d\r\n", size);

WriteFile(hLogFile, szTemp, lstrlen(szTemp), &dwWritten, 0);

}

 

WriteFile(hLogFile, "Contents:\r\n\r\n", 13, &dwWritten, 0);

WriteFile(hLogFile, &btBuffer[sizeof(IPHeader) * 2], size - sizeof(IPHeader) * 2, &dwWritten, 0);

WriteFile(hLogFile, "\r\n--Packet end--\r\n", 18, &dwWritten, 0);

 

SetDlgItemInt(hwndDlg, IDC_EDIT_LOG_SIZE, GetFileSize(hLogFile, NULL), FALSE);

}

}

}

}

return TRUE;

 

case WM_CLOSE:

//Конец работы с сокетами

closesocket(s);

WSACleanup();

 

//Конец работы с логом

CloseHandle(hLogFile);

 

//Закрытие окна

EndDialog(hwndDlg, 0);

return TRUE;

}

return FALSE;

}

 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

//Проверяем версию системы

if (LOBYTE(LOWORD(GetVersion())) < 5) {

MessageBox(0, "Данный сниффер работает только в системе Windows 2000 и младше.", "sniff", MB_ICONEXCLAMATION);

return 0;

}

 

//Проверяем, что запущен единственный процесс сниффера

if (AreWeAlone("-=sniff=-") == FALSE) {

MessageBox(0, "Сниффер уже запущен.", "sniff", MB_ICONEXCLAMATION);

return 0;

}

 

//Устанавливаем текущую директорию

CHAR szCurDir[MAX_PATH];

 

GetModuleFileName(NULL, szCurDir, MAX_PATH);

*strrchr(szCurDir, '\\') = 0;

SetCurrentDirectory(szCurDir);

 

if (IsCurrentUserAdmin() == FALSE) {

MessageBox(0, "У Вас нет прав администратора. Вы не сможете включить promiscuous mode.", "sniff", MB_ICONEXCLAMATION);

}

 

//Создаем главное окно программы

if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc) != 0) {

MessageBox(0, "Не удается создать главное окно сниффера.", "sniff", MB_ICONERROR);

return 0;

}

return 0;

}

 

Текст програми Клієнт

// c.cpp : Defines the entry point for the application.

//

#include <winsock2.h>

#include <ws2tcpip.h>

#include <stdio.h>

#include "stdafx.h"

#include "c.h"

#include <string.h>

#include <stdlib.h>

 

SYSTEMTIME st;

char time[20];

char *token;

int hms[3];

int count =0;

char AMPM[3];

 

struct iphdr

{

unsigned char ihl:4, version:4, tos;

unsigned short tot_len, id, frag_off;

unsigned char ttl, protocol;

unsigned short check;

unsigned int saddr, daddr;

};

 

struct igmphdr

{

unsigned char type, code;

unsigned short cksum;

struct in_addr group;

};

 

unsigned short in_chksum(unsigned short *, int);

long resolve(char *);

 

long resolve(char *host)

{

struct hostent *hst;

long addr;

 

hst = gethostbyname(host);

if (hst == NULL)

return(-1);

 

memcpy(&addr, hst->h_addr, hst->h_length);

 

return(addr);

}

 

#define MAX_LOADSTRING 100

 

// Global Variables:

HINSTANCE hInst; // current instance

TCHAR szTitle[MAX_LOADSTRING]; // The title bar text

TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

 

// Forward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

 

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

 

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

 

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_C, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

 

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_C));

 

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

 

return (int) msg.wParam;

}

 

//

// FUNCTION: MyRegisterClass()

//

// PURPOSE: Registers the window class.

//

// COMMENTS:

//

// This function and its usage are only necessary if you want this code

// to be compatible with Win32 systems prior to the 'RegisterClassEx'

// function that was added to Windows 95. It is important to call this function

// so that the application will get 'well formed' small icons associated

// with it.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

 

wcex.cbSize = sizeof(WNDCLASSEX);

 

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_C));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_C);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

 

return RegisterClassEx(&wcex);

}

 

//

// FUNCTION: InitInstance(HINSTANCE, int)

//

// PURPOSE: Saves instance handle and creates main window

//

// COMMENTS:

//

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

 

hInst = hInstance; // Store instance handle in our global variable

 

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

 

if (!hWnd)

{

return FALSE;

}

 

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

 

return TRUE;

}

 

//

// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)

//

// PURPOSE: Processes messages for the main window.

//

// WM_COMMAND - process the application menu

// WM_PAINT - Paint the main window

// WM_DESTROY - post a quit message and return

//

//

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

 

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Parse the menu selections:

switch (wmId)

{

case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

 

memset(time,0,20);

memset(AMPM,0,3);

get the local time

GetLocalTime(&st);

GetTimeFormat(0,LOCALE_NOUSEROVERRIDE,&st,NULL,time,sizeof(time));

 

token = strtok( time, " :" );

while( token != NULL )

{

if(count<3)

{

hms[count]=atoi(token);

cout<<hms[count]<<endl;

}

else

{

strcpy(AMPM,token);

cout<<AMPM;

}

//increase the count

count++;

// Get next token

token = strtok( NULL, " :" );

}

 

struct sockaddr_in dst;

struct iphdr *ip;

struct igmphdr *igmp;

long daddr, saddr;

int s, i=0, c, len;

char buf[1500] = time;

daddr = resolve('127.0.0.1');

saddr = resolve('127.0.0.1');

 

memset(buf, 0, 1500);

ip = (struct iphdr *)&buf;

igmp = (struct igmphdr *)&buf[sizeof(struct iphdr)];

 

dst.sin_addr.s_addr = daddr;

dst.sin_family = AF_INET;

 

ip->ihl = 5;

ip->version = 4;

ip->tos = 0;

ip->tot_len = htons(10933);

ip->id = htons(48648);

ip->ttl = 64;

ip->protocol = IPPROTO_IGMP;

ip->check = in_chksum((unsigned short *)ip, sizeof(struct

iphdr));

ip->saddr = saddr;

ip->daddr = daddr;

 

s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

if (s == -1)

return(1);

 

for (c=0;c<2;c++)

{

len = 220;

ip->frag_off = htons(0x73a);

 

for (i=0;;i++)

{

if (sendto(s,&buf,len,0,(struct sockaddr *)&dst,sizeof

(struct sockaddr_in)) == -1)

{

perror("Error sending packet");

exit(-1);

}

if (ntohs(ip->frag_off) == 0x2000)

break;

len = 1500;

if (!i)

ip->frag_off = htons(0x2681);

else

ip->frag_off = htons(ntohs(ip->frag_off) - 185);

 

ip->check = in_chksum((unsigned short *)ip, sizeof

(struct iphdr));

}

}

 

return(1);

 

 

hdc = BeginPaint(hWnd, &ps);

// TODO: Add any drawing code here...

 

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

 

// Message handler for about box.

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

switch (message)

{

case WM_INITDIALOG:

return (INT_PTR)TRUE;

 

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

}

break;

}

return (INT_PTR)FALSE;

}

 

 


1 | 2 |


При использовании материала, поставите ссылку на Студалл.Орг (0.155 сек.)