Adresse ip arduino qui change toute seule.

Bonjour.

En utilisant Serial.println(Ethernet.localIP()); j'ai constaté que l'adresse IP de mon Arduino Uno + Ethernet Shield était différente de celle que je lui ais donné dans son programme, ce qui explique pourquoi je n'arrivais plus à le connecter au réseau:

Adresse IP que j'ai déclarée dans le programme: { 172, 20, 104 , 150 };
Adresse IP reçue par Serial.print(Ethernet.localIP()); : 173,245,235,182

Je travail sur un projet où il est question d'un site accessible en tapant l'adresse ip de l'arduino dans la barre d'adresse du navigateur, jusqu'aujourd'hui mon programme a toujours fonctionné (ça marchait encore au début de ce matin à vrai dire)

Le problème c'est que je travail sur ce projet sur le réseau de l'iut (pour qui le projet est destiné), et il a des restrictions, du coup si l'arduino n'a pas l'adresse MAC et IP que j'ai fais autoriser par l'iut il se connecte pas au réseau.

Le code ressemble pas mal à l'exemple fournit avec L'arduino, a une ou deux lignes près, et avec les adresses IP et MAC concernées.

#include <SPI.h>            
                            
#include <Ethernet.h>     




byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xD1, 0x39 }; 
byte ip[] = { 172, 20, 104 , 150 }; 


EthernetServer server(80);              

void setup(){
  
  Serial.begin(9600); 
    delay(3000); 
    
    Ethernet.begin(mac, ip); 
    Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
void loop(){
  
  
  EthernetClient client = server.available(); 
 
      while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       
        
        client.println("HTTP/1.1 200 OK"); 
        client.println("Content-Type: text/html");
        client.println();        
        client.println("<html>");
        client.println("<head>"); 
        client.print("<meta http-equiv=\"refresh\" content=\"10\">"); 
        client.println("<title>Test siteweb simple</title>");
        client.println("</head>");
        client.println("<body>"); 
        client.println("<p>Bonsoir");   
        client.print("</p>");
        client.println("</body>");
        
         client.stop(); 
      
      } 
    } 

}


void generer_page_html(){
}

Pouvez vous s'il vous plait, m'expliquer pourquoi l'adresse IP que j'ai donné dans le programme et celle reçue avec Serial.print(Ethernet.localIP()); sont subitement différentes ?

Merci.

Edit: l'arduino Uno+shield Ethernet est branché à un switch Ethernet, ça a peut être une importance.

Tout dépend de l'adressage IP réalisé dans le réseau de ton IUT, pour cela tu peux aller voir les informaticien qui s'occupe du réseau ou alors du fait un ipconfig sur un ordi du réseau et tu nous mets le résultat ici :wink:

Si tu utilises le même programme et que d'un coup ça marche plus, y'a pas trop à chercher d'où vient le problème. Ce qui nous amène à la conclusion de john_lenfr, ça vient du réseau de l'IUT. Je suis prêt à mettre un billet que quelqu'un t'as voler ton ip sur le réseau et/ou que ton bail dhcp a été résilié ...

Merci pour vos réponses !

john_lenfr:
fait un ipconfig sur un ordi du réseau

Je ne comprends pas comment le résultat d'ipconfig sur l'ordi a un lien avec l'arduino, ça me donne l'adresse ip de l'ordi, le masque, la passerelle et le DNS, et je sais pas trop si je peux partager ces informations.

J'ai encore eu une adresse ip différente ce matin 173.245.235.247 (hier 173,245,235,182, et je veux 172, 20, 104 , 150).

Bon j'ai été voir les informaticiens, ils n'ont rien touché et me proposent d'écrire l'adresse ip " en dur " (directement dans le programme au lieu de faire une requète DHCP), mais c'est déjà le cas de mon programme ...

Ce qui est étrange c'est que Ethernet.localIP() donne l'adresse IP du shield Ethernet (cf: site arduino), donc je ne vois pas comment l'adresse pourrait être différente de celle que j'ai attribué au programme.
De plus j'ai enfin la bonne adresse ip au moment où j'écris ce message, et la seule action que j'ai fais entre temps c'est de débranché/branché le shield ethernet et l'usb, donc je suppose que tout ça n'étais qu'un "bug" au niveau des connections entre le shield et l'arduino ..

B@tto:
Je suis prêt à mettre un billet que quelqu'un t'as voler ton ip sur le réseau et/ou que ton bail dhcp a été résilié ...

Si ça se reproduit, je ping l'adresse que mon arduino est supposé avoir pour voir si quelqu'un l'utilise :slight_smile:

Deux possibilités:

  • tu prend une adresse interdit/déjà prise et donc, bim on t'en file une autre

  • Problème de réseau qui est trop restrictif avec un lien ip/mac

Solution, tu démarre le arduino, tu regarde l'adresse qu'on te donne ( elle est donc disponible ), tu le mets en dur dans le programme et tu redémarre le arduino avec cette adresse.

La tu devrais conserver cette adresse qui est "valide" car donné par ton réseau.

et après tu n’éteint plus jamais ton nono de peur qu'on te vole l'adresse xDD

Skizo.

WhiteZORA:
Merci pour vos réponses !

john_lenfr:
fait un ipconfig sur un ordi du réseau

Je ne comprends pas comment le résultat d'ipconfig sur l'ordi a un lien avec l'arduino,

ça nous donnera le masque d'adressage IP de ton IUT, rien de bien méchant en terme de sécurité.

Si le masque de l'IUT est en 173.245.235.XXX jamais tu pourras avoir d'adresse en 172.20.104.XXX :wink:
Donc il te faut spécifier une adresse en 173.245.235.XXX dans ton code.
En sachant que l'adressage IP est dynamique au sein de l'IUT, et comme le disait B@tto, il se peut que l'adresse que tu mettras dans ton code sera déjà prise, ou reprise une autre fois, ou en conflit avec un autre ordi.

Donc ta méthode de ping sur le réseau sur l'adresse est bonne!

Et pour répondre à l'objet de ton message, l'adresse IP ne change pas "toute seule", elle est attribuée par le serveur DHCP du réseau.

:wink: