Ping доменного имени, как это сделать?
- Войдите на сайт для отправки комментариев
Вс, 03/05/2015 - 20:27
Добрый вечер.
Возникла необходимость пинговать сервер который не имеет статического IP. На роутере сервереа был настроен DynDNS и теперь у сервера есть доменное имя. Но не могу разобраться как теперь его пинговать через arduino. Есть библиотека ICMPPing предназначенаая для пингования IP адресов, но как мне средствами arduino преобразоваться домен в IP? Перешерстил интернет, но так и не нашел ответа. Может кто знает как это можно сделать? Заранее благодарен.
Вот пример кода с вышеуказанной библиотекой.
Ссылка на библиотеку
Как мне получить IP из доменного имени?
/* Ping Example This example sends an ICMP pings every 500 milliseconds, sends the human-readable result over the serial port. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 created 30 Sep 2010 by Blake Foster */ #include <SPI.h> #include <Ethernet.h> #include <ICMPPing.h> byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield byte ip[] = {192,168,0,177}; // ip address for ethernet shield IPAddress pingAddr(74,125,26,147); // ip address to ping SOCKET pingSocket = 0; char buffer [256]; ICMPPing ping(pingSocket, (uint16_t)random(0, 255)); void setup() { // start Ethernet Ethernet.begin(mac, ip); Serial.begin(9600); } void loop() { ICMPEchoReply echoReply = ping(pingAddr, 4); if (echoReply.status == SUCCESS) { sprintf(buffer, "Reply[%d] from: %d.%d.%d.%d: bytes=%d time=%ldms TTL=%d", echoReply.data.seq, echoReply.addr[0], echoReply.addr[1], echoReply.addr[2], echoReply.addr[3], REQ_DATASIZE, millis() - echoReply.data.time, echoReply.ttl); } else { sprintf(buffer, "Echo request failed; %d", echoReply.status); } Serial.println(buffer); delay(500); }Тут есть библиотека работы с DNS
http://www.mcqn.com/weblog/dhcp_and_dns_arduino
DnsClient.gethostbyname()
О, спасибо. Щас буду разбираться.
Все отлично получилось. Вот результат:
/* Ping Example This example sends an ICMP pings every 500 milliseconds, sends the human-readable result over the serial port. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 created 30 Sep 2010 by Blake Foster */ #include <SPI.h> #include <Ethernet.h> #include <ICMPPing.h> #include <Dns.h> byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield byte ip[] = {192,168,0,177}; // ip address for ethernet shield IPAddress pingAddr(0,0,0,0); // ip address to ping SOCKET pingSocket = 0; char buffer [256]; ICMPPing ping(pingSocket, (uint16_t)random(0, 255)); void setup() { // start Ethernet Ethernet.begin(mac, ip); Serial.begin(9600); DNSClient dns; dns.begin(Ethernet.dnsServerIP()); dns.getHostByName("ya.ru",pingAddr); // at this point the function works } void loop() { ICMPEchoReply echoReply = ping(pingAddr, 4); if (echoReply.status == SUCCESS) { sprintf(buffer, "Reply[%d] from: %d.%d.%d.%d: bytes=%d time=%ldms TTL=%d", echoReply.data.seq, echoReply.addr[0], echoReply.addr[1], echoReply.addr[2], echoReply.addr[3], REQ_DATASIZE, millis() - echoReply.data.time, echoReply.ttl); } else { sprintf(buffer, "Echo request failed; %d", echoReply.status); } Serial.println(buffer); delay(500); }Здравствуйте!
У меня Ваш скетч не компилируется. Не проходит проверку.
Подскажите на какой версии среды разработки Arduino Вы запустили и какую плату использовали?
Я проверил несколько сред 1.0.6, 1.6.0, 1.6.4 , ни с одной не запускается.
Заранее спасибо.
alexnik100
версия 1.6.6
Либа положена
[путь]\libraries\icmp_ping\
Скачана
http://playground.arduino.cc/Code/ICMPPing
Следует учесть!
Каталог в архиве
Arduino-Ping-master\
Нужно подкаталог
icmp_ping\
положить в либрари проекта.
Скетч использует 13 776 байт (44%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 775 байт (37%) динамической памяти, оставляя 1 273 байт для локальных переменных. Максимум: 2 048 байт.
Спасибо за совет!
Скачал. Вставил как сказали. Результат отрицательный
На версии 1.0.6 не компилируется.
На версии 1.6.6 не компилируется.
Arduino: 1.6.6 (Windows XP), Плата:"Arduino Yún"
Скачал еще три версии
Arduino-Ping-version1.0
Arduino-Ping-version2.0
Arduino-Ping-version3.0
Вставил прямо так в [путь]\libraries.
На версии 1.0.6 компилируется Arduino-Ping-version1.0
Ping идет, через монитор видна отправка пакетов и ответ.
На версии 1.0.6 НЕ компилируется Arduino-Ping-version2.0 и 3.0
Затыкается на строчке ICMPPing ping(pingSocket, (uint16_t)random(0, 255));
На версии 1.6.6 НЕ компилируется Arduino-Ping-version1.0, 2.0 и 3.0
Подскажите , пожалуйста, что делать.
Удалить ВСЕ версии ардуино.
Перегрузить комп.
Поставить последнюю версию (1.6.6 или 1.6.7)
Прописать место для проектов - лучше не в документ энд сеттингс.
Избегать путей с кирилицей (как правило это имя пользователя)
В пути к проектам в каталог либрарес положить нужные файлы.
СПАСИБО!
Делаю. Как выполню сообщу.
Существует два каталога. Один в папке версии 1.6.6 - libraries, там все библиотеки.
Я копирую все дополнительные библиотеки в первый катлог.
И второй каталог в папке для скетчей. Там только:
Информация по установке библиотек: http://www.arduino.cc/en/Guide/Libraries
Туда сохраняются скетчи.
Я правильно делаю?
Добрый день!
Все заработало. Бился с Arduino-Пин/ icmp_ping/ ICMPPing.h
по вечерам более недели.
БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ!
С уважением, alexnik100