Laden...

Netzwerkkarten eindeutig identifizieren

Erstellt von Löwenherz vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.394 Views
L
Löwenherz Themenstarter:in
58 Beiträge seit 2006
vor 17 Jahren
Netzwerkkarten eindeutig identifizieren

Hallo Community 🙂

Ich habe hier gerade zwei baugleiche PCs auf dem Tisch und möchte nun in meine Applikation eine Funktion einbauen, die sicherstellt, dass immer ein bestimmter Netzwerkanschluss angesprochen wird. Die beiden Kisten haben jeweils 3 Ethernet-Anschlüsse. Es sind wirklich drei Ethernet-Controller und nicht ein interner Switch 😉

Ich habe schonmal angedacht, das über die PCI Location zu machen, aber in der MSDN habe ich gelesen, dass die PCI Busnummer sich jederzeit ändern kann...

Habt ihr eine Idee, wie ich das Problem angehen könnte?

Zum Background: An jeden dieser Ethernet-Controller kommt genau eine Ethernet-Kamera dran und ich möchte sicherstellen, dass meine Software Kamera 1 auch immer an einem definierten Port findet und nicht mit einem mal Kamera 1 und Kamera 2 den "Platz tauschen" 😉

Ich bedanke mich schon einmal im voraus 🙂

Löwenherz

G
497 Beiträge seit 2006
vor 17 Jahren

zur eindeutigen Identifikation der Netzwerkkarten kannst du die MAC-Adresse heranziehen. Die sollte (wenn manche Hersteller nicht schlampen würden) für jede Netzwerkkarte weltweit eindeutig sein. Die MAC bekommt man soweit ich weiss unter anderem über die Klasse System.Management.ManagementObject() bzw. ManagementObjectSearcher raus. Ein kurzes Suchen hat folgenden Thread in einem englischsprachigen Forum ausgegraben:

http://www.vbcity.com/forums/topic.asp?tid=13981&highlight=mac%7Caddress

L
Löwenherz Themenstarter:in
58 Beiträge seit 2006
vor 17 Jahren

Hallo und danke für deine schnelle Anwort!

Aber die MAC-Adresse eignet sich für diesen Zweck nicht so gut, da sie eben für jede NIC anders ist 🙂 Das, was ich suche, ist etwas, mit dem man zwei baugleiche Systeme "aufeinander abbilden" kann.

Nehmen wir mal das Beispiel mit den Kameras. Ich habe zwei Kamera: Kamera 1 und Kamera 2, beide hängen an jeweils einer eigenen Ethernetschnittstelle des PCs. Ich möchte vermeiden, dass die Software, die meine Bildauswertung macht, die Bilder von der falschen Kamera einzieht, wenn man den PC wechselt. Die PCs sind alle baugleich, so dass dies doch ohne weitteres möglich sein müsste...

Meine Sorge ist, dass das eine Windows NIC1 als erste Karte erkennt und das Windows auf dem anderen PC NIC2 als erste Netzwerkkarte nimmt. Gleiches Szenario, wenn NIC1 defekt sein sollte, würde NIC2 doch an dessen stelle rutschen, oder?

B
1.529 Beiträge seit 2006
vor 17 Jahren

Müssten die Kameras nicht unterschiedliche IP-Adressen haben? Oder eine Seriennummer?

Wenn ich dich nämlich richtig verstanden habe, willst du eigentlich gar nicht die NIC, sondern ein entferntes Gerät identifizieren. Dies anhand der Route zu machen ist jedoch in einem selbständig routenden Protokoll (IP) unsinnig...

G
497 Beiträge seit 2006
vor 17 Jahren

wenn die Kameras eigene IPs haben (bzw. wenn sie sich in einem IP-Netz befinden), bräuchte jeder Rechner überhaupt nur eine Netzwerkkarte.

Was anderes als die MAC fiele mir zur eindeutigen Identifikation der Netzwerkkarte selbst, also ohne Zurhilfenahme eines Netzwerkprotokolls wie IP jetzt nicht ein. Die Konfiguration könnte man beim ersten Anwendungsstart auf dem Rechner lokal ablegen und einmalig die Kameras entsprechend zuordnen, das müsste man dann auf dem lokalen Rechner nur noch bei Änderungen an der Konfiguration anpassen.

L
Löwenherz Themenstarter:in
58 Beiträge seit 2006
vor 17 Jahren

Hallo 🙂

Irgendwie habe ich es scheinbar nicht geschafft, das auszudrücken, was ich meine ^^

Die Kameras und die PCs kommen alle ganz identisch aus dem Regal und haben daher alle die gleichen IP-Einstellungen. Die IP-Einstellungen sollen von der Software selbst gemacht werden, um reproduzierbare Ergebnisse zu erhalten. Um nun einer bestimmten NIC eine bestimmte Adresse zuordnen zu können, würde ich gerne wissen, wie man eine bestimmte NIC von anderen NICs im Rechner unterscheiden kann. Die Software soll diese Einstellungen auf allen baugleichen PCs identisch konfigurieren. Also, NIC1 soll z.b. 192.168.1.1 bekommen, NIC2 die 192.168.2.1 usw.

