Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

RAW Sockets Anwendungen in Rechnernetzen Tobias Wawryniuk.

Ähnliche Präsentationen


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

1 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 Tobias Wawryniuk Sockets Windows vs. UNIX Windows: –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 Tobias Wawryniuk Internet Socket Stream SocketSOCK_STREAM –verbindungsorientiert –Verbindungsaufbau / -abbau –Flusskontrolle Datagram SocketsSOCK_DGRAM –verbindungslos –Reihenfolge und Empfang wird nicht gesichert Beide: Multiplexing, Demultiplexing durch Ports

5 Tobias Wawryniuk 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 Tobias Wawryniuk 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 Tobias Wawryniuk 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 Tobias Wawryniuk OSI-Standard – TCP/IP-Standard application layer (7) presentation layer (6) session layer (5) transport layer (4) network layer (3) data link layer (2) physical layer (1) application layer (4) transport layer (3) internet layer (2) network (access) layer (1) ETH, TR IP TCP, UDP

9 Tobias Wawryniuk 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 Tobias Wawryniuk Sockets - Programmierung socket(…) –connect(…) –bind(…) –listen(…) –send(…) / sendto(…) –recv(…) / recvfrom(…) close(…)

11 Tobias Wawryniuk 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 Tobias Wawryniuk 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 Tobias Wawryniuk 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

14 Tobias Wawryniuk RAW Sockets – UNIX

15 Tobias Wawryniuk 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 Tobias Wawryniuk RAW-Socket: struct sockaddr

17 Tobias Wawryniuk 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

18 Tobias Wawryniuk 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 Tobias Wawryniuk RAW-Sockets: Hello World

20 Tobias Wawryniuk Diagramm des IP-Headers Diagramm des IP

21 Tobias Wawryniuk 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

22 Tobias Wawryniuk RAW-Sockets: IP-Header erstellen für Beispiel angepasste Funktion –keine Optionen, –viele Felder werden vom Kernel gesetzt

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

24 Tobias Wawryniuk RAW-Sockets: ICMP-Header setzen

25

26

27 Tobias Wawryniuk 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

28 Tobias Wawryniuk 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

29 Tobias Wawryniuk RAW-Socktes: PingCode

30

31 Tobias Wawryniuk 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)

32 Tobias Wawryniuk 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 Tobias Wawryniuk TCP Header Prüfsumme: –pseudo header, tcp header und payload

35 Tobias Wawryniuk 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 Tobias Wawryniuk TCP-Flooder Code

37

38

39 Tobias Wawryniuk UDP-Header

40 Tobias Wawryniuk 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)

41 Tobias Wawryniuk 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 Tobias Wawryniuk TCP - SnifferCode

43 Tobias Wawryniuk TCP-Sniffer Output

44 Tobias Wawryniuk

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 Tobias Wawryniuk 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 Tobias Wawryniuk Literatur / Quellen Printmedien / PDF –Netzwerkprogrammierung unter LINUX und UNIX –Embedded Internet in der Industrieautomation –Beejs Guide to Network Programming Using Internet Sockets (PDF) –Netzwerkprogrammierung mit BSD-Sockets (PDF) –Programmierung in der Unix-Umgebung Webseiten: –http://www.wikipedia.de; http://www.wikipedia.de –http://www.codeproject.com/csharp/pktcap.asphttp://www.codeproject.com/csharp/pktcap.asp –http://en.wikipedia.org/wiki/Internet_sockethttp://en.wikipedia.org/wiki/Internet_socket –http://en.wikipedia.org/wiki/Raw_sockethttp://en.wikipedia.org/wiki/Raw_socket –http://www.zotteljedi.de/doc/socket-tipps/index.htmlhttp://www.zotteljedi.de/doc/socket-tipps/index.html

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

49 RAW Sockets Haben Sie Fragen?


Herunterladen ppt "RAW Sockets Anwendungen in Rechnernetzen Tobias Wawryniuk."

Ähnliche Präsentationen


Google-Anzeigen