• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Netzwerkschnittstellen auslesen und ansprechen

comfreak

deaktivierter Benutzer
Registriert
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
 
Zuletzt bearbeitet:

StephanG

Normande
Registriert
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.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
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.
Was willst Du konkret erreichen?
 

comfreak

deaktivierter Benutzer
Registriert
05.11.08
Beiträge
959
Was willst Du konkret erreichen?

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
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
… die dann per Button über die eingetragene Schnittstelle heruntergeladen wird.
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.
 

StephanG

Normande
Registriert
07.11.07
Beiträge
582
Vielleicht möchte er speedtests machen?

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
 

comfreak

deaktivierter Benutzer
Registriert
05.11.08
Beiträge
959
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.

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
 
Zuletzt bearbeitet:

drlecter

Wöbers Rambur
Registriert
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.
 
  • Like
Reaktionen: michaelny

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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 ob das nicht sinnvoll ist, kann ich mir nicht vorstellen..

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
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
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
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.
 

StephanG

Normande
Registriert
07.11.07
Beiträge
582
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 ob das nicht sinnvoll ist, kann ich mir nicht vorstellen..


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.
 

comfreak

deaktivierter Benutzer
Registriert
05.11.08
Beiträge
959
Die große Erleuchtung

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

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..

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

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.

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

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
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
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.
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.
 

comfreak

deaktivierter Benutzer
Registriert
05.11.08
Beiträge
959
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.

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
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Das kann doch nicht so kompliziert sein..

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.
 

Jamsven

London Pepping
Registriert
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?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Also das hört sich irgendwie nach Portmapping an.

Aber wie willst du dem Zielhost sagen, dass der die Datenpakete aufteilen und an zwei verschiedenen IP Adressen schicken soll?

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
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
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

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.)