Forum: Mikrocontroller und Digitale Elektronik LWIP Stack: ARP Probe senden


von Stefan K. (whassup)


Lesenswert?

Hallo,

normalerweise senden Ethernet-Teilnehmer eine ARP-Probe nach dem Link-up 
um herauszufinden, dass niemand anderes die eigene IP-Adresse verwendet.

Beim LWIP-Stack scheint das nicht der Fall zu sein. Muss man dies als 
Option erst irgendwo aktivieren? (ARP ist bereits aktiviert und 
ARP-Anfragen warden auch vom LWIP-Stack beantwortet)

Oder gibt es eine Möglichkeit ARP-Probes manuell zu versenden?

Vielen Dank im Voraus.
Stefan

von Frank K. (fchk)


Lesenswert?

Stefan K. schrieb:

> normalerweise senden Ethernet-Teilnehmer eine ARP-Probe nach dem Link-up
> um herauszufinden, dass niemand anderes die eigene IP-Adresse verwendet.

Das Senden von "Gratitious ARP Responses" und das Hören auf fremde ARP 
Messages ist nirgendwo in den RFCs vorgeschrieben und damit auch kein 
Mangel.

LWIP verhält sich in diesem Punkt völlig konform.

fchk

von Tiramisu (Gast)


Lesenswert?

>normalerweise senden Ethernet-Teilnehmer eine ARP-Probe nach dem Link-up
>um herauszufinden, dass niemand anderes die eigene IP-Adresse verwendet.

Nein!??!!

Eine ARP-Anfrage wird gebroadcastet und hat als Absenderadresse
die IP des anfragenden Rechners. Die Antwort geht als Unicast
zurueck.

Ein "Gratuitous ARP" wird in der Praxis bei HA-Konzepten
verwendet, in denen Adressen "wandern" koennen, da muss dem
(Layer2-)Netzwerk bekannt gemacht werden, dass eine gecachte
(IP/MAC)-Adresse von einem Rechner zum anderen wandert.
Die Gratuitous ARPs sieht man ohne ARP-Anfrage im realen Leben.

Einige DHCP-Server machen einen ARP-Check, ob bei Vergabe einer
IP diese nicht belegt ist. Dann nimmt man ARP, weil ARP kann
man schlecht blocken, ICMP echo requests (aka "ping") schon.
Vermutlich hast Du das Verhalten beim DHCP Server gesehen?

(So zumindest bei IPv4.)

von Stefan K. (whassup)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe die ARP-Probe (Source IP-Adresse = 0.0.0.0) bei einem Standard 
Windows Rechner und einem Standard Ethernet Switch gesehen (siehe 
Anhang, wireshark).

Wisst ihr zufällig, wie der richtige Weg ware, solch eine ARP-Probe im 
LWIP-Stack zu initiieren?

Die Idee wäre,die Funktion etharp_raw in etharp.c aufzurufen und Sender 
IP-Adresse 0.0.0.0 sowie Target MAC Adresse 00:00:00:00:00:00 zu 
übergeben.

Ich brauche die Abfrage deshalb, weil ich mich mit meinem Ethernet Gerät 
in ein LAN verbinde, dessen IP-Subnetz ich zwar kenne, aber nicht weiß, 
welche IP-Adressen bereits verwendet werden. Ich suche mir also eine 
IP-Adresse aus und möchte sie per ARP-Probe dann testen, ob sie noch 
verfügbar ist. DHCP ist in diesem Netzwerk nicht verfügbar.

Vielen Dank und Viele Grüße,
Stefan

von Little B. (lil-b)


Lesenswert?

um deine idee zu festigen:

Ich habe genau das in meinem TCP/IP-Stack implementiert, als 
fallback-lösung, wenn kein DHCP-Server verfügbar ist.

Ich mache einfach einen ARP-Scan über einen IP-Bereich, und nehme die 
erste, von der ich keine Antwort erhalte. Ob und wie man das im lwIP 
implementiert/aktiviert, weiß ich jedoch nicht.

Vieleicht ist das Thema "Zeroconf" für dich hilfreich. Das übernimmt 
genau deine gewünschte Funktion.

von Little B. (lil-b)


Lesenswert?

Nachtrag für alle mit Halbwissen:

RFC2131 - Dynamic Host Configuration Protocol
Section 2.2
[...]
   In some environments it will be necessary to reassign network
   addresses due to exhaustion of available addresses.  In such
   environments, the allocation mechanism will reuse addresses whose
   lease has expired.  The server should use whatever information is
   available in the configuration information repository to choose an
   address to reuse.  For example, the server may choose the least
   recently assigned address.  As a consistency check, the allocating
   server SHOULD probe the reused address before allocating the address,
   e.g., with an ICMP echo request, and the client SHOULD probe the
   newly received address, e.g., with ARP.
[...]

Die Adresse wird mittels ARP geprobed, natürlich mit Absender 0.0.0.0

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.