1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Netzwerkschnittstellen auslesen und ansprechen

Dieses Thema im Forum "iOS-Developer" wurde erstellt von comfreak, 31.07.09.

  1. comfreak

    comfreak Roter Stettiner

    Dabei seit:
    05.11.08
    Beiträge:
    959
    Hallo zusammen,

    habe da eine kleine Frage, die ich leider mittels Google nicht lösen konnte.
    Ich möchte in Xcode ein kleines Programm schreiben und muss dazu die Netzwerkschnittstellen (LAN, WLAN, etc) auslesen und danach diese einzeln wieder ansprechen können.
    Wie kann ich das am einfachsten in Xcode erreichen?

    Vielen Dank für eure Hilfe,
    Gruß comfreak
     
    #1 comfreak, 31.07.09
    Zuletzt bearbeitet: 31.07.09
  2. StephanG

    StephanG Normande

    Dabei seit:
    07.11.07
    Beiträge:
    582
    Da noch keiner wollte und das Problem sicherlich recht verbreitet ist, will ich mal meinen Senf dazu geben.

    Du hast leider nicht gesagt was du genau machen willst. Schau dir mal getifaddr in der Doku an, da kriegst du ein paar Infos wie man Interfaces auslesen kann. Wenn das nicht langt und du noch etwas tiefer gehen willst, dann gibt es noch einen Network Kernel Extension Guide bei Apple.
     
  3. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Was willst Du konkret erreichen?
     
  4. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Ohne eine Antwort auf diese Frage zu haben, können wir alle nur blind rumraten.

    Alex
     
  5. comfreak

    comfreak Roter Stettiner

    Dabei seit:
    05.11.08
    Beiträge:
    959
    Ich möchte die Netzwerkschnittstellen auslesen und diese in einer ComboBox speichern.
    Im Formular hat's noch ein Textfeld in dem vom User eine URL (mit einem Download) eingetragen wird, die dann per Button über die eingetragene Schnittstelle heruntergeladen wird.

    Gruß comfreak
     
  6. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Dazu braucht man keinerlei Information über die Schnittstelle zu besitzen! Dein Computer verbindet schon über die passende Schnittstelle, und das ist auch gut so, denn es hängt vom Routing Table im OS ab, über welche Schnitstelle welcher Computer zu erreichen ist, und das wird entsprechend konfiguriert und eine Applikation darf darauf keinen Einfluß haben.

    Für das komfortable Herunterladen von Daten in einer Applikation solltest Du so etwas wie libcurl nutzen. Das simplifiziert den Vorgang deutlich. Anderfalls müßtest Du erstmal einen Grundkurs über IP Programmierung durchackern: Sprich was sind Sockets, wie stellt man Verbindungen mit anderen Computern her etc. Standard Literatur ist daz: UNIX Network Programming (englisch). Aber für deine Zwecke sollte libcurl ausreichend sein.
     
  7. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Vielleicht möchte er speedtests machen?

    Alex
     
  8. StephanG

    StephanG Normande

    Dabei seit:
    07.11.07
    Beiträge:
    582
    Das macht keinen Unterschied. So wie ich es verstanden habe, möchte er eine URL eingeben und von dort etwas runter laden. Genau da springt ja schon die Routing Tabelle ein und ein Interface wird dafür automatisch ausgewählt. Oder es wird halt komplett verworfen, wenn keine (Standard) Route existiert.

    Jetzt kann man natürlich sagen, man verwendet zwei Interfaces die beide im gleichen Netz hängen und über einen Gateway gehen... aber da würde ich dann eher sagen, dass man mal die Netzwerk konfiguration prüfen sollte. Man muss sich ja nicht unnötig Arbeit machen, indem man sich nicht oder schlecht funktionierende Konfigurationen zusammen bastelt.

    Das schon erwähnte Unix Network Programming gibt dazu schon ein wenig Aufschluss... vielleicht auch in Kombination mit TCP/IP Illustrated.

    Aber vielleicht habe ich den Sinn und Zweck der Anwendung auch nur falsch verstanden. o_O
     
  9. comfreak

    comfreak Roter Stettiner

    Dabei seit:
    05.11.08
    Beiträge:
    959
    Ich möchte aber den Download über eine bestimmte Schnittstelle laufen lassen, um den Traffic auf der normalen Leitung zu schonen. Das es geht beweist VirtualBox und dass es nicht sinnvoll ist, kann ich mir nicht vorstellen..

    Gruß comfreak
     
    #9 comfreak, 06.08.09
    Zuletzt bearbeitet: 07.08.09
  10. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Du kannst dir die IP der Schnittstelle auslesen und dann manuell die Route zum Ziel setzen lassen. Die Frage ist hier ob es immer die gleiche Schnittstelle (z.B. WLAN) oder sich ändernde Schnittstellen sind.
    Das könntest du auch ggf. auch mit AppleScript machen (oder auch PERL usw.). IP der Schnittstelle auslesen lassen, Route setzen lassen und dann einfach den Download entweder von Hand oder auch über das Script starten.
     
    michaelny gefällt das.
  11. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Aber... welchen Zweck soll das haben? Wo ist denn Dein Bottleneck?

    Ein Gigabit Kabel saturiert zu bekommen ist ganz schön schwierig, ich würde hier immer dem System die Wahl der Leitung überlassen.

    Alex
     
  12. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Ich würde eher auf Volumentarif tippen und der Möglichkeit über ein anderes Netz das ganze zu leiten. Oder vielleicht irgendwo in der Firma sitzend und der Download soll über eine andere Leitung die nicht restriktiv ist, druchgeführt werden.
     
  13. StephanG

    StephanG Normande

    Dabei seit:
    07.11.07
    Beiträge:
    582

    Ich verstehe noch immer nicht was du machen willst. Welche normale Leitung? Lokales Netzwerk, DSL? Standleitung? Whatever? Und was hängt an der anderen.

    Auch den Rückschluss auf VirtualBox verstehe ich nicht, was hat eine Virtualisierungssoftware primär mit dem Netzwerk zu tun?

    Das was du beschreibst (eine Leitung statt der anderen Nutzen um diese frei zu halten) sollte ein Router mit Loadbalancing und/oder QoS erledigen.

    Vielleicht gibst du mal ein Beispiel für den Anwendungzweck, was da genau involviert ist, usw. Aktuell hört sich das für mich nach schrauben an der falschen Stelle an.
     
  14. comfreak

    comfreak Roter Stettiner

    Dabei seit:
    05.11.08
    Beiträge:
    959
    Die große Erleuchtung

    An meinem Mac habe ich mehrere Netzwerkschnittstellen (LAN, WLAN, Bluetooth, iPhone Tethering, etc.) und ich möchte zum Beispiel über meinen kleinen DSL 1'000 (!) Anschluss (an LAN oder WLAN) surfen und VoIPen, während ich z.B. meine Podcasts per iPhone Tethering runterlade oder umgekehrt.. Oder, dass ich bei meinem Nachbarn (der hat zugestimmt) mich per WLAN einklinke und dort was downloade, während ich per LAN surfe..

    In VirtualBox kann man für eine virtuelle Maschine eine virtuelle Netzwerkschnittstelle einrichten, die dann wahlweise (von mir gewählt) über die WLAN Karte oder LAN Karte oder eine andere verbindet.

    Leider hat mein Router weder UMTS (HSDPA) noch Bluetooth. Und die Schnittstellen sind daher nur an meinem Mac verfügbar.

    In einer weiteren Version (eig. meine Uridee) möchte ich noch gerne mein Programm verwenden, um eine Kanalbündelung vorzunehmen, indem es über mehrere Schnittstellen eine Datei runterlädt. Sozusagen wie ein DownloadManager der die Teildownloads über mehrere Schnittstellen verteilt.
    Nach sowas habe ich übrigens schon gesucht, aber nichts gefunden, weshalb ich dann selbst sowas programmieren wollte.

    Gruß comfreak
     
  15. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Das geht grundsätzlich nicht! Über das Routing der Pakete entscheidet ausschließlich das OS, eine Applikation hat da keinerlei Einfluß drauf. Wenn man einen Loadlever Programmieren will, muß man das als Teil des IP Stacks implementieren, da es sich bei MacOS X um ein BSD Derivat nur mit Sockets handelt kann man das nicht als User-Space-Erweiterung schreiben (wie dies bei einem System V.4 UNIX mit seinem Streams Interface möglich wäre), sondern muß unbedingt eine Kernel-Erweiterung schreiben. Die Unterschiede zwischen Streams und Sockets werden in der schon angeführten Literatur erklärt.

    Eine einzige Möglichkeit gibt es, man ändert jedesmal den Routing Table des OS. Aber bei diesem Gedanken wird mir schlecht, man pfuscht nicht am OS herum.
     
  16. comfreak

    comfreak Roter Stettiner

    Dabei seit:
    05.11.08
    Beiträge:
    959
    Ich möchte keinen "Loadlever" programmieren, sondern eine Art Download Manager, der die Teildownloads über mehrere Schnittstellen verteilt. Das kann doch nicht so kompliziert sein..

    Gruß comfreak
     
  17. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Ich muss ehrlich sagen, genau kenne ich mich da jetzt nicht aus, aber doch, das kann es.

    Alle high-level download Routinen (zum Beispiel mal NSURLDownload) gehen davon aus, dass Du das Routing erstmal dem System überlässt.

    Aber auch socket (2) lässt sich nicht so offensichtlich auf ein bestimmtes Interface legen.

    Deine Lösung muss also sein, das Routing deines Macs zu ändern (ähnlich wie bei einem VPN). Wie das geht musst Du aber jemand anderen fragen.
     
  18. Jamsven

    Jamsven London Pepping

    Dabei seit:
    21.11.07
    Beiträge:
    2.046
    Also das hört sich irgendwie nach Portmapping an. Dann kannst du die einzelen Dienste an speziellen NICs routen.

    Zu dem verteilten downloaden:
    Aber wie willst du dem Zielhost sagen, dass der die Datenpakete aufteilen und an zwei verschiedenen IP Adressen schicken soll?
     
  19. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Du sagst es ja dem Mac. "Alles mit der Destination blah jetzt auf en1". Das sollte gehen, VPN macht das auch. Kann sooo schwer nicht sein, aber gehört nicht zu den Sachen, die ich jeden Tag mache

    Alex
     
  20. Jamsven

    Jamsven London Pepping

    Dabei seit:
    21.11.07
    Beiträge:
    2.046
    Ach der meint eine Art Download-dispatcher?
    Ich dachte der wollte die IP Pakete auf zwei Routen aufteilen. :D

    Naja ich würde dann vorher abfragen, welches Interface am wenigsten ausgelastet wird und ihm dann den Download zuteilen. Das kann man dann noch weiter auflösen in dem man einen Stack einbaut, damit nicht 10 Downloads gleichzeitig aktiv sind. Weiterhin kann man noch diverse Metriken berücksichtigen(Größe, Kosten, Geschwindigkeit,Restlaufzeit der aktiven Downloads usw.)
     

Diese Seite empfehlen