Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Anwendungen in Rechnernetzen Tobias Wawryniuk

Ähnliche Präsentationen


Präsentation zum Thema: "Anwendungen in Rechnernetzen Tobias Wawryniuk"—  Präsentation transkript:

1 Anwendungen in Rechnernetzen Tobias Wawryniuk
RAW Sockets Anwendungen in Rechnernetzen Tobias Wawryniuk

2 Vorgeschichte: Sockets
Was ist ein Socket? Ursprung im 4.2 BSD System Schnittstelle für Zugriff auf Netzwerkdienste Bereitstellung als ‚file descriptor‘ I/O- Handling wie bei Dateien Verbindungspunkte zwischen entfernten Anwendungen Socket := Port + Protokollflag + Adresse

3 Sockets Windows vs. UNIX
Eigener Datentyp (SOCKET) Winsock 1.1 – in Anlehnung an BSD Sockets Winsock 2 – Erweiterungen für diverse Protokolle UNIX: ‚file descriptor‘ – Abstraktion im Dateisystem-Stil Funktionen wie ‚read()‘ und ‚write()‘ möglich IPC - interprocess communication

4 Internet Socket Stream Socket SOCK_STREAM Datagram Sockets SOCK_DGRAM
verbindungsorientiert Verbindungsaufbau / -abbau Flusskontrolle Datagram Sockets SOCK_DGRAM verbindungslos Reihenfolge und Empfang wird nicht gesichert Beide: Multiplexing, Demultiplexing durch Ports

5 RAW Socket Was ist nun ein RAW-Socket?
Zugriff auf Ebene der Vermittlungsschicht Empfang von Paketen, die nicht TCP od. UDP sind Kontrolle über Einträge der Headerfelder Eigene Transportprotokolle implementierbar

6 RAW Socket – MS Windows Einschränkungen mit Windows XP SP 2 und Winsock 2 Empfang von IP-Paketen mit RAW Sockets möglich TCP-Pakete können nicht gesendet werden UDP-Pakete müssen eine ‚lokale‘ IP-Adresse haben Quelle: Michael Howard's Web Log

7 RAW Sockets – UNIX Process, der RAW Socket erstellen will benötigt superuser (root UID=0) Rechte Empfang und Senden von Datagrammen für RAW Socket wird ein Protokoll spezifiziert

8 OSI-Standard – TCP/IP-Standard
application layer (7) application layer (4) presentation layer (6) session layer (5) transport layer (4) TCP, UDP transport layer (3) network layer (3) IP internet layer (2) data link layer (2) ETH , TR network (access) layer (1) physical layer (1)

9 TCP / IP Stack konkrete Implementierung des TCP / IP Standards
Diensterbringer für die Anwendungschicht Programme, die über IP netzwerken wollen Dienste wie ftp, http, smtp, etc. Dienstnutzer der Netzwerkschicht z.B. Ethernet oder TokenRing

10 Sockets - Programmierung
connect(…) bind(…) listen(…) send(…) / sendto(…) recv(…) / recvfrom(…) close(…)

11 RAW-Sockets: Socket anlegen
int socket(int domain, int type, int protocol) domain: PF_LOCAL, PF_INET, PF_IPX, … type: SOCK_STREAM, SOCK_DGRAM SOCK_RAW, … protocol: IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_RAW, … RFC 1700 Assigned Numbers

12 RAW Sockets: Socket anlegen
RAW-Socket auf Ebene des network layers int socket(PF_INET, SOCK_RAW, int protocol); RAW-Socket auf Ebene des data link layers int socket(PF_PACKET, SOCK_RAW, int protocol); SOCK_PACKET gilt als veraltet Socket schließen: int close(int fd);

13 RAW-Sockets: Optionen festlegen
int setsockopts(int s, int level, int optname, void *optval, socklen_t *optlen); level: Art bzw. Bereich der Option SOL_SOCKET … direkt auf Socket bezogen IPPROTO_IP ….. Option bezieht sich auf Internet Protokoll optname: Identifizierung der Option IP_HDRINCL ….. vor Payload im Puffer befindet sich der Header IPPROTO_RAW impliziert IP_HDRINCL SOL_SOCKET -> SO_BROADCAST

14 RAW Sockets – UNIX

15 RAW-Socket: Verbindung aufbauen
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); optional; je nach Verwendungszweck Struktur der Adresse wird durch Adressraum des Sockets bestimmt Portnummer in struct sockaddr_in spezifiziert Protokoll, wird beim Senden nicht berücksichtig

16 RAW-Socket: struct sockaddr

17 Network Byte Order Interpretation der Bits und Bytes little-endian
höherwertigstes Oktett ist rechts niederwertigstes Oktett ist links big-endian höherwertigste Oktett ist links niederwertigste Oktett ist rechts analoges gilt für die Bits im Oktett NUXI – Problem -> als 2 Byte Words im Speicher abgelegt UNIX

18 Network Byte Order Sicherstellen der Konvertierung relevanter Werte (bei mehreren Oktetten) Funktionen: uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netshort); uint16_t ntohs(uint16_t netshort);

19 RAW-Sockets: Hello World

20 Diagramm des IP-Headers

