Jump to content

Der Werkzeugkasten für die DBox2


-=The Brain=-

Empfohlene Beiträge

So, also ich habe nun das komplette HEX-Daten-Paket generiert. Bzw. das Programm generiert dieses Datenpaket. Ich habe zum Vergleich mal mit dem BootManager mein Image geflasht und dort die selben Einstellungen genommen wie bei meinem Programm (Ordner der ppcboot, IP-Adressen etc.).

 

Mit dem Tool von Snowhead konnte ich das durch den BootManager gesendete Datenpaket 1 zu 1 mit dem vergleichen, welches in meinem Programm generiert wird. Also die beiden Paket stimmen zu 100% überein (Hexadezimal überprüft).

 

Nun sitze ich vor dem Problem, ich muss ja jetzt der DBox dieses Paket in einer Art Rohdaten rüberschieben? Denn ich kann es ja nicht als normales TCP-Paket oder ein ARP-Paket definieren. Denn sonst kommt um mein Daten-Paket noch der entsprechende Header drum ... und dann passt es ja nicht mehr. :(

 

Hat jemand eine Idee, wie ich ein 100% stimmendes Datenpaket im Roh-Daten-Modus übers Netz schicke ? Sonst muss ich nochmal bei irgendwelchen C#-Freaks nachfragen.

 

So, jetzt gehe ich erst mal ein Bier trinken ... vor lauter Arrays und Hex-Zahlen raucht mir der Kopf.

 

Prost

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 172
  • Created
  • Letzte Antwort

Top Posters In This Topic

Hmmm, also das finde ich jetzt auch seltsam. Also ohne Protokoll kann man sowas ja nicht schicken. Ich hätte jetzt gedacht das ist ein udp Paket.

Es stand auch wo das du es auch wieder an Broadcast 255 schicken sollst und die Box sich das dann angelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das wird ne wilde Einstellungs-Sache. Hier lassen sich bei C# eine Unmenge Optionen einstellen, was mit dem Datenpaket passieren soll.

 

Muss ich also testen ...

 

Du kannst mir aber mal einen Gefallen tun. Ich sende Dir das Programm mal. Und Du kannst ja mal das UDP-Hex-Paket vergleichen (wird noch automatisch mit angezeigt, aus Test-Zwecken) mit dem des Bootmanagers. Am besten per Netzwerkmonitor oder so.

 

Wenn die beiden Paket bei Dir auch idenisch sind, dann kann es schon mal nicht am Paket liegen.

 

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

SO, also durch ausgiebiges Testen habe ich es nun scheinbar hinbekommen. Das Programm sendet jetzt das Datagram zurück. Es wird nun auch im Netzwerkmonitor nicht mehr als ARP-Paket angezeigt, sondern als Antwort-Paket BOOTP !!!!!!!! :(:(:wub:

 

Also schon mal ein ganzes Stück weiter. Nun muss mir kai-t das noch mal erläutern, wie es nun weiter geht. Also aktueller Stand ist jetzt :

 

DBox sendet BOOTP-Anfrage per Broadcast

Programm antwortet, wertet aus und sendet passende Antwort zurück

 

Mein Fehler war, ich hatte den Header um das Datagram mit generieren lassen. Und dann wurde natürlich das gesamte Datenpaket noch mal in einen Header gepackt (läuft ja automatisch) und dann war natürlich der gesamte Inhalt ungültig.

 

Sich freuender

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, ist schon unglaublich. Vor ein paar Tagen hätte ich echt gedacht :

"ach, das Datenpaket per UDP empfangen ... passende Antwort manuell generieren und senden. Und fertig..."

Nun ganz so war es nicht. Ich sitze seit heute morgen 07.00 an diesen dämlichen Paketen und habe immer diesen blöden Fehler übersehen. Aber um so mehr freue ich mich, dass es nun endlich geklappt hat. War auch das Letze, was mir noch eingefallen ist ... aber man soll ja nie aufgeben.

 

Allerdings stehe ich jetzt auch da wie der Ochs vorm Tor. Nun muss mir das kai-t nochmal so richtig klein klein erklären, wie es nun weiter geht.

 

Aber das wird schon. Jetzt werde ich mir erst mal noch ein Bier genehmigen ...

 

Andere Frage am Rande : Meine DBox nimmt mir das hoffentlich nicht übel, diesen ständigen Reset? Denn auf Arbeit teste ich an meiner guten Sat-Box. Und so etwa 500 mal Reset musste sie heute ganz sicher über sich ergehen lassen ... ich hoffe da passiert nix ?!

 

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

@-=The Brain=-

 

Erst mal von meiner Seite auch nen Glückwunsch zum ersten Schritt. Nun kann's

ja nur noch einfacher werden. :(

 

Das häufige Reset mach der Box nichts. Da sie beim reset nicht mal dazu kommt,

ihre Configs in den Flash zu schreiben, ist im Hinblick auf die begrenzte Anzahl der

Lösch/Schreibzyklen eines Flashbausteins oder das Platzen des Images nichts zu

befürchten. Kannst sie also beruhigt weiterquälen.

 

Edit: Ääcchh, und wieder zu lange getippselt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@SnowHead

 

...Nun kann's ja nur noch einfacher werden....

 

Naja, eigentlich nicht wirklich. Mir fällt da so spontan ein Beitrag von kai-t ein. *SUCH* ... *GEFUNDEN*

 

Zitat (und das war ziemlich am Ende von seinem Listing, was alles zu machen ist!) :

 

Danach wirds noch heftiger in der PPCBoot wird die Box veranlasst eine datei von dem bei der BootP Antwort als root gegebenen NFS mount zu flashen.

 

Alleine bei der Aussage, das es dann noch heftiger wird, fangen meine blonden Haare an, sich selbständig in ein einheitliches Grau zu verfärben. Naja, mal abwarten ...

 

Aber froh bin ich natürlich erst mal, dass ich meiner DBox nix schlimmes antue wenn ich ihr die Farbe am Power- und Pfeil-Hoch Button durch häufigen Gebrauch abnutze.

 

Grüße

 

[EDIT]

Gerade gelesen ... Du bist ja jetzt König ! Herzlichen Glückwunsch !!!! So zu sagen TopPoster König SnowHead ...

[/EDIT]

bearbeitet von -=The Brain=-
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe heute im Web ein umfangreiches und ausführliches Tut gefunden mit dem Thema Netzwerk- und Protokoll-Programmierung. Das ziehe ich mir jetzt erst mal rein, bis ich es wirklich verstanden habe.

 

Denn dann lässt sich auch ein vernüftiger BOOTP-Dienst schreiben, was natürlich besser ist, als ein generiertes Datenpaket. Denke mal, ich werde wohl das Weekend ausgiebig lesen müssen / dürfen ... aber macht einen ja nicht dümmer!

 

Ein C# Code-Gerüst für NFS und TFTP habe ich heute gefunden. Muss ich zwar umschreiben und anpassen. Ist aber erst mal ein guter Anhalt. Ich bin also ganz zuversichtlich :-)

 

Grüße !

 

Übrigens ... meine Frau freut sich auch schon sehr, wenn das Programm endlich fertig ist. Aber nicht, weil sie es auch anwenden will, sondern .......

naja, kann man sich ja denken :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Übrigens ... meine Frau freut sich auch schon sehr, wenn das Programm endlich fertig ist. Aber nicht, weil sie es auch anwenden will, sondern .......

 

dann wart mal ab :wub:

 

das ganze kann auch zur Sucht werden, bzw. zum Fass ohne Boden :(

 

 

Das heißt nun nicht, daß Du danach aufhören sollst um dem vorzubeugen :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

So hier bin ich wieder :-)

 

Ich weiß garnicht wie ich hier zum heimlichen Netzwerk Bootspezialist gekommen bin. Hab damit nun nicht wirklich soviel am hut. Hab das ganze ja nur im Wiki und bei dietmar_h mitgelesen.

Natürlich versuche ich gern dir da weiterzuhelfen und manchmal helfen ja auch kleine anstöße in die ricvhtige richtung.

 

Also als erstes denke ich das das generische erzeugen der Bootp antwort völlig ok ist. Warum sollte man sich die mühe machen und nen ganzen Bootp dienst zu Programmieren.

Das würde im folgenden außerdem auch bedeuten das du nen vollen NFS Server Programmieren musst.

Ums dir einfacher zu machen musst du versuchen diese dienste nur zu simulieren in dem du halt die richtigen antworten an die Box sendest und die dienste nicht komplett in deinem Programm abbildest.

 

Also wenn ich das richtig verstanden habe lauschst du im Moment auf Port 67 und da kommt die Anfrage der Box (BootP)

Nun diese Anfrage empfängst du, passt sie an und sendest sie auf Port 68 zurück an die Box.

 

Nun im folgenden sollte die Box auf Port 69 wieder eine Anfrage senden. diesmal eine TFTP (Trivial File Transfer Protocol) anfrage. Sie erwartet hier ihr Betriebssystem das sie über Netzwerk Bootet genau hierfür ist TFTP gemacht.

Siehe http://de.wikipedia.org/wiki/TFTP.

 

Also du solltest nachdem du die Bootp anfrage auf Port 68 abgeschickt hast sofort auf Port 69 lauschen. Hier sollte eine anfrage der Dbox nach dem PPCBoot file kommen.

 

Also ums nochmal zu zerlegen, deine BootP antwort Paket sah ja so aus:

* Die Hardware-Adresse des Clients. Der Client erwartet eine Antwort mit seiner Hardware-Adresse, um zu erkennen, dass das Paket für ihn ist.

* Die Zufallszahl, die in der Anfrage vom Client erzeugt wurde.

* Das wichtigste überhaupt: Die IP-Adresse der Client-Maschine.

* Die IP-Adresse und der Hostname des Boot-Servers. Von dort kann im nächsten Schritt über TFTP ein Betriebssystem geladen werden.

* Der Name und die Pfadangabe der Bootdatei. Die Bootdatei enthält den Kernel, der anschließend mit TFTP übertragen wird.

* Name des Verzeichnisses, das vom Kernel über NFS als root (/) Partition eingebunden werden soll.

 

Rot markiert ist das wichtige für den nächsten schritt. Also wenn dsie die BootP antwort verstanden hat fragt sie bei dieser IP und Port 69 nach einem Betriebssystem welches der PPCBOOT entspricht. Die PPCBoot ist unser Betriebssystem mit Flash batch verarbeitung.

 

Nun wie gesagt lausche mal an Port 69. Da sollte denke ich ne anfrage der Box nach der PPCBoot kommen.

Die Antwort darauf sollte denkbar einfach sein. Du musst so weit ich das verstehe nur die PPCBoot auf dem selben Port in nem UDP Paket zurück senden.

TFTP verwendet Port 69 und UDP als Transportprotokoll.

 

Hoffe das hilft dir erstmal weiter.

 

P.S.: Es wäre auch noch möglich das die Box gar keine Anfrage mehr macht sondern die PPCBoot einfach auf Port 69 erwartet. Da bin ich mir aber echt nicht sicher. Also ich würde auf ne Anfrage der Box tippen....

Link zu diesem Kommentar
Auf anderen Seiten teilen

@kai-t

 

Respekt !!! Das würde jetzt sogar meine bessere Hälfte verstehen :(

 

Also das Prog hat aktuell den Stand : es lauscht auf Port 67 und wartet auf ein BOOTP-Datenpaket. Beim Einschalten der DBox empfängt es dieses und wertet es aus. Die benötigten Daten, wie MAC der DBox etc. werden in ein Datenpaket gepackt und an die Box zurück gesendet.

 

Ich denke auch mal, dass die Box das Paket auch annimmt, weil keine weiter Anfrage von der DBox kommt. Denn ich habe das mal überprüft, was due DBox macht wenn keine 'Gegenstelle' antwortet. Dann sendet sie 3 mal diese BOOTP-Anfrage und wenn diese Anfragen unbeantwortet bleiben, fährt sie ganz normal hoch.

 

Da sie aber wie gesagt nicht nochmal nachfragt, denke ich mal, sie hat das Paket verstanden. Das Einzige, was mich ein wenig stutzig macht ... ich habe mal den Unterschied meines gesendeten Paketes und das des BootManagers verglichen. Die Pakete sind grundsätzlich identisch. Nur muss ich mein Datenpaket an die "255.255.255.255" also als Broadcast senden, da die IP der DBox ja nicht bekannt ist, bzw. sie hat ja keine und bekommt sie ja erst mit diesem Datenpaket zugewiesen.

 

Im BootManager wird das Paket aber seltsamerweise direkt an die IP gesendet.

 

Dann versuche ich jetzt mal die ppcboot an die Box zu schicken. Ich bin ja mal gespannt, was da passiert.

 

Nur so zum Verständnis ... diese PPCBOOT ist dann erst mal sowas wie das Betriebs-System für die DBox und leitet dann praktisch das Flashen des Images ein? Woher weiß die ppcboot denn, wo mein Image liegt?

 

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

@-=The Brain=-

 

Stimmt, die ppcboot ist so was wie die nächste Stufe des Bootloaders, quasi ein

Minimalbetriebssystem. Die normale ppcboot holt sich den Namen des zu laden-

den Images über die serielle Schnittstelle vom Bootmanager (oder eben Deinem

Programm). Die ppcboot zum Flashen ohne Nullmodem geht stur davon aus, daß

das Image "13.img" heißt und im root des gemounteten Serververzeichnisses liegt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau wie es Snowhead sagt.

Image muss 13.img heißen und im NFS root liegen. Das ist dann der nächste schritt der box nen nfs server vorgaukeln der ne 13.img enthält.

 

Zu der Antwort des Bootmanager an die Box. Mit was für ner IP sendet er den den BootP weg? Ist mir auch etwas rätselhaft da die Box in diesem Moment ja noch gar keine IP hat dürfte das doch nie funktionieren. Denke aber das ist relativ wurscht...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also wenn ich den BootManager nehme, passiert folgendes :

 

1.)

DBox bootet und fragt auf Port 67 per BroadCast (255.255.255.255) das Netzwerk nach einer gültigen IP mit einem BOOTP-Request

 

2.)

BootManager empfängt Paketauf Port 67 und sendet auf Port 68 an die Ip 192.168.2.202 den BOOTP-Replay

 

3.)

jetzt sendet die DBox einen ARP-Request (AdressResolutionProtocol) an das Programm und fragt praktisch nochmal per ARP nach der MAC-Adresse des Computers

 

4.)

Computer antwortet natürlich per ARP-Replay und teilt der DBox die MAC-Adresse mit

 

5.)

Jetzt bittet die DBox auf Port 69 (TFTP) um das Senden der ppcboot im Verzeichnis c:\temp\brain

 

6.)

Der BootManager sendet nun auf Port 2001 die PPCBOOT, zerlegt in viele 524 Byte-Daten-Blöcke

 

7.)

Nach jedem erfolgreichen Empfang eines Paketes, meldet das die DBox dem Programm auf Port 1111

 

Nun folgen wieder 6.) und 7.) bis die Datei gesendet ist ... Das sind dann 433 Datenpaket mit je 524 Byte + das letze Paket mit 84 Byte.

 

Das sieht ganz schön kompliziert aus !!!

 

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

:lol::lol::P:D:D:D:D:D:D

 

Freudige Nachricht ... mein eigener, selber programmierter TFTP-Server ist fertig. Habe mir jetzt selber einen geschrieben. Und der ist richtig gut. Habe ihn in einer Microsoft NG testen lassen ... die sind begeistert und wollen den auch haben. Was mich natürlich freut. War ne Menge Arbeit ... :D:D:D

 

Also das TFTP-Problem ist gelöst.

 

Nun setze ich mich auch noch ran und schreibe mir das BOOTP selber. Denn irgendwie habe ich nicht wirklich Vertrauen, dass die DBox weiß was ich von ihr will, wenn sie meinen modifizierten BOOTP-Replay empfängt.

 

Da fällt mir ne Frage ein : Kann ich das NTFS-Protokoll bei der DBox noch für was anderes brauchen? Oder wirklich nur beim flashen ?

 

Freudige Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

@-=The Brain=-

 

Wenn Du das TFTP-Protokoll meinst, daß kann man auch zum Booten einer YADD

verwenden. Kannst Dein Proggy ja so erweitern, daß man nur noch die YADD-

Root eingibt und die Box dann komplett vom PC bootet. :lol:

Link zu diesem Kommentar
Auf anderen Seiten teilen

das geht aber auch nur zum holen des u-boot´s für die Yadd,

ohne den NFS Server geht´s auch net.

 

@SnowHead

 

Du spielst aber nun nicht mit dem Gedanken an ein Keywelt Yadd :lol:

 

 

EDIT

 

@Aikonia

 

das wäre wirklich ein Traum :lol:

 

Aber das geht wohl leider nicht. Denn da ist die Strucktur um einiges anders denk ich.

Hab das aber noch nicht so richtig durchgedacht.

Kenn mich mit Yadd auch noch nicht wirklich aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn Du das TFTP-Protokoll meinst, daß kann man auch zum Booten einer YADD

verwenden. Kannst Dein Proggy ja so erweitern, daß man nur noch die YADD-

Root eingibt und die Box dann komplett vom PC bootet.

 

Ich gebe zu, ich verstehe nicht wirklich, was Du hier meinst. Aber das TFTP-Protocol kann so ziemlich alles, was auch per normalem TFTP möglich ist. Also wenn Du das irgenwie mit Deiner YADD verwenden kannst ... musst mir dann nur mal erkären, was dort ablaufen soll.

 

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

nun,

 

bei Der Yadd ist das im Endeffekt so wie beim Flashen, Du spielst erst ein entsprechendes ppcboot ein,

das mountetd den NFS Server und dann werden von dort Daten geholt.

(wenn ich das richtig verstanden hab mit dem Flashen :lol: )

 

Nur daß halt bei der Yadd das ganze Linux Verzeichnis auf dem PC enpackt vorliegt und

die Daten nicht vom Flash sondern über NFS vom Rechner nachgeladen werden.

 

Dafür brauchts halt einfach das Yadd ppcboot welches weiß, daß es das so machen muss.

Wennn man also ein Flash-Image korrekt auspacken könnte und das Yadd ppcboot

nutzt, dann könnt das sogar gehen.

 

Ich schau´s mir grad mal an. Das wär schon ein netter Gimmick, Image-Vorschau ohne flashen.

 

 

EDIT: ich hab glaub was zwischendrin verrgessen, der Kernel wird glaub auch och über tftp geholt.

denn ppcboot alleine kann glaub ich den NFS Server nicht mounten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.

×
×
  • Neu erstellen...