Ich will verhindern, dass durch das Abschalten oder Kaputtgehen einer NIC die Zuweisung "verrutscht". Die MAC-Adresse ist also nicht so gut geeignet, da sie ja logischerweise für jede NIC verschieden ist. Meine Idee war die Identifikation via PCI Bus Number, Device Number und Function Number, also die NICs in ihrer Position im PCI-Bussystem festzuzurren. Fällt nun eine aus, kann man über die Position im Bussystem immer noch eindeutig sagen, welche nun NIC1 ist und welche NIC2.

Die IPs werden kann mit einem eigenen Protokoll vergeben, das DHCP sehr ähnelt.

@GarlandGreene
Ich brauche schon eine NIC für jede Kamera, da da wirklich enorme Datenmengen zustande kommen, wenn man 1600x1200 RGB-Pixel bei ca. 30Hz transportiert.

B
1.529 Beiträge seit 2006
vor 17 Jahren

Ich bin verwirrt.

da da wirklich enorme Datenmengen zustande kommen, wenn man 1600x1200 RGB-Pixel bei ca. 30Hz transportiert.

1600x1200x3x30 => 165 MB/s.
Selbst wenn die Bilder JPEG-komprimiert (auf 10%) kommen, ergibt das 16,5 MB/s.
Falls du Fast Ethernet (100Mbps) benutzt, wovon ich ausgehe, wenn du von PCI redest, hast du eine theoretische maximale Transferleistung von rund 12MB/s. Also zu wenig.
Solltest du Gigabit Ethernet benutzen, wird das wiederum am PCI-Bus scheitern, da der in der normalen (32Bit, 33MHz) Form nur 133MB/s transferieren kann. Und das müssen sich alle Geräte teilen.
Ich vermute eher, dass die Kameras die Bilder MPEG kodieren und dann so zwischen 5 und 10 Mb/s verschicken.

Ansonsten: es kann doch deiner Software egal sein, an welcher NIC eine Kamera hängt und welche IP-Adresse sie hat. Da du die Kamera identifizieren willst, solltest du das auch tun. Wer schützt dich denn davor, dass jemand (versehentlich) Kamera 1 an NIC 2 stöpselt (und umgekehrt)? Wenn deine Software die Kamera nur über den NIC identifizieren will, öffnet das der Fehlbedienung Tür und Tor.

Falls du das dennoch willst, hast du ja schon eine geeignete Idee beschrieben.

L
Löwenherz Themenstarter:in
58 Beiträge seit 2006
vor 17 Jahren

Hallo Borg,

es stimmt alles, was du sagst 🙂 Die Bilder sind JPEG-komprimiert und die Kameras werden über GBit-Ethernet angeschlossen. Die NICs selbst hängen an PCI Express. Die Bandbreite genügt schon, das ist kein Problem.

Die Kameras kommen mit einer einheitlichen Konfiguration aus dem Lager und die sollte auch niemand mehr anfassen müssen, um ihr eine passende IP-Adresse für Kamera 1 oder 2 zu verpassen. Ich möchte auf das Gehäuse schreiben können "Kamera 1" und "Kamera 2" und dann auch sicher sein, dass dies von der Software so verwendet wird. Mit Hilfe eines selbstgebauten Tools würde ich die passende NIC identifizieren wollen und dann der eine bestimmte IP verpassen. Danach könnte man sich vorstellen, dass man einen DHCP-Server für die Einrichtung der Kameras benutzt.

Für das Herausfinden der PCI-Location (Bus Number, Device Number, Function Number) habe ich allerdings noch keine passende Funktion gefunden. Hast du vielleicht eine Idee, wie ich da rankommen könnte?

Vielen Dank!

Löwenherz

B
1.529 Beiträge seit 2006
vor 17 Jahren

Die Netzwerkkarten kannst du über WMI herausfinden, Klassen Win32_NetworkAdapter und eventuell alle mit Win32_PnP*. Such mal hier nach WMI Code Creator".

Trotzdem bleibe ich bei meiner Meinung, dass du eigentlich die Kameras identifizieren willst und das auch tun solltest. Du könntest ja die Seriennummern aller Kameras in der Software speichern und bei jeder eintragen, ob sie als Kamera 1 oder 2 dient und entsprechend den Aufkleber anbringen.

L
Löwenherz Themenstarter:in
58 Beiträge seit 2006
vor 17 Jahren

Danke schön für die Antworten 🙂

Ich habe mir allerdings schon das WMI Objekt "Win32_NetworkAdapter" angeguckt und eine Position auf dem PCI-Bus ist da leider nicht zu finden 😉

Löwenherz