NodeMCU Ping работает на одном, но не на другом
Обновление 2:
Протестировали, пропинговав различные устройства в разных подсетях/вланах.
и сделал pcap на точке доступа Wi-Fi
Я вижу запросы icmp, проходящие для каждого запроса, кроме запросов в подсети 4.x, почти как если бы arduino не нравился этот IP-адрес и отказывался отправлять эти пакеты?
Обновление 1:
Протестировано следующее
Включил ведение журнала в брандмауэре и заметил следующие действия:
- Проверка связи маршрутизатора с Arduino. См. журналы брандмауэра, Arduino получает ответ. (Красная линия)
- Отправить внешний веб-запрос от arduino — просмотреть журналы брандмауэра, arduino получит ответ. (оранжевая линия)
- Отправить веб-запрос на внутренний сервер — Arduino запрашивает внутренний DNS и получает IP-адрес веб-сервера, но запрос не отправляется (в журналах брандмауэра ничего) (желтый и синий)
- Отправить ping на внутренний сервер — Arduino запрашивает тот же DNS-сервер, получает IP-адрес, но запрос не отправляется (снова записывается журнал брандмауэра) (желтый и зеленый)
однако при отправке ping-запроса и веб-запроса с рабочего стола отображается как журнал брандмауэра, блокирующий ping-запрос, так и правило, разрешающее веб-запрос. (Коричневый Фиолетовый Розовый)
Еще раз прикрепите диаграмму, чтобы визуализировать происходящее. При необходимости можно прикрепить журналы или правила маршрутизатора
https://imgur.com/a/g4TipmZ
Также я установил ПК с Windows с тем же IP-адресом и может пинговать веб-сервер, поэтому я знаю, что что-то не так с запросами Arduino, в частности, к веб-серверу, а не к брандмауэру?
Завершить обновление
У меня есть два Node MCU, которые я использую для проекта. Некоторое время назад они работали нормально, но недавно я изменил некоторые сетевые настройки в своей домашней сети и обнаружил, что это сломало сценарий, который я запускал на них. Наконец-то я понял, где что-то пошло не так, и исправил это, но теперь у меня есть еще одна интересная проблема.
Один из моих узлов выполняет этот скрипт нормально, тогда как другой застревает на этапе проверки связи. Я загрузил один и тот же сценарий на оба узла и поменял местами назначенный IP-адрес, и он следует за устройством, а не за IP-адресом. Так что я знаю, что это не проблема с сетью.
Я знаю, что WiFi работает на забавном узле, так как он получает IP-адрес. но дальше дело не идет
Есть идеи?
Сценарий прикреплен ниже:
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266Ping.h>
// Учетные данные Wi-Fi.
const char* WIFI_SSID = "SSID";
const char* WIFI_PASS = "******";
WiFiClientSecure wifiClient;
bool connection = false;
WiFiClient client;
const char* dbServer = "webaddress";
void setup() {
//Открыть серийный номер
Serial.begin(9600);
Serial.setTimeout(2000);
// Подключиться к Wi-Fi
bool pingtest = false;
Serial.print("Connecting to WiFi");
WiFi.begin(WIFI_SSID, WIFI_PASS);
//Ждем подключения
int wificount = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
connection = true;
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
while(!pingtest){
Serial.println("Pinging Server");
if(Ping.ping(dbServer) == true){
pingtest = true;
}else{
Serial.print(".");
delay(1000);
}
}
}
}
void loop() {
Serial.println("Hello");
delay(2000);
}
Обновление (кросс-опубликовано с другого форума): У меня есть Arduino, который пингует сервер в другой VLAN/подсети как часть своего кода. Некоторое время назад это работало, но я изменил некоторые настройки своего брандмауэра, чтобы ограничить доступ, и это сломало код Arduino. Я обнаружил, что это произошло из-за того, что я блокировал ICMP через VLAN. Поэтому я создал правило, разрешающее запросы ping между двумя VLAN. проверено на моем рабочем столе (в той же сети, что и Arduino) и отлично работает. Пошел тестировать на Arduino и не получил никакого ответа.
Поэтому я вставил IP-адрес маршрутизатора и проверил его на Arduino, все работает нормально. Я даже могу пинговать Arduino со своего рабочего стола и пинговать свой рабочий стол с Arduino
Поэтому я решил, что у меня должно быть какое-то другое правило брандмауэра, позволяющее моему рабочему столу иметь особый доступ. (не то, чтобы я мог найти это) поэтому дал Arduino тот же IP-адрес и не повезло, но все еще может пинговать маршрутизатор
Я прикрепил здесь грубый рисунок. Надеюсь, это поможет визуализировать мою проблему.
@Thomas PomTom Steel, 👍-1
Обсуждение1 ответ
Если проверка связи не работает через маршрутизируемое соединение, возможно, это так.
Шлюз по умолчанию на устройстве Arduino. Добавьте
Serial.println(WiFi.gatewayIP().toString());
, чтобы напечатать шлюз по умолчанию.Проблема с DNS. Я предполагаю, что
const char* dbServer = "webddress";
указывает полное доменное имя.Брандмауэр блокирует ICMP на входящем или исходящем пути.
Провели много тестов на другом форуме и пришли к выводу, что Arduino не хочет отправлять запросы в очень определенный диапазон IP-адресов. Для тестирования у меня есть следующая настройка Настольный ПК: 192.168.1.100, arduino 192.168.1.222 (Vlan 10) Сервер 1: 192.168.99.40 (Влан 99) Сервер 2: 192.168.4.200 (Vlan 40) Я могу нормально пинговать оба сервера со своего настольного ПК. Я могу пинговать Google, маршрутизатор и сервер 1 с Arduino, но не сервер 2. Я сделал захват пакетов в точке доступа Wi-Fi и вижу пакеты ICMP для других пингов, но не при пинге сервера 2., @Thomas PomTom Steel
Я также установил для ноутбука тот же IP-адрес, что и для Arduino (после выключения Arduino во избежание конфликтов), и пинг проходит нормально. Я также подтвердил, что IP-адрес шлюза и сетевая маска установлены правильно на Arduino. и я удалил все домены из сценариев для тестирования, используя только IP-адреса, чтобы попытаться устранить проблемы с DNS., @Thomas PomTom Steel
Добавьте сниффер в vlan 10 и посмотрите, что отправляет Arduino. И проверьте, что пишет/блокирует журнал брандмауэра., @MatsK
Чтобы не показаться грубым. Просто я уже упоминал об этом дважды. Сделал pcap на точке доступа Wi-Fi и не вижу никаких запросов от arduino при пинге диапазона 4.x, но я делаю это с другими запросами ping. И брандмауэр показывает то же самое, журналы для всех моих тестов пинга, кроме диапазона 4.x, @Thomas PomTom Steel
- Как определить размер Flash?
- WebSocketsServer.h: No such file or directory
- В ESP-12E NodeMCU, какой выход PIN A0?
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Было найдено несколько библиотек для «WiFiClient.h» с помощью nodemcu.
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- NodeMCU поддерживает внедрение ключей?
попробуйте стереть флешку с помощью esptool, чтобы очистить старые настройки RF, затем загрузите скетч и подождите пару минут, пока настройки RF откалибруются, @Juraj
Это не сработало Удалил флэш-память на обоих устройствах, и теперь они оба не могут выполнить ping или выполнить мой веб-запрос позже в коде., @Thomas PomTom Steel
хорошо, не уверен, что это проблема с маршрутизацией или проблема с arduino, так как я получаю странные результаты тестов. Обновлю исходную публикацию новыми выводами, @Thomas PomTom Steel
Вы позволили ему откалибровать радиочастотную часть?, @Juraj
Да, обновил исходную публикацию дополнительной информацией, @Thomas PomTom Steel