-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSource.cpp
More file actions
113 lines (101 loc) · 2.87 KB
/
Source.cpp
File metadata and controls
113 lines (101 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <winsock2.h>
#include <iphlpapi.h>
#include <icmpapi.h>
#include <iostream>
//#define ADDR "87.240.131.118" //IP- адрес
#include <windows.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
using namespace std;
unsigned long ipaddr;
//преобразование IP-адреса
//данные эхо-запроса
LPVOID ReplyBuffer = NULL;
//данные эхо-ответа
//DWORDReplySize = 0;
//размер данных эхо-ответа
int main()
{
setlocale(LC_ALL,"RU");
HANDLE hIcmpFile;
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE)
{
printf("\tНевозможно открыть дискриптор.\n");
printf(" Ошибка IcmpCreatefile: %ld\n",
WSAGetLastError());
return -1;
}
while (true)
{
char *ADDR = new char[200];
int col = 0;
cout << "Введите ip\n> ";
cin.getline(ADDR, 200);
ipaddr = inet_addr(ADDR);
cout << "Количество запросов\n> ";
(cin >> col).get();
int S = 0;
cout << "Размер пакета\n> ";
(cin >> S).get();
char *SendData = (char *)malloc(S);
//for (char *b = SendData;*b;b++)
//{
//*b = '0';
//}
cout << _msize(SendData) << endl;
int ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData);
//Выделяем память
ReplyBuffer = (VOID*)malloc(ReplySize);
if (ReplyBuffer == NULL)
{
printf("\tНевозможно выделить память\n");
return -1;
}
for (int i = 0; i < col; i++)
{
DWORD dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 1000);
if (dwRetVal != 0)
{
PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
struct in_addr ReplyAddr;
ReplyAddr.S_un.S_addr = pEchoReply->Address;
printf("\tПосылка icmp сообщения на %s\n",
ADDR);
if (dwRetVal > 1) {
printf("\tПолучен %ldicmp ответ\n",
dwRetVal);
printf("\tИнформация:\n");
}
else {
printf("\tПолучен %ld icmp ответ\n",
dwRetVal);
printf("\tИнформация:\n");
}
printf("\tПолучено от %s\n",
inet_ntoa(ReplyAddr));
printf("\t Статус = %ld\n",
pEchoReply->Status);
printf("\tВремя отклика = %ld миллисекунд \n",
pEchoReply->RoundTripTime);
cout << "------------------------------------------------------" << endl;
}
else {
printf("\tВызов IcmpSendEcho завершился с ошибкой.\n");
printf("\tIcmpSendEcho ошибка: %ld\n",
WSAGetLastError());
//return -1;
}
}
delete []ADDR;
free(SendData);
free(ReplyBuffer);
}
DWORD bRetVal = IcmpCloseHandle(hIcmpFile);
if (bRetVal)
printf("\tHandle was closed\n");
else
printf("IcmpCloseHandle failed with error: %ld\n",
WSAGetLastError());
system("pause");
}