Kernel - Netzwerk-Subsystem - Treiber

Dieses Thema im Forum "C/C++" wurde erstellt von toex, 13.10.2010.

  1. toex

    toex Grünschnabel

    Dabei seit:
    13.10.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,

    ich muss für die Uni ein Tool programmieren, mit dem man gezielt eine Netzwerkkarte (der eigenen Wahl) im Rechner ansprechen kann und sie dazu bringen kann, ein Paket zu verschicken.

    Nachdem ich mir jetzt schon seitenweise Dokumentationen und Tutorial zum Treiber programmieren durchgelesen habe, bin ich nicht wirklich schlauer geworden.

    Ich hatte mir gedacht, ich schreibe ein kleines Programm, was alle registrierten Netzwerkkarten ausliest und den Nutzer dann eine Karte zu senden der Daten auswählen lässt. Das Programm ruft dann den entsprechenden Treiber unter Umgehung des Netzwerk-Subsystems auf und übergibt mein Datenpaket.

    Würde so was funktionieren?

    Ich hoffe, hier kann mir jemand helfen.

    Gruß, toex
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. baggio

    baggio Jungspund

    Dabei seit:
    17.05.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Hi,

    deine Beschreibung der Aufgabenstellung ist leider ein bisschen vage. Sollst du ein Kernelmodul schreiben, dass wirklich ein Netzwerkpaket auf Treiberebene verschickt? Oder vielleicht nur ein Programm, das über einen Socket Nachrichten versenden kann? Soll Client und Server programmiert werden?

    Falls eine Socketverbindung gemeint sein sollte, kann dir
    Code:
    man socket
    weiterhelfen.
     
  4. toex

    toex Grünschnabel

    Dabei seit:
    13.10.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,

    also wenn es mit einem Programm machbar wäre, würde das natürlich ausreichen.
    Ich nehme aber an, dass es schon ein Kernelmodul sein muss, weil ich die sonst immer an die definierten Protokolle gebunden bin (TCP/IP...)

    Das Problem ist, dass ich das Netzwerk-Subsystem von Linux nicht so richtig verstehe und ich daher auch nicht genau weiß, wo ich ansetzen muss.

    Meine Aufgabenstellung lautet: Schreibe ein Programm/Modul, irgendwas..., dem man ein paar Daten gibt und dann sagt "Verschicke die Daten über Netzwerkkarte so und so"

    Im Moment habe ich mir das so gedacht:
    -Ich schreibe ein Modul, was die Informationen bezüglich der im Subsystem angemeldeten Netzwerkkarten ausliest. Besonders die Pointer zu den einzelnen Netzwerkkarten (bzw. deren Sendefunktionen)
    -Das Modul stellt die Informationen einem Programm zur Verfügung, in welchem der Benutzer die Netzwerkkarte auswählen kann.
    -Wenn der Benutzer eine Karte gewählt hat, gibt er den Befehl zum senden: Das Programm übergibt dem Modul dann ein Datenpaket und die Information, welche Netzwerkkarte verwendet werden soll.
    -Das Modul spricht dann direkt den jeweiligen Treiber an und übergibt dem dann das Paket zum senden.

    Das Problem mit den Sockets ist, dass ich zum Versenden eine Adresse brauche.
    Das Subsystem würde dann der Adresse eine Netzwerkkarte zuordnen. Wenn es allerdings eine Möglichkeit gäbe, im Socket direkt die gewünschte Karte anzugeben, wäre ich damit natürlich auch zufrieden.

    Ich hoffe, es ist etwa verständlicher geworden. Da ich mich mit der ganzen Kernelgeschichte noch nicht so auskenne, weiß ich auch nicht, ob dass so funktionieren kann, wie ich mir das denke.

    Grüße, teox
     
  5. #4 bitmuncher, 14.10.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Würde man socket() verwenden, würde das System entscheiden welches Device genutzt wird, abhängig vom Ziel und den eingestellten Routen. Eine recht gute Erklärung des Netzwerk-Subsystems mit Beispielen zur Implementierung von Netzwerk-Treibern findet sich unter https://ezs.kr.hsnr.de//TreiberBuch//html/sec.network01.html
     
  6. toex

    toex Grünschnabel

    Dabei seit:
    13.10.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Ja, so hab ich das verstanden. Deswegen will ich das Subsystem umgehen.

    Den Link kenne ich schon. Leider kann ich da nur rauslesen, wie sich ein Treiber im Subsystem anmeldet und nicht wie das System die Daten verwaltet.

    Wenn ich das richtig verstanden haben, ruft das Subsystem die Funktion

    hard_start_xmit (struct sk_buff *skb, struct net_device *dev)

    auf um ein Paket zu senden. Wenn ich der Funktion statt dem Pointer *skb mein Datenpaket mitgebe und bei *dev den entsprechenden pointer für meine Netzwerkkarte, könnte das doch funktionieren?
    Ich weiß nur nicht, woher ich die Adressen *dev der einzelnen Netzwerkkarten bekommen soll. Irgendwo muss das ja im System hinterlegt sein.

    Außerdem weiß ich nicht, in welchem Kontext ich die Funktion hard_start_xmit aufrufen kann, weil dass ja eigentlich auch nur ein pointer auf eine entsprechende Funktion in der struct net_device meines Treibers zu sein scheint.

    Eventuell müsste mein Eintrag in *skb noch eine spezielle Form haben, je nachdem was der Treiber selber noch damit macht, aber damit wollte ich mich später noch beschäftigen.

    Grüße, toex
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 bitmuncher, 14.10.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Theoretisch sollte sich aus dem sysfs auslesen lassen welche Netzwerk-Devices vorhanden sind (/sys/class/net). Darüber lässt sich dann auch ifindex für das Device auslesen und mit __dev_get_by_index bekommst du dann die net_device-Struktur. Vermutlich ist aber für deine Fragen die Kernel-Mailingliste und netdev@vger.kernel.org der bessere Anlaufpunkt. Da sind die Jungs, die sich richtig mit dem Netzwerk-Layer auskennen. ;)
     
  9. bb83

    bb83 Frickler

    Dabei seit:
    16.12.2008
    Beiträge:
    86
    Zustimmungen:
    0
    Da ich die genaue Aufgabenstellung nicht kenne werfe ich einfach mal netcat in den Raum ?
    Allerdings hat das dann nicht mehr viel mit Programmieren zu tun ;)
     
Thema:

Kernel - Netzwerk-Subsystem - Treiber

Die Seite wird geladen...

Kernel - Netzwerk-Subsystem - Treiber - Ähnliche Themen

  1. Neuer Kernel-Zweig nur für Sicherheitskorrekturen

    Neuer Kernel-Zweig nur für Sicherheitskorrekturen: Sasha Levin von Oracle hat angekündigt, von den stabilen Kernel-Versionen eigene Versionen pflegen zu wollen, die bis auf Sicherheitskorrekturen...
  2. Linux-Kernel 4.6 tritt in die Testphase ein

    Linux-Kernel 4.6 tritt in die Testphase ein: Linux-Initiator Linus Torvalds hat die Kernel-Version 4.6-rc1 als erste Testversion für Linux 4.6 freigegeben. Die Verbesserungen ziehen sich...
  3. MDB: Neuer Kernel-Debugger für Aufnahme vorgeschlagen

    MDB: Neuer Kernel-Debugger für Aufnahme vorgeschlagen: MDB, ein neuer Debugger, soll das Finden von Fehlern und das Debugging des Kernels vereinfachen. Ein Pull-Commit steht seit Anfang der Woche an....
  4. Syzkaller: Neuer Fuzz-Tester für den Kernel

    Syzkaller: Neuer Fuzz-Tester für den Kernel: Dmitry Vyukov und Google arbeiten seit einigen Monaten an Syzkaller, einem weiteren Fuzz-Tester für den Linux-Kernel. Syzkaller funktioniert etwas...
  5. PCI-Soundkarte welche mit Debian Wheezy Kernel 3.16 läuft?

    PCI-Soundkarte welche mit Debian Wheezy Kernel 3.16 läuft?: Hallo zusammen Kann mir jemand eine Soundkarte vorschlagen, welche mit dem Wheezy-backports-Kernel v3.16.x läuft? Dabei sollte die Karte im...