none
Über welche Netzwerkkarte senden? RRS feed

  • Frage

  • Hallo,

    ich muss eine Kommunikation per UDP auf einem Rechner mit 2 Netzwerkkarten durchführen (zur Zeit XP). Ich weiß aber nicht über welche der beiden Karten das Zielsystem erreichbar ist. Ich kann das Problem zwar lösen, indem ich als eigene Adresse 0.0.0.0 angebe und damit über beide Karten sende bei einer längeren Kommunikation ist das jedoch sicherlich nicht gerade effizient.

    Daher die Frage gibt es einen eleganten Weg herauszufinden über welche Netzwerkkarte meine Kommunikation läuft?


    -- Bin für aller Hinweise dankbar
    -- Rainer

    Montag, 17. Mai 2010 16:34

Antworten

Alle Antworten

  • Hallo Rainer,

    Schau Dir die folgende Diskussion an. Vielleicht findest Du etwas dass Dir weiter helfen kann.

    Win32_NetworkAdapter

    Grüße,

    Robert

    Dienstag, 18. Mai 2010 09:44
    Moderator
  • Hallo Robert,

     

    das hat, zumindest teilweise, weitergeholfen. via http://dotnet-snippets.de/dns/mac-adresse-einer-ip-ermitteln-SID439.aspx, bzw in modifizierter Form verwendet kann ich für alle Netzwerkkarten herausfinden, ob sich im Subnetz dahinter ein Gerät mit der gewünschten IP-Adresse befindet, nämlich dann, wenn ich eine ARP-Adresse erhalte.

    Bleibt noch das Problem, wenn das Gerät nicht im aktuellen Subnetz ist. Dazu habe ich jetzt etwas zu IPInterfaceProperties..::.GatewayAddresses Property in der Hilfe gefunden. Da kann ich jetzt die Netzwerkkarte mit Gateway(s) finden. Bei mehreren Karten mit Gateways bleibt dann wohln nur "Probieren geht über Studieren.." übrig.

    Auf jeden Fall mal besten Dank.


    -- Bin für alle Hinweise dankbar
    -- Rainer

    Dienstag, 18. Mai 2010 12:53
  • Hallo Rainer,

    im Normalfall sollte man das dem Routing im Betriebssystem überlassen;
    denn dort sollte in den Routing-Tabellen die passende Metrik hinterlegt sein.

    Siehe auch (etwas anderer Kontext) die Diskussion auf Stackoverflow:
    Broadcasting UDP message to all the available network cards.

    Falls NAT dazwischenfunkt, siehe http://en.wikipedia.org/wiki/UDP_hole_punching

    Gruß Elmar

     

    Dienstag, 18. Mai 2010 17:28
    Beantworter
  • Hallo Elmar,

    es ist nun wirklich nicht so, dass ich dem BS die Arbeitabnehmen will. Nur bisher habe ich für die Nutzung der UDPClient-Klasse immer den lokalen und remoten Endpunkt angegeben. das klappt gut bei nur einer Netzwerkkarte (und einer IP-Adresse) daran. Die kann ich ja recht einfach herausfinden.

    Habe ich mehrere Karten / IP-Adressen, dann stellt sich für mich die Frage welche Adresse muß ich denn dann als lokalen Endpunkt angeben?

    Wie im Original - Post angegeben habe: "Ich kann das Problem zwar lösen, indem ich als eigene Adresse 0.0.0.0 angebe und damit über beide Karten sende bei einer längeren Kommunikation ist das jedoch sicherlich nicht gerade effizient."

    ... so meine Vermutung. Deshalb habe ich nach einem Weg gesucht die korrekte lokale IP-Adresse herauszufinden und zu verwenden.

    Wenn das BS so schlau ist quasi die 0.0.0.0 über seinen Routing-Mechanismus zu erkennen und zu ersetzen, dann ist mir das so etwas von recht, dass ich das eigentlich fast nicht in Worte fassen kann. :-)

    Falls nicht hast du sicherlich noch einen Tip für mich.

     

     


    -- Bin für alle Hinweise dankbar
    -- Rainer

    Mittwoch, 19. Mai 2010 15:45
  • Hallo Rainer,

    das sicherste ist (wie immer ;-) ein Konfigurationsparameter.

    Wobei in regulären Fällen das Routing , die Arbeit richtig erledigen sollte.
    Und über die Metrik das passende Interface ermittelt wird, was Du über
    die Eingabeauforderung via route print/netstat -r einsehen. kannst.

    Programmatisch kannst Du via IPInterfaceProperties . UnicastAddresses
    (siehe Beispiel dort), die verfügbaren Adressen ermitteln (loopback aussortieren) -
    um darüber z. B. eine Auswahl von Adressen anzubieten.

    Ein weiterführender Artikel zu UDP (engl.):
    Take Total Control Of Your Networking With .NET And UDP

    Gruß Elmar

    Mittwoch, 19. Mai 2010 18:48
    Beantworter
  • Hallo Elmar,

    in: Take Total Control Of Your Networking With .NET And UDP wird ja mit IPAddress.Any gearbeitet und dies entpricht ja letztlich 0.0.0.0. Was ich ja auch nutze, als Default in der Konfiguration und mit der Möglichkeit ggf. eine lokale Adresse anzugeben.

    Also liege ich damit nicht so ganz falsch.

     

    Danke an alle für die Unterstützung.

    Rainer

     

    Mittwoch, 19. Mai 2010 19:54