Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200

Как компилировать исходник пинга?

23.01.2009, 17:34. Показов 4076. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет! есть исходник пинга, написанный на с++ (скаченный текст-во вложении)
я не могу его откомпилировать, кто подскажет как правильно?
программа использует сокеты, сначала он требовал файл winsock.h, я его нашел в с++ билдере. но при компилировании он выдает кучу ошибок. помогите разобраться, пожалуйста!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2009, 17:34
Ответы с готовыми решениями:

Нужен исходник для расчёта комплектации материалов или т.п. Исходник с расчётами, таблицами
Добрый день всем) Нужна помощь. Занимаюсь расчётами стоимость материалов и стоимость в оконной конторе. Создал для себе эксель...

Как компилировать?
Как сделать код Питона в выполняемый exeшник? Можно ли сделать графическую оболочку моей програмке?

Как компилировать?
Подскажите пожалуйста в чем ошибка? Программа Delphi 7, сохраняет проекты не с exe расширением а dpr.

12
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
23.01.2009, 21:38
выкладывай исходник, пиши ошибки
0
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200
23.01.2009, 22:29  [ТС]
вот тот самый исходник, для с++

Добавлено через 34 секунды
C++
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#include <winsock.h>
 
#define HOST_NAME "www.sources.ru"  // Любое доменное имя
#define WINSOCK_VERSION 0x0101   // Версия винсока 1.1
#define NO_FLAGS 0   // Флаги не указываем
// В RFC 792 определены значения сообщений ICMP
#define ICMP_ECHO 8  // An ICMP echo message
#define ICMP_ECHOREPLY 0     // An ICMP echo reply message
#define ICMP_HEADERSIZE 8   
 
struct ip // Структура заголовка IP
{
BYTE ip_verlen;  // Version and header length
BYTE ip_tos;     // Type of service
WORD ip_len;     // Total packet length 
UINT ip_id;  // Datagram identification 
WORD ip_fragoff;     // Fragment offset 
BYTE ip_ttl;     // Time to live 
BYTE ip_proto;   // Protocol
UINT ip_chksum;  // Checksum 
IN_ADDR ip_src_addr;     // Source address 
IN_ADDR ip_dst_addr;     // Destination address 
BYTE ip_data[1];     // Variable length data area
};
 
struct icmp  // Структура заголовка ICMP
{
BYTE icmp_type;  // Type of message
BYTE icmp_code;  // Type "sub code" (zero for echos)
WORD icmp_cksum;     // 1's complement checksum
HINSTANCE icmp_id;   // Unique ID (the instance handle)
WORD icmp_seq;   // Tracks multiple pings
BYTE icmp_data[1];   // The start of optional data
};
 
char szPingBuffer[100];
 
 
HINSTANCE hInstance;
 
 
WORD InternetChksum(LPWORD lpwIcmpData, WORD wDataLength)
{
long    lSum;    // Store the summation
WORD    wOddByte;   // Left over byte from the summation
WORD    wAnswer;    // The 1's complement checksum
 
lSum = 0L;
 
while (wDataLength > 1)
{
lSum += *lpwIcmpData++;
wDataLength -= 2;
}
 
// Handle the odd byte if necessary and make sure the top half is zero
if (wDataLength == 1)
{
wOddByte = 0;
*((LPBYTE) &wOddByte) = *(LPBYTE)lpwIcmpData;   // One byte only
lSum += wOddByte;
}
 
// Add back the carry outs from the 16 bits to the low 16 bits
lSum = (lSum >> 16) + (lSum & 0xffff);  // Add high-16 to low-16
lSum += (lSum >> 16);    // Add carry
wAnswer = (WORD)~lSum;   // 1's complement, then truncate 
// to 16 bits
return(wAnswer);
}
 
 
BOOL DoPingOperation(HANDLE hInstance)
{
// Локальные переменные
int iPacketSize;     // размер ICMP-пакета 
int iHostAddrLength;     // Длина адреса сетевого компьютера
int iIPHeadLength;   // Длина заголовка IP-датаграммы
int iReceivedBytes;  // Количество принятых байтов
int iSentBytes;  // Количество посланных байтов
int nProtocol;   // Номер протокола ICMP
int iSocketError;    // Значение кода ошибки
PDWORD pdwTimeStamp;     // Счетчик "тиков" при передаче
DWORD dwReturnTime;  // Счетчик "тиков" при приеме
DWORD dwRoundTrip;   // Счетчик "тиков" среднего времени пробега
// Структуры, описанные в WINSOCK.H
SOCKADDR_IN sockAddrLocal;  // Структуры адреса сокета
SOCKADDR_IN sockAddrHost;   // 
SOCKET hSocket;  // Дескриптор сокета
LPHOSTENT lpHostEntry;   // Структура данных с
// информацией о сетевом компьютере
LPPROTOENT lpProtocolEntry; // Структура данных с информацией о протоколе
 
BYTE IcmpSendPacket[1024];  // Буфер для посылаемых данных
BYTE IcmpRecvPacket[4096];  // Буфер для принимаемых данных 
 
struct icmp *pIcmpHeader;   // Указатель на структуру ICMP
struct ip *pIpHeader;    // Указатель на структуру-заголовок IP
LPSTR lpszHostName;  // Указатель на удаленный сервер времени
 
lpszHostName = HOST_NAME;
 
if ((lpHostEntry = gethostbyname(HOST_NAME)) == NULL) {
wsprintf(szPingBuffer, "Could not get %s IP address."(LPSTR)lpszHostName);
return(FALSE);
}
 
sockAddrLocal.sin_family = AF_INET;
sockAddrLocal.sin_addr = *((LPIN_ADDR) *lpHostEntry->h_addr_list);
 
// В случае простого сокета, мы должны указывать протокол
if ((lpProtocolEntry = getprotobyname("icmp")) == NULL)
nProtocol = IPPROTO_ICMP;
else
nProtocol = lpProtocolEntry->p_proto;
 
// Создаем простой сокет и указываем ICMP в качестве протокола
if ((hSocket = socket(PF_INET, SOCK_RAW, nProtocol)) == INVALID_SOCKET)
{
wsprintf(szPingBuffer, "Could not create a RAW socket.");
return(FALSE);
}
 
pIcmpHeader = (struct icmp *) IcmpSendPacket;   // Point at the data area
pIcmpHeader->icmp_type = ICMP_ECHO;  // then fill in the data.
pIcmpHeader->icmp_code = 0;  // Use the Sockman instance 
pIcmpHeader->icmp_id = hInstance;    // handle as a unique ID.
pIcmpHeader->icmp_seq = 0;   // It's important to reset
pIcmpHeader->icmp_cksum = 0;     // the checksum to zero.
 
//Значение счетчика "тиков" располагается в необязательной области данных
pdwTimeStamp = (PDWORD)&IcmpSendPacket[ICMP_HEADERSIZE];
*pdwTimeStamp = GetTickCount();
iPacketSize = ICMP_HEADERSIZE + sizeof(DWORD);
pIcmpHeader->icmp_cksum = InternetChksum((LPWORD)pIcmpHeader, iPacketSize);
 
if (pIcmpHeader->icmp_cksum !=0 )
{ 
iSentBytes = sendto(hSocket, (LPSTR) IcmpSendPacket, iPacketSize, 
NO_FLAGS, (LPSOCKADDR) &sockAddrLocal, sizeof(sockAddrLocal));
if (iSentBytes == SOCKET_ERROR) {
closesocket(hSocket);
wsprintf(szPingBuffer,
"The sendto() function returned a socket error.");
return(FALSE);
}
 
if (iSentBytes != iPacketSize)  {
closesocket(hSocket);
wsprintf(szPingBuffer,
"Wrong number of bytes sent: %d", iSentBytes);
return(FALSE);
}
 
iHostAddrLength = sizeof(sockAddrHost);
 
iReceivedBytes = recvfrom(hSocket, (LPSTR) IcmpRecvPacket, 
sizeof(IcmpRecvPacket), NO_FLAGS, (LPSOCKADDR) &sockAddrHost,
&iHostAddrLength);
}
else {
closesocket(hSocket);
wsprintf(szPingBuffer, "Checksum computation error! Result was zero!");
return(FALSE);
}
 
closesocket(hSocket);
 
if (iReceivedBytes == SOCKET_ERROR) { 
iSocketError = WSAGetLastError();
if (iSocketError == 10004) {
wsprintf(szPingBuffer,
"Ping operation for %s was cancelled.", 
(LPSTR)lpszHostName);
dwRoundTrip = 0;
return(TRUE);
}
else {
wsprintf(szPingBuffer,
"Socket Error from recvfrom(): %d", iSocketError);
return(FALSE);
}
}
 
dwReturnTime = GetTickCount();
dwRoundTrip = dwReturnTime - *pdwTimeStamp;
 
// Указываем на IP-заголовок принятого пакета
pIpHeader = (struct ip *)IcmpRecvPacket;
 
// Извлекаем биты 4-7 и преобразуем количество З2-битных слов в количество байтов
iIPHeadLength = (pIpHeader->ip_verlen >> 4) << 2;
 
// Проверяем длину, чтобы удостовериться, что ICMP-заголовок принят
if (iReceivedBytes < iIPHeadLength + ICMP_HEADERSIZE) {
wsprintf(szPingBuffer, "Received packet was too short.");
return(FALSE);
}
 
// Указываем на ICMP-сообщение, следующее сразу за IP-заголовком
pIcmpHeader = (struct icmp *) (IcmpRecvPacket + iIPHeadLength);
 
// Проверяем, что мы приняли именно "эхо"-ответ
if (pIcmpHeader->icmp_type != ICMP_ECHOREPLY) {
wsprintf(szPingBuffer,
"Received packet was not an echo reply to your ping.");
return(FALSE);
}
 
// Проверяем, принадлежит ли этот пакет нашей программе
if (pIcmpHeader->icmp_id != (HINSTANCE)hInstance) {
wsprintf(szPingBuffer,
"Received packet was not sent by this program.");
return(FALSE);
}
 
// Да, этот пакет был послан нашей программой. Обратите
// внимание на IP-адрес и имя удаленного компьютера,
// пославшего "эхо"-ответ
lstrcpy(lpszHostName, (LPSTR)lpHostEntry->h_name);
wsprintf(szPingBuffer,
"Round-trip travel time to %s [%s] was %d milliseconds.",
(LPSTR)lpszHostName, (LPSTR)inet_ntoa(sockAddrHost.sin_addr), 
dwRoundTrip);
 
return(TRUE); 
}
 
 
void main ()
{
WSADATA wsaData;
 
WSAStartup(WINSOCK_VERSION, &wsaData);
 
DoPingOperation(hInstance);
MessageBox(NULL, szPingBuffer, "www.sources.ru", MB_OK|MB_ICONSTOP);
 
WSACleanup();
}
ошибки:
[C++ Error] Unit1.cpp(1): E2209 Unable to open include file 'winsock.h'
[C++ Error] Unit1.cpp(13): E2303 Type name expected
[C++ Error] Unit1.cpp(13): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(14): E2303 Type name expected
[C++ Error] Unit1.cpp(14): E2238 Multiple declaration for 'ip::BYTE'
[C++ Error] Unit1.cpp(13): E2344 Earlier declaration of 'ip::BYTE'
[C++ Error] Unit1.cpp(14): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(15): E2303 Type name expected
[C++ Error] Unit1.cpp(15): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(16): E2303 Type name expected
[C++ Error] Unit1.cpp(16): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(17): E2303 Type name expected
[C++ Error] Unit1.cpp(17): E2238 Multiple declaration for 'ip::WORD'
[C++ Error] Unit1.cpp(15): E2344 Earlier declaration of 'ip::WORD'
[C++ Error] Unit1.cpp(17): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(18): E2303 Type name expected
[C++ Error] Unit1.cpp(18): E2238 Multiple declaration for 'ip::BYTE'
[C++ Error] Unit1.cpp(14): E2344 Earlier declaration of 'ip::BYTE'
[C++ Error] Unit1.cpp(18): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(19): E2303 Type name expected
[C++ Error] Unit1.cpp(19): E2238 Multiple declaration for 'ip::BYTE'
[C++ Error] Unit1.cpp(18): E2344 Earlier declaration of 'ip::BYTE'
[C++ Error] Unit1.cpp(19): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(20): E2303 Type name expected
[C++ Error] Unit1.cpp(20): E2238 Multiple declaration for 'ip::UINT'
[C++ Error] Unit1.cpp(20): E2228 Too many error or warning messages