21 Beispiel 1 – Ping request/reply
Request senden, auf Antwort warten Endlosschleife (UNIX) Zählschleife (Windows) IP-Header muss nicht modifiziert werden Sequenznummer erhöhen ICMP Checksumme zurücksetzen Schleifen, durch Parameter definierbar, auch Datenmenge

22 RAW-Sockets: IP-Header erstellen
für Beispiel angepasste Funktion keine Optionen, viele Felder werden vom Kernel gesetzt Vom Kernel gesetzt: totalllength, id, checksum

23 ICMP Header Request: Typ 0x08 Reply: Typ 0x00 Code: 0x00
Identifier: Zuordnung von reply zu request Sequence Number: Erhöhung bei neuem request

24 RAW-Sockets: ICMP-Header setzen

25

26

27 RAW-Sockets: Paket senden
ssize_t send(int s, const void *buf, size_t len, int flags); ssize_t sendto(send(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); Flags hier nicht nötig, z.B. MSG_DONTROUTE MSG_DONTROUTE - nicht routen, nur lokales Netz (Diagnoseprogramme)

28 RAW-Sockets: Pakete empfangen
ssize_t recv(int s, void *buf, size_t len, int flags); ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct aockaddr *from, socklen_t *fromlen); Flags hier ebenfalls nicht notwendig* Paket testen, ob Prozess Empfänger ist Hier Test: hdrIcmp->type == 0x00 && hdrIcmp->un.echo.id = id Tests können je nach Anwendungsfall gestaltet werden. Empfängt Socket überhaupt femde Pakete *TimeOut einbauen: MSG_DONTWAIT – non-Blocking mode

29 RAW-Socktes: PingCode

30 Big-little-endian example

31 Prüfsummen zum Berechnen der Prüfsumme ist das Feld selbst auf 0 gesetzt Felder werden in der Regel als 16-Bit Worte aufgefasst 1-er Komplement der Summe aller 1-er Komplemente der 16-Bit-Worte ICMP: über ICMP-Header (incl. Datenbereich bei Typ 8 und 3) Ist die Prüfsumme ungültig erhält man keine Antwort, Auch IP-Pakete mit ungültiger Prüfsumme werden nicht geroutet

32 Beispiel 2 – TCP - Flooder
Flooder: Server/ Dienst mit Anfagen überfluten -> DoS-Attacke TCP – Verbindungsaufbau nach 3 – Wege – Handshake (1) Verbindungswunsch vom Client (2) Bestätigung / Akzeptanz vom Server (3) Bestätigung vom Client

33

34 TCP Header Prüfsumme: pseudo header, tcp header und payload

35 RAW-Sockets: TCP-Header erstellen
ebenfalls beispielhafte Funktion Sequenz und Acknowledge Nummer hier keine Bedeutung, da ja nur ein Paket gesendet werden soll Offset ist statisch, da im auch keine Optionen sind

36 TCP-Flooder Code

37 Nach 2 sek. Ca Pakete Ein paar ICMP

38

39 UDP-Header

40 Prüfsummen bei TCP und UDP
Wird in der Regel aus Header und Payload gebildet weiterhin wird ein Pseudo-Header verwendet, bestehend aus: IP-Adressen aus dem IP-Header Zero-Padding (ein Oktett) Protokollnummer (TCP / UDP) Gesamtlänge (TCP / UDP) Pseudoheader: Schutz gegen fehlgeroutete Segmente

41 Beispiel 3 – TCP - Sniffer
Pakete, die an einem Interface ankommen werden aufgenommen RAW-Socket erhält eine Kopie int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addlen);

42 TCP - SnifferCode

43 TCP-Sniffer Output

44

45 Die Alternative: TLI TLI – Transport Layer Interface
eingeführt von AT&T mit System V Release 3.0 (Streams I/O Systems) [1986] Bindeglied zwischen: transport endpoints (miteinander kommunizierende (User-)Prozesse) transport provider (z.B. TCP / IP ) vom Diensterbringer unabhängig Strukturen: t_netbuf, t_bind, t_call, t_info Funktionen: t_open, t_bind(), t_connect(), … Standardisiert unter XTI, X/Open

46 Fazit Sinnvoller Einsatz: für neue (eigene) Protokolle
Protokolle ohne direkte Benutzerschnittstelle Ab Linux 2.2 können alle Header-Felder per Socketoption gesetzt/gelesen werden

47 Literatur / Quellen Printmedien / PDF Webseiten:
Netzwerkprogrammierung unter LINUX und UNIX Embedded Internet in der Industrieautomation Beej’s Guide to Network Programming Using Internet Sockets (PDF) Netzwerkprogrammierung mit BSD-Sockets (PDF) Programmierung in der Unix-Umgebung Webseiten: Stefan Fischer, Walter Müller; UNIX easy Klaus-D. Walter; Hüthing Brain „Beej“ Hall Felix Opatz - Zotteljedi W. Richard Stevens; Addison-Wesley

48 Literatur / Quellen LINUX ManPages RFC – Request For Comment
Section 7 – socket Section 7 – raw Section 7 – ip Section 7 – icmp RFC – Request For Comment RFC Internet Protocol RFC Transmission Control Protocol RFC User Datagram Protocoll RFC Internet Assigned Numbers

49 RAW Sockets Haben Sie Fragen?


Herunterladen ppt "Anwendungen in Rechnernetzen Tobias Wawryniuk"

Ähnliche Präsentationen


Google-Anzeigen