Ricevere MAC address automaticamente

Buongiorno ragazzi,

ho una domanda: è possibile recuperare il mac address di una scheda di rete (ethernet shield collegato al pc) in modo automatico, per poi utilizzarlo in una variabile?

Se automaticamente non è possibile, in che altri modi si potrebbe fare?

Grazie!

Beh, per la precisione, il MAC address su alcune schede è fisso e definito dal produttore e presente su di un apposito sticker, per altre (generalmente quelle "cinesi") non hanno un proprio MAC address quindi va impostato (generalmente si usa quello "generico" 0xDE.0xAD.0xBE.0xEF.0xFE.0xED creato "spiritosamente" su valori hex, visto che "Dead Beef Feed" e significa "mangime di carne morta" :wink: ).

In ogni caso il metodo Etehrnet.begin() richiede il Mac address come parametro, per cui lo devi sapere perché devi impostarlo, non credo si possa "leggere".

Grazie della curiosità sul MAC :smiley:

Il problema che vorrei risolvere è che vorrei poter collegare arduino a diversi PC e leggere il MAC per poi archiviarlo in variabile. Tu però mi dici che, per iniziare qualsiasi comunicazione, serve prima Ethernet.begin() che necessita per forza il MAC, giusto?

Non ci sono altri metodi..che so, uno shield apposito, oppure un piccolo eseguibile da lanciare con arduino collegato (e con ethernet inizializzato) che glielo passa in qualche modo?

Grazie!

Aspetta, forse ho capito male: tu quindi parli del MAC address dei sistemi collegati in rete, non di Arduino? E poi, se così fosse, Arduino fa da server (ossia riceve lui le connessioni, come server) oppure è lui che si connette (quindi inizia lui le connessioni come client)?

Sisi, della scheda di rete del PC al quale è collegato arduino. Mi serve il MAC, per poi poter inviare il segnale di wake on lan :slight_smile:

Sempre per capire meglio, scusa, ripeto: è Arduino che si connette al PC (quindi lui è CLIENT), o è il PC che si connette ad Arduino (quindi Arduino è SERVER)?

Puoi recuperare il MAC di un apparato in rete a partire dal suo IP usando il protocollo ARP, ma se con tale MAC devi farci un wake-on-lan, l'apparato sarà spento e non potrà rispondere alla richiesta ARP.

In un contesto come il tuo sei obbligato a "cablarlo" nel programma.

Ho dato un'occhiata alla libreria Ethernet e finora non ho trovato traccia di un "getRemoteMAC()" o qualcosa del genere. Non esposto, quantomeno.
Credo serva una interrogazione ARP ma non l''ho mai fatto con Arduino..

SukkoPera:
Puoi recuperare il MAC di un apparato in rete a partire dal suo IP usando il protocollo ARP, ma se con tale MAC devi farci un wake-on-lan, l'apparato sarà spento e non potrà rispondere alla richiesta ARP.

Corretto, ma credo intenda "raccogliere" i MAC dei client (o del client) quando questo si collega, e poi usarlo localmente se l'apparato dovesse risultare spento mandando quindi il WoL.

docdoc:
Sempre per capire meglio, scusa, ripeto: è Arduino che si connette al PC (quindi lui è CLIENT), o è il PC che si connette ad Arduino (quindi Arduino è SERVER)?

Come avrai capito, non sono per niente esperto :smiley: A me serve che arduino riceva il MAC della scheda di rete del PC, ma non so se è il PC che deve inviarlo ad arduino appena sente la connessione, oppure se è arduino a doverglielo chiedere. Non ho nemmeno una preferenza tra i 2 metodi, mi serve solo la comodità di non dover impostare a mano il MAC nello sketch di arduino.

Come dicevo, mi andrebbe bene anche un eseguibile a parte da lanciare sul PC e che comunichi ad arduino il MAC..o soluzioni comode simili, senza dover andare nell'ipconfig o nelle proprietà della scheda

SukkoPera:
Puoi recuperare il MAC di un apparato in rete a partire dal suo IP usando il protocollo ARP, ma se con tale MAC devi farci un wake-on-lan, l'apparato sarà spento e non potrà rispondere alla richiesta ARP.

In un contesto come il tuo sei obbligato a "cablarlo" nel programma.

Esatto, è come dice Doc. Collego arduino con pc acceso, così si cattura il MAC e se lo tiene archiviato per gli eventuali avvii successivi

Cad81:
Collego arduino con pc acceso, così si cattura il MAC e se lo tiene archiviato per gli eventuali avvii successivi

Si ma, scusa, continuo però a non capire bene l’esigenza, prova a spiegarmi meglio.

Tu vorresti il MAC di un certo PC in rete (locale) perché se non risultasse attivo devi mandare il WoL, giusto?

Tu per ricavare il MAC di un sistema devi avere con questo una qualche sessione, ossia un pacchetto UDP o TCP dal quale ottenerlo. La sessione:

  1. o la instauri tu connettendoti con l’IP del remoto
  2. o che lui instaura con te (e tu fai da server)
  3. oppure devi fare una interrogazione ARP conoscendo almeno l’indirizzo IP.

Per cui per i punti 1 e 3 sei tu che devi comunque conoscere l’indirizzo IP del PC, e impostarlo all’interno di Arduino, ma a quel punto ci aggiungi anche (o solo) il MAC e sei a posto. Potresti anche memorizzarlo nella EEPROM interna per averlo anche al riavvio di Arduino senza attendere la prima sessione.

Altrimenti nel caso 2 per ottenere il MAC potresti teoricamente farlo dalla prima connessione e mantenerlo in EEPROM, ma attualmente nelle librerie non vedo alcun modo per ottenere questa informazioni, mi spiace…

Per cui ti direi di fare la cosa più semplice, mantenere in EEPROM l’IP e MAC del PC che poi eventualmente cambierai mandando ad Arduino un apposito comando (via TCP/IP o configurazione da seriale).

Hai capito correttamente...il punto 2 sarebbe perfetto, ma non si può.

Vediamo, faccio un'altra sparata...spero di non dir troppe cazzate :smiley:

1- Arduino collegato al PC tramite LAN, come server, inizializzato e pronto per comunicare
2- un eseguibile da lanciare su PC che rileva il MAC del PC e lo invia ad arduino, che se lo salva

Si, così può funzionare.