Добавлено через 1 минуту 5 секунд
правда файл winsock.h - копированный с с++ билдера
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
23.01.2009, 22:35
А почему бы самим билдером не восполтзоваться? или MS что еще лучше...
0
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200
23.01.2009, 22:49  [ТС]
потому что сам я не напишу такую прогу...а данный исходник для с++, у кого-нибудь, может, есть файл winsock.h ?буду очень признателен!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
23.01.2009, 23:54
на 6-ом билдере компилируется отлично...
0
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200
24.01.2009, 01:05  [ТС]
Серьезно? У меня тоже 6, но выдает эти ошибки.:-( в чем дело может быть?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.01.2009, 01:57
надо разбираться, почему прога не видит хидера, так что-то сказать сложно
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
24.01.2009, 09:57
Code
1
[C++ Error] Unit1.cpp(1): E2209 Unable to open include file 'winsock.h'
не нашел он всетаки warlok.h, а все остальное судя повсему из-за этого
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.01.2009, 11:47
не знаю как еще доказать, что проект с твоим кодом компилится, как его выложить тут... тебе надо пути проверить в проекте, такое впечатление, что не видит проект билдеровских библиотек...
Вложения
Тип файла: rar class_s.rar (6.0 Кб, 77 просмотров)
0
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200
24.01.2009, 14:25  [ТС]
у меня жалуется, что не может найти winsock.h, может, он неверный, или в конфигах пути проставлены неверно?
кто-нибудь знает, как вставить содержимое winsock, чтоб не описывать его? сможете прислать образец?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.01.2009, 14:59
выложи весь свой проект, ничего не понимаю, что ты там делаешь
0
 Аватар для Антон_В
14 / 14 / 0
Регистрация: 29.09.2008
Сообщений: 200
24.01.2009, 16:38  [ТС]
да это не проект, просто я хотел немного подделать пинг, скачал иходник,а он не компилится..
мне вообще надо поймать какую ошибку приносит с собой пакет icmp, чтоб дальше определить какие компы есть в сети, а каких нет и т.п..и вывести все это в файл.
обычный пинг выводит в корявой кодировке, если, допустим, сделать файл .bat, в нем написать Ping 192.168.2.1 >rez.txt, то там иероглифы полуаются
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2009, 16:38
Помогаю со студенческими работами здесь

Как компилировать на C++?
Скачал Microsoft Visual Studio Installer, запускаю, ставлю галочку напротив C++ - и мне предлагают скачать ~7 гигов чего то. Что это? И...

Как компилировать в Dev C++
Я очень начинающий программист и мне посоветовали Dev C++, написал я код, нажимаю Debug и мне выливает окошко Project is not compile!

Как компилировать в BCC55
Собсна что нужно прописать в cmd, чтобы скомпилировать программу.

Как компилировать в cgi
Здравствуйте. Подскажите пожалуйста, как компилировать в cgi? Какие настройки ставить, на каком компиляторе? Я пользуюсь Borland C++ 3.1.

Как компилировать на linux ?
Здраствуйте я вообще нуб в java. Писал только на Android Studio. Сейчас нужно запустить программу для работы с криптонит про. Мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru