Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich baue gerade einen Prüfadapter für eine Platine die mit einem 4x LAN-Switch bestückt ist, welcher an einem µC hängt. Der µC hat eine IP die ich anpingen möchte.
Um die Hardware der 4 Ports zu testen möchte ich 4 USB -> LAN Adapter an die 4 Buchsen anschließen.
Jetzt zu meiner Frage:
Wie kann ich über LabView mitteilen von welchem der LAN-Adapter aus ich pingen möchte, denn Labview bzw Windows benutzen ja einfach die Standard LAN-Verbindung?
So soll dass dann vereinfacht aussehen:
Noch dazu kommt, dass ich, um den µC anpingen zu können, im selben Subnetz sein muss,
allerdings kann ich die Netzwerkadresse nur ändern wenn cmd.exe mit admin-Rechten ausgeführt wird, was aber von LabView aus nicht geht (oder doch?)
Habt ihr eine Lösung oder einen Anstoß für mich.
Danke schonmal.
verwende die Primitive "String to IP", mach einen Rechtsklick drauf und wähle "multiple-Output", dann bekommst du alle IP-Adressen (im U32-Format) als Array zurück, die bei Windows angemeldet und aktiv sind. Wenn du 4 USB-zu-LAN Adapter am Rechner hängen hast, müsstest du also mindestens 4 IP-Adressen zurück bekommen. Programmier dir den PING-Befehl über die TCP-VIs (keine Ahnung ob es da schon was fertiges im Netz gibt) und schicke den Ping von LV aus an stelle eines Shell-Kommandos, dann kannst du auch das Ergebnis besser verarbeiten ...
Bei TCP-Open Connection kannst du angeben welche IP-Adresse verwendet werden soll, und die kennst du ja, weil du vorher mit String to IP sämtliche IP-Adressen deines Systems eingelesen hast. Der Rest ist dann eigentlich nur noch, dass du die IP-Adapter so konfigurierst, dass du sie "leicht" auswählen kannst, z.B. 192.168.10.xxx, 192.168.11.xxx jeweils mit der Subnetz-Maske 255.255.255.0, dann kannst du über eine Maskierung der Bits 8-15 die richtige IP-Adresse auswählen und somit steuern welcher Netzwerk-Adapter verwendet wird ...
(03.11.2014 13:12 )cb schrieb: verwende die Primitive "String to IP", mach einen Rechtsklick drauf und wähle "multiple-Output", dann bekommst du alle IP-Adressen (im U32-Format) als Array zurück, die bei Windows angemeldet und aktiv sind. Wenn du 4 USB-zu-LAN Adapter am Rechner hängen hast, müsstest du also mindestens 4 IP-Adressen zurück bekommen. Programmier dir den PING-Befehl über die TCP-VIs (keine Ahnung ob es da schon was fertiges im Netz gibt) und schicke den Ping von LV aus an stelle eines Shell-Kommandos, dann kannst du auch das Ergebnis besser verarbeiten ...
Bei TCP-Open Connection kannst du angeben welche IP-Adresse verwendet werden soll, und die kennst du ja, weil du vorher mit String to IP sämtliche IP-Adressen deines Systems eingelesen hast. Der Rest ist dann eigentlich nur noch, dass du die IP-Adapter so konfigurierst, dass du sie "leicht" auswählen kannst, z.B. 192.168.10.xxx, 192.168.11.xxx jeweils mit der Subnetz-Maske 255.255.255.0, dann kannst du über eine Maskierung der Bits 8-15 die richtige IP-Adresse auswählen und somit steuern welcher Netzwerk-Adapter verwendet wird ...
Also Ping basiert nicht auf TCP oder UDP, sondern auf ICMP. ICMP ist direct auf IP aufbauend, genau wie TCP und UDP, also eigentlich ein Schwesterprotokoll zu TCP und UDP und nicht ein darauf basierended Protokol. ICMP ist auch nicht für Applikationen gedacht sondern für die Internetsteuerung selbst, darum besteht in LabVIEW auch kein ICMP Interface. Falsche Benützung von ICMP kann den ganzen lokalen Netzwerkverkehr beeinträchtigen oder gar lahmlegen.
Implementation von Ping auf Applikationsebene wird heutzutage extra schwierig gemacht, da man dazu die Berkeley Socket driver (under Windows die eigene Variante davon die Winsock heisst) im Raw Mode ansprechen muss, aber dass ist auf allen modernen Betriebsystemen geschützt und nur mit elevated Privilegien erlaubt.
Auf fast allen Systemen besteht aber ein ping utility das normalerweise für normale Benützer benutzbar ist. Daher ist die einfachste Variante um dieses Ping mit System Exec aufzurufen und die Antwort zu parsen.
@cb
Herzlichen Dank für die Antwort.
Der Trick um an die IPs zu kommen ist super. Leider verstehe ich das mit der TCP Verbindung etwas anders. Die IP die ich angebe, ist doch die, ZU der eine Verbindung hergestellt wird, ich möchte aber angeben VON welcher IP aus ich eine Verbindung herstellen möchte. Ich möchte kwasi von vier Servern (vier verschiedene IPs) einen Client ansprechen.
Oder verstehe ich da etwas falsch?
@rolfk
Danke für die super Hintergrundinformationen, sehr schön erklärt.
Auf die Idee mit der System Exec bin ich auch schon gekommen, nur leider ist dort wieder das selbe Problem, dass ich nicht angeben kann, von welcher Netzwerkkarte (Server) aus ich senden möchte.
(03.11.2014 20:58 )rolfk schrieb: Also Ping basiert nicht auf TCP oder UDP, sondern auf ICMP. ICMP ist direct auf IP aufbauend, genau wie TCP und UDP, also eigentlich ein Schwesterprotokoll zu TCP und UDP und nicht ein darauf basierended Protokol. ICMP ist auch nicht für Applikationen gedacht sondern für die Internetsteuerung selbst, darum besteht in LabVIEW auch kein ICMP Interface. Falsche Benützung von ICMP kann den ganzen lokalen Netzwerkverkehr beeinträchtigen oder gar lahmlegen.
stimmt, wo du recht hast, hast du recht ... hab ich nicht richtig nachgedacht.
(04.11.2014 07:14 )CaptainCool schrieb: @cb
Herzlichen Dank für die Antwort.
Der Trick um an die IPs zu kommen ist super. Leider verstehe ich das mit der TCP Verbindung etwas anders. Die IP die ich angebe, ist doch die, ZU der eine Verbindung hergestellt wird, ich möchte aber angeben VON welcher IP aus ich eine Verbindung herstellen möchte. Ich möchte kwasi von vier Servern (vier verschiedene IPs) einen Client ansprechen.
Oder verstehe ich da etwas falsch?
ja, da hast du auch recht, das TCP-VI hat gar keine Möglichkeit den Netzwer-Adapter anzugeben, das geht nur bei den UDP-VIs. Wenn du deinen µC per UDP ansprechen könntest, dann könntest du den Tip wie im letzten Posting verwenden ...