Bonjour,
Voila avec mon ESP32, je souhaiterai surveiller la présence sur le réseau de machines. hors, j'ai un Docker et des containers sur des ports précis (192.168.1.45:80 par exemple).
Voila ce que je fais:
#include <ESPping.h>
const char* ssid = "xxx";
const char* password = "xxx";
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
// Set your Static IP address
IPAddress staticIP(192, 168, 1, 29); //local_IP
// Set your Gateway IP address
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
WiFi.config(staticIP, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("\nConnection OK, IP: ");
Serial.print(WiFi.localIP());
Serial.print(" Gateway: ");
Serial.println(WiFi.gatewayIP());
Serial.println("You can try to ping me ;-)");
}
void loop()
{
Serial.println("________________________");
// Ping google
bool success1 = Ping.ping("8.8.8.8", 3);
if(!success1){
Serial.println("Ping Google failed");
} else {
Serial.println("Acces Google -> OK");
}
// Ping Portainer
bool success3 = Ping.ping("192.168.1.45:80", 3);
if(!success3){
Serial.println("Ping Portainer failed");
} else {
Serial.println("Acces Portainer ->OK");
}
}
donc "Ping.ping("192.168.1.45:80", 3);" ne fonctionne pas
"Ping.ping("192.168.1.45 80", 3);" ne fonctionne pas
"Ping.ping("192.168.1.45" ,80 , 3);" ne fonctionne pas
Nico.
Ping utilise des paquets ICMP et ICMP n'utilise pas de numéros de port... Ping n'est donc pas capable de voir si un serveur a un port particulier ouvert. La doc de la bibliothèque ping d'ailleurs n'a pas de paramètre de port... juste une IP ou un domaine et le nombre de fois que vous voulez essayer
Vous pourriez simuler une tentative d'établissement d'une connexion à un port spécifique et attendre de voir si l'hôte cible répond. S'il y a une réponse, le port cible est ouvert. Si ce n'est pas le cas, le port cible est fermé ou l'hôte refuse d'accepter une connexion car aucun service n'est configuré pour écouter les connexions sur ce port (ou vous n'êtes pas autorisé)
par exemple vous essayez (on dirait) sur le port 80, donc vous supposez qu'il y a sans doute un serveur HTTP qui attend des requêtes sur ce serveur ➜ essayez de faite une requête HTTP et écoutez la réponse.. Mais si le serveur est en ligne mais que les services offerts sont sur d'autres ports, comme un FTP ou une base de données ou du HTTPS ou autre, le serveur est bien là mais refusera la connexion HTTP
un ping sur l'IP du serveur, s'il accepte les ping, vous dira si le serveur en lui même est joignable (il existe une route sur IP entre votre machine et le serveur)
En complément de la réponse de @J-M-L, tu peux utiliser la librairie Ethernet qui marchera pour tout type de serveur dont tu veux vérifier la disponibilité.
Bonsoir,
Merci pour vos réponses.
Ici, le port 80 était pour exemple mais je souhaite contrôler plusieurs ports sur la même adresse
Si je comprend bien, il n'est pas possible de contrôler un port en particulier avec <ESPping.h>. En revanche dans < Ethernet>, il y à if (EthernetClient) qui semble faire le job. Je vai tester
Comme l'indique @J-M-L , le ping utilise le protocole ICMP, qui n'a pas besoin de port pour trouver le service ICMP qui répond.
suivant le service que tu veux tester, le protocole utilisé est TCP ou UDP, qui eux utilise un port pour différencier les différents services\application accessible sur la même IP.
Donc oui EthernetClient te permet je crois de tester une connexion à un service TCP.
oui et non, cela dépend de ce que tu veux tester, sur l'UDP, il y a de forte chance que la trame doit comporter des données pertinentes.
Sur du TCP, une connexion peut suffire et il n'y a pas de données associés à ce moment.
Donc comme souvent, tout dépend de ce que @Zarb94 veut faire
Oui, ce que je voulais souligner, c'est que la plupart des services qui demandent une authentification peuvent être quand même testé sans donnée, donc que c'était comme les antibiotique
à condition de pouvoir joindre le service — par exemple un service planqué derrière un service de délégation d'autorisation comme OAuth 2 ne sera pas visible si vous n'avez pas présenté le bon token
Dans ce cas là, tu ne veut pas tester la présence, mais la fonctionnalité du service et on sors du "ping".
Il ne s'agit donc plus de savoir si le service sur IP:port est là.
Bonsoir,
Merci pour cet engouement!
Pour répondre à certains, je souhaite savoir si mon "Home Assistant" et tous les périphériques autours sont à l'écoute. Si ils répondent, je suppose alors qu'ils ne sont pas arrêtè ou gelé.
Je voulais aussi avec Ping vérifier l'accès à internet. En gros, je souhaite avoir un check-up en un coup d'oeuil de mon installation grandissante.
Nicolas
Il faudrait que tu fasse une liste de ce que tu veux comme informations pour chaque appareil.
En fonction de ce que tu veux, tu pourra adapter la façon de le monitorer.
Après si vraiment tu veux monitorer tous tes appareils, peut que cela vaut le coup d'utiliser un logiciel spécialisé sur un Rpi ou un serveur qui trainerait par là