Hallo Netzwerkexperten,
wie kann ich meine eigenen Schaltungen mit Netzwerkanschluss im
Netztwerk bekannt machen, so dass sie von angeschlossenen Rechnern
gefunden werden?
Meine Schaltungen bezieht die IP Adresse per DHCP.
Für lwip gibt ein es kleines NetBIOS Addon, damit gelingt es unter
Windows, die Karte unter ihrem NetBIOS Namen anzupingen. Da ich aber
mehrere Geräte mit Seriennummer als NetBIOS Name (z.B. SCHALTUNG0815) im
Netzwerk habe, klappt das auch nicht, denn ich kennen den Namen inkl.
willkürlicher Seriennummer ja vorher nicht. Wenn ich den ARP- oder
NetBIOS-Cache anschaue (arp -a bzw. nbstat) tauchen meine Geräte immer
erst auf, wenn ich sie (nach manueller Adresssuche) angepingt habe.
Gibt es einen Weg, dass meine Geräte im Netzwerk automatisch sichtbar
werden? Z.b. dass mein Gerät zyklisch einen Broadcast verschickt "hallo
es gibt mich und ich heisse SCHALTUNG4711".
Aufgrund der Komplexität möchte ich uPnP gerne vermeiden, wisst Ihr
einen anderen Weg?
Das mache ich bereits; ich sehe im Sniffer auch, dass der Name beim
Aushandeln der IP Adresse korrekt gesendet wird. Der DHCP Server sitzt
im Router. Die Windows Stationen im Netz kümmern sich anscheinend nicht
darum, denn der ping über Gerätename funktioniert erst bei Verwendung
von NetBIOS.
Haben diese kleinen Router für's Heimnetz einen DNS eingebaut? Und falls
ja, was bewegt den dazu, meine Geräte aufzunehmen?
Die Namen lassen sich innerhalb eines Netzes auch ansprechen, wenn sie
in den diversen Windows Listen nicht auftauchen. Netbios (on TCP) nutzt
dazu einen Broadcast. Es geht auch per DNS, wenn der DHCP-Server mit dem
DNS-Server identisch ist, wie bei den üblichen DSL-Routern.
Sven schrieb:> Der DHCP Server sitzt> im Router. Die Windows Stationen im Netz kümmern sich anscheinend nicht> darum, denn der ping über Gerätename funktioniert erst bei Verwendung> von NetBIOS.
bei der fitz.box muss man die domaine mit dran hängen.
ping HW0815.fritz.box
ein ping HW0815 ist eigentlich falsch, weil es kein vollständiger (FQN)
ist.
TCP/IP ist ja "nur" das Protokoll, welches die Daten transportiert. Das
baut nunmal darauf auf, daß derjenige, der eine Verbindung aufbauen
will, Namen oder Adresse des Verbindungspartsners kennt.
Du wirst nicht drumrumkommen, oberhalb von TCP/IP eine weitere Schicht
aufzusetzen, die die automatische Verwaltung neu hinzukommender oder
sich wieder abmeldender Teilnehmer innerhalb deines Systems übernimmt.
Oliver
Es gibt einen ARP modus, bei dem das Gerät seine Mac Addresse periodisch
broadcastet.
Unsolicited ARP request frames, on the other hand, are broadcast ARP
requests initiated by a host owning an IP address.
Example 2.3. Unsolicited ARP request frames
[root@tristan]# arping -q -c 3 -U -I eth0 192.168.99.35
[root@masq-gw]# tcpdump -c 3 -nni eth2 arp
tcpdump: listening on eth2
06:28:23.172068 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell
192.168.99.35
06:28:24.167290 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell
192.168.99.35
06:28:25.167250 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell
192.168.99.35
[root@masq-gw]# ip neigh show
Bei meinen Geräten, wenn Link up, für 5 Minuten werden diese ARP jede
30 Sekunden gesendet, aber nach jedem Senden wird der Interwall um
30 Sekunden erhöht. Also 30 Sek, 60 Sek, 90 Sek, 120 Sek usw bis 300
Sekunden
überschritten werden. Logischer Link, nicht HW Link, da ja die Addresse
bezogen werden muss.
pic user schrieb:> Es gibt einen ARP modus, bei dem das Gerät seine Mac Addresse periodisch> broadcastet.
Das hat er aber nichts von, weil der Name darin nicht vorkommt.
Ja, das stimmt, aber die eigene Mac-Adressen sind bekannt und so kann
ein
Installer darauf zugreifen, sei es HTTP, ..., und es funktioniert auch
oder speziell wenn noch keine IP-Adresse konfiguriert ist.
Z.b. Ich kaufe meine Mac-Adressen in 1000 Stück und dementsprechend sind
sie mir, bzw meinem Installer als Range bekannt.
Weiters ist es so, daß z.B. ein Ethernet Paket minimum 46byte haben
muss, ein Ping Paket hat 32 byte, also kann man hinter einem Ping Paket
den Identifier usw anhängen, sowie auch größere Ping Pakte (64byte)
senden. Das Padding geschieht automatisch, im embedded Bereich werden da
aber gerne Daten angehängt.
Danke für die vielen Antworten.
Nun, selbst wenn dem DNS (also üblicherweise dem Heim-Router) mein Gerät
mit Namen bekannt ist, weiß deswegen die Windows-Station im Netz noch
nichts von der Existenz meines Geräts.
Und wie gesagt, die Namensauflösung ist eh nicht das Problem, das
funktioniert, sei es nun über den DNS im Router oder NetBIOS. Meine
Windows-Station weiß nur leider nicht, welchen Namen sie anfragen soll.
Das was Apple macht ist auch unter AutoIP und uPnP bekannt. Wenn ein
DHCP Server vorhanden ist, wird eh nicht auf AutoIP zurückgegriffen. Und
uPnP ist mir wie gesagt zu komplex für meine embedded Lösung.
Insofern klingt der Vorschlag von pic user ziemlich interessant,
zyklisch solche ARP Broadcasts rauszuschicken.
Heisst das, dass meine Geräte-MAC-Adresse nebst IP irgendwann von selbst
im arp Cache meiner Windows Station auftaucht? Das wäre super, dann
könnte ich anhand der MAC Adressbereichs meine eigenen Geräte
rausfiltern.
Das werd ich mir mal ansehn!
ps. @pic user: wo kaufst du deine Adressen 1000er Weise? Ich kenne nur
ein 4096 Stück Paket für 600$
Ich kaufe Microchip 2Kbit Speicher mit MAC Addresse. Gibt es in
verschiedenen Ausführungen, auch die mit nur einer I/O. Ist zwar teurer
als verschiedenen Blöcke kaufen, aber auch flexibler und teilweise ist
eine kleines EEProm auch praktisch. Ich verwende meistens den
24AA02E48T-I/OT ,
kostet mich 12€cent aber schon bei 100 Stück ist er glaube ich
13-14€cent.
Nochwas, wenn du keine DHCP Addresse bekommst, oder auch keine
IP-Addresse
konfiguriert ist, dann ist es auch wichtig den Braodcast zu machen, dann
scheint nähmlich ein Incomplete Eintrag auf und du kannst, da du die
Mac-Addresse angezeigt bekommst, einen statischen ARP-Eintrag machen, um
dann eine IP-Addresse zu configurieren. Auch das Padding der 32byte
Addresse
ist interessant.
Ein Ansatz aus der Praxis:
16byte padding: Padding is defined as data[1:0] xor mac[2:1] xor
Checksum(header) + mac[2:1] - Checksum(header) +
encrypted_word[(index-1)&7]
padding:
byte0 : Checksum (byte*9+byte)
byte1-4 : MAGIC pattern
byte3-15: Payload 7bit data ascii + 4bit flags. 12 char string.
Optional the data[1:15] is xored with Checksum in order to hide the
magic pattern.
DU hast geschrieben, dass du auf Upnp verzichten möchtest, aber ein SSDP
Paket zu verschicken ist doch recht easy und für deine Zwecke vollkommen
ausreichend.
Danke Archie, ich dachte dieses uPnP ist ne riesen Protokoll Suite, und
davon wollte ich die Finger lassen. Aber diese SSDP alive Botschaft ist
ja nur ein HTTP über UDP, das hab ich schnell hingekriegt und es
funktioniert auch. Mein Gerät taucht nun im arp Cache der
angeschlossenen Rechner auf. Allerdings müssen die Rechner uPnP
unterstützen, bei WinXP SP2 muss man das erst aktivieren.
Evtl. ist der Tipp von pic_user also doch noch einen Versuch Wert, auch
wenn es im ersten Moment noch etwas verwirrend klingt, die Beschreibung.
Hast du mal was über Ping tunneling was gehört ?
Das geht auch mit ARP und ermöglicht deiner SW unabhänging von IP
addressen usw dein Gerät zu finden, also ideal für eine Konfiguriersw um
deine Produkte zu erkennen und ev. auch etwas mehr.
Wie du hier siehst,
http://www.erg.abdn.ac.uk/~gorry/eg3561/inet-pages/arp.html im blauen
Padding kannst du reinschreiben was du willst,
wird aber bei Ethernet-sniffern angezeigt. Deshalb wird der Bereicht
gerne etwas versteckt, wie oben beschrieben.
Der Aufbau für deine Implementierung ist hier beschrieben,
http://wiki.wireshark.org/Gratuitous_ARP
Upnp ist ein extremer Sicherheitsgau. Im privaten Umfeld ev. tragbar,
im betrieblichen generell nicht.
Ich würde ja wirklich gern auf ein zusätzliches Protokoll wie SSDP
verzichten wenn es auch mit ARP geht, aber ich krieg's nicht hin.
pic_user, du sprichst oben von Unsolicited ARP, ich denke du meinst das,
was auf den meisten Seiten als Gratuitous ARP bezeichnet wird?
Wenn ich mir das durchlese klingt das in der Theorie sehr gut: einfach
einen ARP Request zur eigenen IP senden, und fertig.
Ich habe das in meinem Gerät eingebaut, siehe Screenshot. Der Sniffer
erkennt das ganze auch als Gratuitous Paket. Die Windows Rechner im
Netzwerk (XP und Win7) sind davon aber unbeeindruckt. In deren ARP-Cache
tut sich gar nichts (arp -a)
Was mache ich falsch - sollte das Gerät von alleine im ARP Cache
auftauchen, oder muss ich hier noch eine Aktualisierung antriggern?
Ich habe auch versucht, ausser einem gratuitous Request eine gratuitous
Reply zu senden, und als destination MAC 000000000000 statt
FFFFFFFFFFFF. Macht alles keinen Unterschied.
Oder muss ich irgendwas in die Padding Bytes schreiben? Ich habe
eigentlich keinen Bedarf, Zusatzinformationen zu übertragen. Wenn mein
Device im ARP Cache auftaucht, erkenne ich es anhand des von mir
genutzten MAC Adressbereichs.