Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Runtime.InteropServices;
  8.  
  9. namespace ks
  10. {
  11. static class workWithId
  12. {
  13. static byte[] parse(string s)
  14. {
  15. string[] forParse = s.Split('.');
  16. byte[] re = new byte[4];
  17. for (int i = 0; i < 4; i++)
  18. re[i] = Convert.ToByte(forParse[i]);
  19. return re;
  20. }
  21.  
  22. static string reParse(byte[] b)
  23. {
  24. string re = "";
  25. for (int i = 0; i < b.Length; i++)
  26. {
  27. re += b[i].ToString();
  28. if (i <= b.Length - 1)
  29. re += '.';
  30. }
  31. return re;
  32. }
  33.  
  34. public static string hostID(string ip, string mask)
  35. {
  36. byte[] bIp = parse(ip);
  37. byte[] bMask = parse(mask);
  38. byte[] bHost = new byte[4];
  39. for (int i = 0; i < 4; i++)
  40. {
  41. bHost[i] = (byte)((int)bIp[i] & (~(int)bMask[i]));
  42. }
  43. return reParse(bHost);
  44. }
  45.  
  46. public static string networkID(string ip, string mask)
  47. {
  48. byte[] bIp = parse(ip);
  49. byte[] bMask = parse(mask);
  50. byte[] bNet = new byte[4];
  51. for (int i = 0; i < 4; i++)
  52. {
  53. bNet[i] = (byte)((int)bIp[i] & ((int)bMask[i]));
  54. }
  55. return reParse(bNet);
  56. }
  57.  
  58.  
  59.  
  60. [DllImport("iphlpapi.dll", ExactSpelling = true)]
  61. public static extern int SendARP(int destIp, int srcIP, byte[] macAddr, ref uint physicalAddrLen);
  62.  
  63. public static string convertIpToMAC(string ip)
  64. {
  65. IPAddress dst = IPAddress.Parse(ip);
  66. byte[] macAddr = new byte[6];
  67. uint macAddrLen = (uint)macAddr.Length;
  68.  
  69. if (SendARP(BitConverter.ToInt32(dst.GetAddressBytes(), 0), 0, macAddr, ref macAddrLen) != 0)
  70. return "SendARP failed";
  71. string[] str = new string[(int)macAddrLen];
  72. for (int i = 0; i < macAddrLen; i++)
  73. str[i] = macAddr[i].ToString("x2");
  74.  
  75. return string.Join(":", str);
  76. }
  77.  
  78.  
  79. public static void DoGetHostEntry(string hostname)
  80. {
  81. IPHostEntry host;
  82. host = Dns.GetHostEntry(hostname);
  83. Console.WriteLine("Hostname: {0}", host.HostName);
  84. Console.WriteLine("GetHostEntry({0}) returns:", hostname);
  85. foreach (IPAddress ip in host.AddressList)
  86. {
  87. Console.WriteLine(" {0}", ip);
  88. }
  89. }
  90. }
  91.  
  92.  
  93.  
  94. class Program
  95. {
  96. static void Main(string[] args)
  97. {
  98. try
  99. {
  100. /* string id = Console.ReadLine();
  101. string mask = Console.ReadLine();
  102. Console.WriteLine(workWithId.networkID(id, mask) + " " + workWithId.hostID(id, mask));*/
  103. Console.WriteLine(workWithId.convertIpToMAC("192.168.100.14"));
  104. workWithId.DoGetHostEntry(Dns.GetHostName());
  105. workWithId.DoGetHostEntry("87.250.250.242");
  106. }
  107. catch (Exception e)
  108. {
  109. Console.WriteLine(e);
  110. }
  111. Console.ReadLine();
  112. }
  113. }
  114. }
  115.  
  116.  
  117. #include "stdafx.h"
  118. #include <winsock2.h>
  119. #include <iphlpapi.h>
  120. #include <icmpapi.h>
  121. //директива #include <iphlpapi.h> должна предшествовать #include <icmpapi.h>.
  122. #pragma comment(lib, "iphlpapi.lib")
  123. #pragma comment(lib, "ws2_32.lib")
  124.  
  125. #define ADDR "87.250.250.242" //IP- адрес
  126.  
  127.  
  128. int main()
  129. {
  130. setlocale(0, "rus");
  131. HANDLE hIcmpFile = IcmpCreateFile();//получение манипулятора для выполнения ICMP-запросов. Возвращается манипулятор функцией IcmpCreateFile без параметров
  132. if (hIcmpFile == INVALID_HANDLE_VALUE)
  133. {
  134. cout << "\tНевозможно открыть дискриптор.\n";
  135. printf(" Ошибка IcmpCreatefile: %ld\n", WSAGetLastError());
  136. return 0;
  137. }
  138. unsigned long ipaddr = inet_addr(ADDR); // преобразование IP-адреса к сетевому формату
  139. char SendData[32] = "Data Buffer"; // данные эхо-запроса
  140. LPVOID ReplyBuffer = NULL; // данные эхо-ответа
  141.  
  142.  
  143. /*
  144. Создание буфера для эхо-ответа ReplyBuffer
  145. и выделяем для него память:
  146. */
  147. DWORD ReplySize = 0; // размер буфера эхо-ответа
  148. ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); // Выделение памяти
  149. ReplyBuffer = (VOID*)malloc(ReplySize);
  150. if (ReplyBuffer == NULL)
  151. {
  152. cout << "\tНевозможно выделить память\n";
  153. return 0;
  154. }
  155. /*
  156. Третий шаг – отправка эхо-запросов.
  157. Используется функция IcmpSendEcho:
  158. */
  159.  
  160. /*
  161. IcmpSendEcho отправляет ICMP эхо-запрос по указанному IP-адресу и возвращает любые ответы,
  162. полученные в пределах заданного тайм-аута (Timeout) и до исчерпания пространства буфера
  163. ReplyBuffer. Эта функция синхронна (то есть приостанавливает выполнение процесса до
  164. завершения своей работы), и во избежание блокировки процесс должен перед ее вызовом
  165. породить соответствующую нить.
  166. */
  167. DWORD dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 1000);
  168.  
  169. if (dwRetVal != 0)
  170. {
  171. PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
  172. struct in_addr ReplyAddr;
  173. ReplyAddr.S_un.S_addr = pEchoReply->Address;
  174. printf("\tПосылка icmp сообщения на %s\n", ADDR);
  175. if (dwRetVal> 1)
  176. {
  177. printf("\tПолучен %ldicmp ответ\n", dwRetVal);
  178. printf("\tИнформация:\n");
  179. }
  180. else
  181. {
  182. printf("\tПолучен %ld icmp ответ\n", dwRetVal);
  183. printf("\tИнформация:\n");
  184. }
  185. printf("\t\tПолучено от %s\n", inet_ntoa(ReplyAddr));
  186. printf("\t\tСтатус = %ld\n", pEchoReply->Status);
  187. printf("\t\tВремя отклика = %ld миллисекунд \n", pEchoReply->RoundTripTime);
  188. }
  189. else
  190. {
  191. printf("\tВызов IcmpSendEcho завершился с ошибкой.\n");
  192. printf("\tIcmpSendEcho ошибка: %ld\n", WSAGetLastError());
  193. return -1;
  194. }
  195.  
  196. BOOL bRetVal;
  197. //освобождаем дескриптор
  198.  
  199. bRetVal = IcmpCloseHandle(hIcmpFile);
  200.  
  201. if (bRetVal)
  202. printf("\tHandle was closed\n");
  203. else
  204. printf("IcmpCloseHandle failed with error: %ld\n", WSAGetLastError());
  205.  
  206. system("pause");
  207. return 0;
  208. }
  209.  
  210.  
  211. #include "stdafx.h"
  212. #include <winsock2.h>
  213. #include <iphlpapi.h>
  214. #include <iostream>
  215. #include <icmpapi.h>
  216. #include <conio.h>
  217. #pragma comment(lib, "iphlpapi.lib")
  218. #pragma comment(lib, "ws2_32.lib")
  219.  
  220. using namespace std;
  221.  
  222. #define IP_STATUS_BASE 11000
  223. #define IP_SUCCESS NULL
  224. #define IP_DEST_NET_UNREACHABLE 11002
  225. #define IP_DEST_HOST_UNREACHABLE 11003
  226. #define IP_DEST_PROT_UNREACHABLE 11004
  227. #define IP_DEST_PORT_UNREACHABLE 11005
  228. #define IP_REQ_TIMED_OUT 11010
  229. #define IP_BAD_REQ 11011
  230. #define IP_BAD_ROUTE 11012
  231. #define IP_TTL_EXPIRED_TRANSIT 11013
  232.  
  233. void Ping(const char* cHost, unsigned int Timeout, unsigned int RequestCount)
  234. {
  235. // Создать файл сервиса
  236. HANDLE hIP = IcmpCreateFile();
  237. if (hIP == INVALID_HANDLE_VALUE)
  238. {
  239. WSACleanup();
  240. return;
  241. }
  242. char SendData[32] = "Data for ping"; //буфер для передачи
  243. int LostPacketsCount = NULL; // кол-во потерянных пакетов
  244. unsigned int MaxMS = NULL; // максимальное время ответа (мс)
  245. int MinMS = -1; // минимальное время ответа (мс)
  246. // Выделяем память под пакет – буфер ответа
  247. PICMP_ECHO_REPLY pIpe = (PICMP_ECHO_REPLY)GlobalAlloc(GHND, sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
  248. if (pIpe == NULL)
  249. {
  250. IcmpCloseHandle(hIP);
  251. WSACleanup();
  252. return;
  253. }
  254. pIpe->Data = SendData;
  255. pIpe->DataSize = sizeof(SendData);
  256. unsigned long ipaddr = inet_addr(cHost);
  257. IP_OPTION_INFORMATION option = { 255, 255, 0, 0, 0 };
  258. typedef struct
  259. {
  260. unsigned char Ttl; //время доставки
  261. unsigned char Tos; //тип сервиса
  262. unsigned char Flags; //флаги IP заголовка
  263. unsigned char OptionsSize; //размер опций в байтах
  264. unsigned char *OptionsData; //указатель на опции
  265.  
  266. DWORD IcmpSendEcho
  267. (
  268. __in HANDLE IcmpHandle, //дискриптор полученный функцией IcmpCreateFile
  269. __in IPAddr DestinationAddress, //IP адрес запроса
  270. __in LPVOID RequestData, //указатель на буфер эхо-запроса
  271. __in WORD RequestSize, //размер буфера эхо-запроса
  272. //указатель на структуру с опциями запроса
  273. __in PIP_OPTION_INFORMATION RequestOptions,
  274. __inout LPVOID ReplyBuffer, //указатель на буфер эхо-ответа
  275. __in DWORD ReplySize, //размер буфера эхо-ответа
  276. __in DWORD Timeout //таймаут в миллисекундах
  277. );
  278. };
  279.  
  280. typedef struct icmp_echo_reply
  281. {
  282. IPAddr Address; // адрес ответившего узла
  283. ULONG Status; // статус ответа
  284. ULONG RoundTripTime; // время прохождения запроса в мс
  285. USHORT DataSize; // размер данных ответа
  286. USHORT Reserved; // зарезервировано
  287. PVOID Data; // указатель на данные ответа
  288. IP_OPTION_INFORMATION Options; // опции ответа
  289. } ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
  290.  
  291. for (unsigned int c = 0; c < RequestCount; c++)
  292. {
  293. DWORD dwStatus = IcmpSendEcho(hIP, ipaddr, SendData, sizeof(SendData), &option, pIpe, sizeof(ICMP_ECHO_REPLY) + sizeof(SendData), Timeout);
  294. if (dwStatus > NULL)
  295. {
  296. for (int i = 0; i < dwStatus; i++)
  297. {
  298. unsigned char* pIpPtr = (unsigned char*)&pIpe->Address;
  299. cout << "Ответ от " << (int)*(pIpPtr) << "." << (int)*(pIpPtr + 1) << "." << (int)*(pIpPtr + 2) <<
  300. "." << (int)*(pIpPtr + 3) << ": число байт = " << pIpe->DataSize << " время = " <<
  301. pIpe->RoundTripTime << "мс TTL = " << (int)pIpe->Options.Ttl << endl;
  302. MaxMS = (MaxMS > pIpe->RoundTripTime) ? MaxMS : pIpe->RoundTripTime;
  303. MinMS = (MinMS < (int)pIpe->RoundTripTime && MinMS >= 0) ? MinMS : pIpe->RoundTripTime;
  304. }
  305. }
  306. else
  307. {
  308. if (pIpe->Status)
  309. {
  310. LostPacketsCount++;
  311. switch (pIpe->Status)
  312. {
  313. case IP_DEST_NET_UNREACHABLE:
  314. case IP_DEST_HOST_UNREACHABLE:
  315. case IP_DEST_PROT_UNREACHABLE:
  316. case IP_DEST_PORT_UNREACHABLE:
  317. {
  318. cout << "Remote host may be down." << endl;
  319. break;
  320. }
  321. case IP_REQ_TIMED_OUT:
  322. {
  323. cout << "Request timed out." << endl;
  324. break;
  325. }
  326. case IP_TTL_EXPIRED_TRANSIT:
  327. {
  328. cout << "TTL expired in transit." << endl;
  329. break;
  330. }
  331. default:
  332. {
  333. cout << "Error code: %ld" << pIpe->Status << endl;
  334. break;
  335. }
  336. }
  337. }
  338. }
  339. }
  340. IcmpCloseHandle(hIP);
  341. WSACleanup();
  342. unsigned char* pByte = (unsigned char*)&pIpe->Address;
  343. cout << "Статистика Ping "
  344. << (int)*(pByte) << "." << (int)*(pByte + 1)<< "." << (int)*(pByte + 2) << "." << (int)*(pByte + 3) << endl;
  345. cout << "\tПакетов: отправлено = " << RequestCount << ", получено = " << RequestCount - LostPacketsCount <<
  346. ", потеряно = " << LostPacketsCount << "<" << (int)(100 / (float)RequestCount)* LostPacketsCount <<
  347. " % потерь>, " << endl;
  348. if (MinMS < NULL) MinMS = NULL;
  349. cout << "Приблизительное время приема-передачи:" << endl << "Минимальное = " << MinMS << "мс, Максимальное = " <<
  350. MaxMS << "мс, Среднее = " << (MaxMS + MinMS) / 2 << "мс" << endl;
  351. }
  352.  
  353. int _tmain(int argc, _TCHAR* argv[])
  354. {
  355. setlocale(LC_ALL, "RUS");
  356. cout << ("ВВЕДИТЕ IP")<<endl;
  357. char *ip = new char[9];
  358. cin >> ip;
  359. Ping(ip, 60, 10);
  360. getch();
  361. return 0;
  362. }
  363.  
  364. //"127.0.0.1"
  365.  
  366. //Проверка правильности
  367. // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
  368. //
  369.  
  370. #include "stdafx.h"
  371. #include <winsock2.h>
  372. #include <iphlpapi.h>
  373. #include <iostream>
  374. #include <icmpapi.h>
  375. #include <conio.h>
  376. //#pragma comment(lib, "iphlpapi.lib")
  377. //#pragma comment(lib, "ws2_32.lib")
  378. using namespace std;
  379.  
  380. //#define IP_STATUS_BASE 11000
  381. //#define IP_SUCCESS 0
  382. //#define IP_DEST_NET_UNREACHABLE 11002
  383. //#define IP_DEST_HOST_UNREACHABLE 11003
  384. //#define IP_DEST_PROT_UNREACHABLE 11004
  385. //#define IP_DEST_PORT_UNREACHABLE 11005
  386. //#define IP_REQ_TIMED_OUT 11010
  387. //#define IP_BAD_REQ 11011
  388. //#define IP_BAD_ROUTE 11012
  389. //#define IP_TTL_EXPIRED_TRANSIT 11013
  390.  
  391. unsigned long ip;
  392. unsigned long mask;
  393. unsigned long subnet;
  394. unsigned long host;
  395. unsigned long broadcast;
  396.  
  397. bool CheckAddress(char* ip_)
  398. {
  399. int points = 0, // количество точек
  400. numbers = 0; // значение октета
  401. char* buff; // буфер для одного октета
  402. buff = new char[3];
  403. for (int i = 0; ip_[i] != '\0'; i++) { // для строки IP-адреса
  404. if (ip_[i] <= '9'&& ip_[i] >= '0') // если цифра
  405. {
  406. if (numbers > 3) return false; //если больше трех чисел в октете – ошибка
  407. buff[numbers++] = ip_[i]; //скопировать в буфер
  408. }
  409. else if (ip_[i] == '.') // если точка
  410. {
  411. if (atoi(buff) > 255) // проверить диапазон октета
  412. return false; if (numbers == 0) //если числа нет - ошибка
  413. return false;
  414. numbers = 0;
  415. points++;
  416. delete[]buff;
  417. buff = new char[3];
  418. }
  419. else return false;
  420. }
  421. if (points != 3) // если количество точек в IP-адресе не 3 - ошибка
  422. return false;
  423. if (numbers == 0 || numbers > 3)
  424. return false;
  425. return true;
  426. }
  427.  
  428. bool CheckMask(char* ip_)
  429. {
  430. int points = 0, // количество точек
  431. numbers = 0; // значение октета
  432. int targ = 0, cou = 0;
  433. char* buff; // буфер для одного октета
  434. buff = new char[3];
  435. int adr[4] = { -1,-1,-1,-1 };
  436. if (ip_[strlen(ip_) - 1] != '0') return false;
  437. for (int i = 0; ip_[i] != '\0'; i++)
  438. { // для строки IP-адреса
  439. if (ip_[i] <= '9'&& ip_[i] >= '0') // если цифра
  440. {
  441. if (numbers > 3) return false; //если больше трех чисел в октете – ошибка
  442. buff[numbers++] = ip_[i]; //скопировать в буфер
  443. }
  444. else if (ip_[i] == '.') // если точка
  445. {
  446. if (atoi(buff) > 255) // проверить диапазон октета
  447. return false;
  448.  
  449. if (numbers == 0) //если числа нет - ошибка
  450. return false;
  451. else
  452. if (atoi(buff) != 0)
  453. {
  454. cou++;
  455. adr[targ] = atoi(buff);
  456. }
  457. targ++;
  458. numbers = 0;
  459. points++;
  460. delete[]buff;
  461. buff = new char[3];
  462. }
  463. else
  464. return false;
  465. }
  466. if (cou == 0) return false;
  467. for (int i = 0; i < 4; i++)
  468. {
  469. if (adr[i] != -1) cou--;
  470. else if (cou != 0) return false;
  471. }
  472. if (points != 3) // если количество точек в IP-адресе не 3 - ошибка
  473. return false;
  474. if (numbers == 0 || numbers > 3)
  475. return false;
  476. return true;
  477. }
  478.  
  479. unsigned long CharToLong(char* ip_)
  480. {
  481. unsigned long out = 0;//число для IP-адреса
  482. char *buff;
  483. buff = new char[3]; //буфер для хранения одного октета
  484. for (int i = 0, j = 0, k = 0; ip_[i] != '\0'; i++, j++) {
  485. if (ip_[i] != '.') //если не точка
  486. buff[j] = ip_[i]; // записать символ в буфер
  487. if (ip_[i] == '.' || ip_[i + 1] == '\0')
  488. { // если следующий октет или последний
  489. out <<= 8; //сдвинуть число на 8 бит
  490. if (atoi(buff) > 255)
  491. return NULL; // еcли октет больше 255 – ошибка
  492. out += (unsigned long)atoi(buff); //преобразовать и добавить //к числу IP-адреса
  493. k++;
  494. j = -1;
  495. delete[]buff;
  496. buff = new char[3];
  497. }
  498. }
  499. return out;
  500.  
  501. }
  502.  
  503.  
  504. char* LongToChar(unsigned long ip_)
  505. {
  506. unsigned long ip = ip_;//число для IP-адреса
  507. char *buff;
  508. buff = new char[16]; //буфер для хранения одного октета
  509. int ostatok;
  510. char b[2];
  511. ostatok = ip % 256;
  512. ip = ip / 256;
  513. itoa(ostatok % 10, b, 10);
  514. buff[15] = b[1];
  515. buff[14] = b[0];
  516. ostatok = ostatok / 10;
  517. itoa(ostatok % 10, b, 10);
  518. buff[13] = b[0];
  519. ostatok = ostatok / 10;
  520. itoa(ostatok % 10, b, 10);
  521. buff[12] = b[0];
  522. buff[11] = '.';
  523. ostatok = ip % 256;
  524. ip = ip / 256;
  525. itoa(ostatok % 10, b, 10);
  526. buff[10] = b[0];
  527. ostatok = ostatok / 10;
  528. itoa(ostatok % 10, b, 10);
  529. buff[9] = b[0];
  530. ostatok = ostatok / 10;
  531. itoa(ostatok % 10, b, 10);
  532. buff[8] = b[0];
  533. buff[7] = '.';
  534. ostatok = ip % 256;
  535. ip = ip / 256;
  536. itoa(ostatok % 10, b, 10);
  537. buff[6] = b[0];
  538. ostatok = ostatok / 10;
  539. itoa(ostatok % 10, b, 10);
  540. buff[5] = b[0];
  541. ostatok = ostatok / 10;
  542. itoa(ostatok % 10, b, 10);
  543. buff[4] = b[0];
  544. buff[3] = '.';
  545. ostatok = ip % 256;
  546. ip = ip / 256;
  547. itoa(ostatok % 10, b, 10);
  548. buff[2] = b[0];
  549. ostatok = ostatok / 10;
  550. itoa(ostatok % 10, b, 10);
  551. buff[1] = b[0];
  552. ostatok = ostatok / 10;
  553. itoa(ostatok % 10, b, 10);
  554. buff[0] = b[0];
  555. //cout << buff << endl;
  556. return buff;
  557. }
  558.  
  559. int _tmain(int argc, _TCHAR* argv[])
  560. {
  561. setlocale(LC_ALL, "RUS");
  562. unsigned long ip, mask, host,
  563. subnet, broadcast;
  564. char *ip_, *mask_;
  565. bool flag = true;
  566. ip_ = new char[16];
  567. mask_ = new char[16];
  568. A:
  569. {
  570. do
  571. {
  572. if (!flag) cout << "Неверно введён адрес!" << endl;
  573. cout << "IP: ";
  574. cin >> ip_;
  575. } while (!(flag = CheckAddress(ip_)));
  576. ip = CharToLong(ip_);
  577. flag = true;
  578. do {
  579. if (!flag) cout << "Неправильная маска!" << endl;
  580. flag = true;
  581. do
  582. {
  583. if (!flag) cout << "Неверно введена маска!" << endl;
  584. cout << "Маска: ";
  585. cin >> mask_;
  586. } while (!(flag = CheckAddress(mask_)));
  587. mask = CharToLong(mask_);
  588. } while (!(flag = CheckMask(mask_)));
  589.  
  590.  
  591. subnet = ip & mask;
  592. host = ip & ~mask;
  593. broadcast = ip & mask | ~mask;
  594.  
  595. cout << "ID подсети: " << LongToChar(subnet) << endl << "ID хоста: " << LongToChar(host) << endl << "Broadcast адрес: " << LongToChar(broadcast) << endl;
  596. } goto A;
  597. }
  598.  
  599. //Получение мака по ip
  600. #include "stdafx.h"
  601.  
  602. #include <winsock2.h>
  603. #include <iphlpapi.h>
  604. #include <iostream>
  605. #include <stdio.h>
  606. #include <conio.h>
  607. #include <Ws2tcpip.h>
  608. #include <string>
  609. #include <string.h>
  610.  
  611.  
  612. #pragma comment(lib , "iphlpapi.lib")
  613. #pragma comment(lib , "ws2_32.lib")
  614.  
  615. using namespace std;
  616.  
  617. void GetMacAddress(unsigned char *, struct in_addr);
  618.  
  619. int main()
  620. {
  621. setlocale(LC_ALL, "RUS");
  622. int type = 0;
  623. A:
  624.  
  625. //cout << "Введите тип: (1-get ip from mac, 2-get mac from ip)\n";
  626. //cin >> type;
  627. type = 2;
  628. switch (type)
  629. {
  630. case 1:
  631. {
  632. string s = "";
  633. cout << "Введите mac: ";
  634. cin >> s;
  635. s = "arp -a | findstr \"" + s + "\"";
  636. system(s.c_str());
  637. break;
  638. }
  639. case 2:
  640. {
  641. unsigned char mac[6];
  642. struct in_addr srcip = { 0 };
  643. struct sockaddr_in sa;
  644. char ip_address[32];
  645. WSADATA firstsock;
  646. if (WSAStartup(MAKEWORD(2, 2), &firstsock) != 0)
  647. {
  648. cout << "Ошибка инициализации winsock";
  649. cout << WSAGetLastError();
  650. return -1;
  651. }
  652. cout << "Введите IP : ";
  653. cin >> ip_address;
  654. //преобразование IP адреса другим способом
  655. //srcip.s_addr = inet_addr(ip_address);
  656. inet_pton(AF_INET, ip_address, &(sa.sin_addr));
  657. //Получение MAC по IP
  658. GetMacAddress(mac, sa.sin_addr);
  659. //GetMacAddress(mac, srcip);
  660. printf("MAC адрес : %.2X-%.2X-%.2X-%.2X-%.2X-%.2X",
  661. mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  662. printf("\n");
  663. _getch();
  664. break;
  665. }
  666. default:
  667. break;
  668. }
  669. goto A;
  670. return 0;
  671. goto A;
  672. }
  673. void GetMacAddress(unsigned char *mac, struct in_addr
  674. destip)
  675. {
  676. DWORD ret;
  677. IPAddr srcip;
  678. ULONG MacAddr[2];
  679. ULONG PhyAddrLen = 6;
  680. int i;
  681. srcip = 0;
  682. //Послать ARP пакет
  683. ret = SendARP((IPAddr)destip.S_un.S_addr,
  684. srcip, MacAddr, &PhyAddrLen);
  685. //Преобразовать адрес
  686. if (PhyAddrLen)
  687. {
  688. BYTE *bMacAddr = (BYTE *)& MacAddr;
  689. for (i = 0; i < (int)PhyAddrLen; i++)
  690. {
  691. mac[i] = (char)bMacAddr[i];
  692. }
  693. }
  694.  
  695. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement