Sourcecode Fortschritt
-
0.0.2.55 - Rev: 895
Gratuitous ARP eingebaut beim Installieren der Netzwerkadapter.
for (int i=0; i<10; i++) { arp_sendGratitiousRequest(adapter); // show PrettyOS' IP and MAC to the LAN sleepMilliSeconds(1000); }
Mein Entwicklungsrechner im LAN trägt diese IP/MAC aber nicht ein in seiner ARP Tabelle wegen möglichen ARP spoofings.
-
Version 0.0.2.56:
- PCNet-Treiber: Besser kommentiert, Verbesserte Ausgaben. Senden funktioniert nun unter Qemu (falsche Konstante war Schuld)
- Gratious-ARP auskommentiert (funktioniert i.d.R. nicht, weil viele Betriebssysteme solche ARPs ignorieren, um ARP-Spoofing zu vermeiden. Unter Qemu funktionierte ARP dadurch überhaupt nicht mehr)
-
version = "0.0.2.57 - Rev: 897"
tcp.h/tcp.c erkennung / zerlegung überarbeitet
Ports stimmen, Rest leider noch falsch
-
version = "0.0.2.58 - Rev: 898"
tcp.h und tcp.c weiter verbessert
6 Flags (nun uint8_t anstelle bool) werden noch nicht richtig angezeigt
(Tests mit telnet und wireshark)Wichtiger Hinweis:
Mit dem qemu-EHCI (Vers. 0.11.5) klappt der ARP reply nur sporadisch (man kann es mit arp -s 10.0.2.15 00-12-12-12-12-12 statisch eintragen).
Bei qemu 14.1 klappt der ARP reply auf Anhieb.
http://qemu-buch.de/d/QEMU_unter_Microsoft_Windows#QEMU_unter_.C3.A4lteren_Microsoft_Windows-Versionen
-
version = "0.0.2.59 - Rev: 899"
TCP Debug nun ok
http://tools.ietf.org/html/rfc793#page-15 (TCP header)
-
version = "0.0.2.60 - Rev: 900"
Schalter _NETWORK_DATA_ in os.h eingeführt, um die Ausgaben etwas übersichtlicher zu machen. Die einzelnen Bytes - und ihre Bedeutung - kann man besser in wireshark analysieren.
-
Version 0.0.2.61:
- Verbesserungen am RTL8168-Treiber
- Verbesserungen an UDP-Funktionsprototypen
- Kleinigkeiten
-
version = "0.0.2.62 - Rev: 902"
Sende-Funktion in UDP aktualisiert:
void UDPSend(struct network_adapter* adapter, void* data, uint32_t length);
Noch nicht getestet.
-
Version 0.0.2.63:
- Großer Netzwerkprotokollumbau
-
Dickes Lob an MrX!
-
Version 0.0.2.64:
- ELF-Loader setzt nun R/W-Privilegien bei der Speicherallokation
- Konsolen unterstützen nun SCROLL_BEGIN
- Anpassungen an arp wegen Netzwerkumbau in 0.0.2.63
- Kleinigkeiten
-
Version 0.0.2.65:
- Ausgaben des RTL8139-Handlers hinter Makro verborgen
- Analyse der Netzwerkpakete in Kernel-Idle-Schleife verlegt
- Erkennung des Adressaten einer Nachricht (MAC, IP) -> TODO: Warum funktioniert das bei ICMP nicht zuverlässig?
-
Version = "0.0.2.66 - Rev: 906";
Netzwerk Interface überarbeitet
udpSend eingebaut
-
Version = "0.0.2.67 - Rev: 907";
(von cefour eingespielt)
PING PONG über router läuft nicht mehr.
23:39:08.264789 192.168.10.103 192.168.10.97 ICMP Echo (ping) request
23:39:08.273097 UnexTech_0f:0a:0c Broadcast ARP Gratuitous ARP for 192.168.10.97 (Request)"pingender Rechner schickt an den Router, und Router tauscht mac-addresse im Paket gegen seine eigene aus" (cefour)
Hat bisher nur geklappt, weil wir die MAC-Adresse geliefert haben.
-
version = "0.0.2.68 - Rev: 908"
- Formatierungen
- Ver./Rev. korrigiert
- IP 192.168.10.97 (für Hardware-Test)
- Frequenz auf 250 Hz eingestellt wie bei Linux 2.6.13
http://de.wikipedia.org/wiki/Linux_(Kernel)#Neuerungen_im_Kernel_2.6Routing-Tabelle fehlt noch
http://de.wikipedia.org/wiki/RoutingtabelleBeispiel: Aufruf mit netstat -r
Routingtabelle =========================================================================== Schnittstellenliste 0x1 ........................... MS TCP Loopback interface 0x2 ...00 13 d4 11 27 a5 ...... Intel(R) PRO/1000 PM Network Connection - Paketplaner-Miniport =========================================================================== =========================================================================== Aktive Routen: Netzwerkziel Netzwerkmaske Gateway Schnittstelle Anzahl 0.0.0.0 0.0.0.0 192.168.10.1 192.168.10.103 20 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.10.0 255.255.255.0 192.168.10.103 192.168.10.103 20 192.168.10.103 255.255.255.255 127.0.0.1 127.0.0.1 20 192.168.10.255 255.255.255.255 192.168.10.103 192.168.10.103 20 224.0.0.0 240.0.0.0 192.168.10.103 192.168.10.103 20 255.255.255.255 255.255.255.255 192.168.10.103 192.168.10.103 1 Standardgateway: 192.168.10.1 =========================================================================== Ständige Routen: Keine
Anzahl = Metrik
-
"0.0.2.69 - Rev: 909"
Arp Tabelle, finden eines Eintags war Fehlerhaft.
Wurde durch Integer vergleich anstatt string vergleich behoben
-
Version 0.0.2.70:
- strncmp durch memcmp ausgetauscht im Netzwerkcode
- Userlib: Weitere Funktionen implementiert
- Bugfix: strncmp repariert
-
version = "0.0.2.71 - Rev: ..." (nicht committed)
- UDPSend korrigiert (src- und destPort mit htons gedreht)
- Funktion ergänzt in network.c: network_adapter_t* network_getAdapter(uint8_t IP[4]);
- In keyboard.c die Erzeugung eines Netzwerkpakets per Tastendruck strg+n für Experimente ergänzt:if(retchar == 'n') // If you want to test something in networking { uint8_t sourceIP_address[4] ={192,168,10,97}; uint8_t destIP_address[4] ={192,168,10,103}; network_adapter_t* adapter = network_getAdapter(sourceIP_address); printf("network adapter: %X\n", adapter); // check uint16_t srcPort = 40; // unassigend uint16_t destPort = 40; if (adapter) { UDPSend(adapter, "PrettyOS says hello", strlen("PrettyOS says hello"), srcPort, adapter->IP_address, destPort, destIP_address); } return 0; }
Kontrolle mittels wireshark: http://www.henkessoft.de/OS_Dev/Bilder/rev911_UDPsend_TEST.PNG
-
version = "0.0.2.72 - Rev: 911" (ACHTUNG: in ckernel.c versehentlich 912)
- Weiterer Fehler in UDPSend behoben (Länge)
void UDPSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t srcPort, uint8_t srcIP[4], uint16_t destPort, uint8_t destIP[4]) { udpPacket_t* packet = (udpPacket_t*)((uintptr_t)data -sizeof(udpPacket_t)); packet->sourcePort = htons(srcPort); packet->destPort = htons(destPort); packet->length = htons(length + sizeof(udpPacket_t)); packet->checksum = packet->checksum = udpCalculateChecksum(packet, length + sizeof(udpPacket_t), srcIP, destIP); ipv4_send(adapter,packet,length + sizeof(udpPacket_t),destIP,17); }
Foto des Wireshark-Pakets: http://www.henkessoft.de/OS_Dev/Bilder/rev912_UDPsend_TEST.PNG
PS: Man muss zuvor PrettyOS pingen, damit die IP/MAC Kombination der destIP in der arp table unseres OS steht.
Nachdem UDPSend funktioniert, kann man sich an DHCPDiscover heran wagen.
An htons denken!
-
Version 0.0.2.73:
- UDPSend repariert. (Gefährliches Spiel mit Pointern entfernt)
- Ansatz für DHCP_Discover
- 255.255.255.255 statisch in ARP-Tabellen eingetragen