Linux Prinzipien und Programmierung



Ähnliche Dokumente
Lösung Übungszettel 6

Netzwerk. Um den Hostnamen angezeigt zu bekommen $ hostname $ hostname -f Um den Hostnamen zu ändern $ hostname <neuerhostname>

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Guide DynDNS und Portforwarding

WLAN Konfiguration. Michael Bukreus Seite 1

Dienstspezifikation nach RFC

Anbindung des eibport an das Internet

Netzwerkeinstellungen unter Mac OS X

1 Mit einem Convision Videoserver über DSL oder ISDN Router ins Internet

Technical Note ewon über DSL & VPN mit einander verbinden

CCNA Exploration Network Fundamentals. Chapter 6 Subnetze

Netzwerk-Migration. Netzwerk-Migration IACBOX.COM. Version Deutsch

Adressen im Internet (Wdh.)

Konfigurationsanleitung SIP Phone zum SIP Provider Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Machen Sie Ihr Zuhause fit für die

Virtual Private Network

Netzwerke 3 Praktikum

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Tutorial -

Konfigurationshilfe für die Netzwerkeinstellungen

Kontrollfragen: Internet

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Fakultät Angewandte Informatik Lehrprofessur für Informatik

a.i.o. control AIO GATEWAY Einrichtung

Bernd Blümel. Verschlüsselung. Prof. Dr. Blümel

Konfiguration eines DNS-Servers

How-to: VPN mit L2TP und dem Windows VPN-Client. Securepoint Security System Version 2007nx

ADNP/9200 mit E2U/ESL1: Web Interface Beispiele

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

ISA 2004 Netzwerkerstellung von Marc Grote

Hilfestellung. ALL500VDSL2 Rev.B & ALL02400N. Zugriff aus dem Internet / Portweiterleitung / Fernwartung. Router. Endgeräte. lokales.

Step by Step VPN unter Windows Server von Christian Bartl

Netzwerk Teil 2 Linux-Kurs der Unix-AG

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

ISA Server 2004 Erstellen eines neuen Netzwerkes - Von Marc Grote

RARP, BOOTP, DHCP Wie ermittelt ein Client seine IP-Adresse?

Anwendungsprotokolle: HTTP, POP, SMTP

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

ANYWHERE Zugriff von externen Arbeitsplätzen

Root-Server für anspruchsvolle Lösungen

1. Der Router ist nicht erreichbar Lösungsansatz: IP Adresse des Routers überprüfen ( entweder irgendwo auf dem Gerät aufgeklebt oder im Handbuch )

Routing und DHCP-Relayagent

Da es sich in meinem Fall um einen USB-Scanner handelt, sollte dieser mittels

7. TCP-IP Modell als Rollenspiel

Gemeinsam statt einsam - ein Internet-Zugang für mehrere Rechner Wie geht das? - Tricks und Verfahren einer Technik, die wirklich Geld spart.

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

MSXFORUM - Exchange Server 2003 > Konfiguration NNTP unter Exchange 2003

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Anleitung Erweiterte IPv6 Unterstützung

DNS Server einrichten unter Debian Linux. DHCP Server einrichten unter Debian Linux. Querschnittsaufgaben.

Hinweise zur Verwendung von myfactory unter Windows XP mit Service Pack 2

Programmieren II. Sockets. Vorlesung 16. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Sockets.

Klicken Sie mit einem Doppelklick auf das Symbol Arbeitsplatz auf Ihrem Desktop. Es öffnet sich das folgende Fenster.

Anleitung Grundsetup C3 Mail & SMS Gateway V

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

OP-LOG

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Port-Weiterleitung einrichten

Collax PPTP-VPN. Howto

Mail-Account Unimail mit der Einstellungen für Outlook Express 5.0

Modul 13: DHCP (Dynamic Host Configuration Protocol)

DHCP-Server unter Linux

How to install freesshd

VPNs mit OpenVPN. von Michael Hartmann netz.de>

Einrichtung von VPN-Verbindungen unter Windows NT


Netzwerk- Konfiguration. für Anfänger

RUB-Netzbetreuertreffen RIPE IPv6 PIP OpenVPN WLAN Robin Schröder RUB-NOC

Grundlagen Funktionsweise Anhang Begriffserklärungen. DHCP Grundlagen. Andreas Hoster. 9. Februar Vortrag für den PC-Treff Böblingen

Konfigurationsbeispiel

Öffnen Sie den Internet-Browser Ihrer Wahl. Unabhängig von der eingestellten Startseite erscheint die folgende Seite in Ihrem Browserfenster:

1. IPSec Verbindung zwischen 2 Gateways mit dynamischen IP Adressen

VPN-Verbindung zur Hochschule Hof Mac OS

2. Kommunikation und Synchronisation von Prozessen 2.2 Kommunikation zwischen Prozessen

Tips, Tricks und HOWTOs Virtualisierung für Profis und Einsteiger Serverkonsolidierung, Testumgebung, mobile Demo

KNX BAOS Gadget. Installations- und Bedienanleitung. WEINZIERL ENGINEERING GmbH. DE Burgkirchen Web:

P793H PPP/ACT LAN 4 PRESTIGE P793H

DNS-325/-320 und FXP

Netzwerk Linux-Kurs der Unix-AG

HowTo: Einrichtung & Management von APs mittels des DWC-1000

ISA Server 2004 stellt verschiedene Netzwerkvorlagen zur Einrichtung einer sicheren Infrastruktur zur Verfügung:

Registrierung eines VPN-Zuganges ins Hamnet

Anleitung zur Nutzung des SharePort Utility

PC-Kaufmann Supportinformation - Proxy Konfiguration für Elster

Konfiguration NWA1123-NI

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Internet und WWW Übungen

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Konfigurationsanleitung Tobit David Fax Server mit Remote CAPI Graphical User Interface (GUI) Seite - 1 -

Abgesetzte Nebenstelle TECHNIK-TIPPS VON per VPN

Seite Wireless Distribution System (Routing / Bridging) 3.1 Einleitung

Transkript:

Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2012/2013 1 / 25 Netzwerkkonfiguration TCP (Forts.) UDP IPC über Unix Domain Sockets 2 / 25 Grundlagen Netzwerk Für Netzwerke wird heutzutage meist noch IPv4 benutzt, bei der einer Netzwerkschnittstelle eine IP-Adresse zugeordnet wird, die aus vier Bytes besteht. Der Übergang zu IPv6 findet derzeit statt, aufgrund des allmählich knapp werdenden Adress-Pools aber überraschend langsam. Hierbei gibt es einige besondere Adressbereiche: 127.0.0.0/8 bezieht sich auf das Loopback-Interface. Dies ist keine reale Netzwerkkarte, sondern eine Rechner-interne Kommunikation. 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 sind private IP-Bereiche, insbesondere für Intranets. Private IP-Adressen werden nicht innerhalb des öffentlichen Internets geroutet und sind daher unsichtbar. Die Verbindung zum Internet erfolgt über Proxys bzw. per NAT (Network Address Translation). 3 / 25 Handout S. 1

Subnetze und Gateways Neben der IP-Adresse ist für eine Netzwerkschnittstelle noch bedeutsam, über welchen IP-Bereich sich das Subnetz erstreckt, in dem andere Netzwerkendpunkte direkt erreicht werden. Dies sind Rechner, bei denen ein Bit-And von IP mit Netmask zum selben Wert führen. Beispiele: IP 192.168.129.27, Netmask 255.255.255.0 (Subnet 192.168.129.0/24): Rechner im IP-Bereich 192.168.129.0 255 sind im selben Subnet. IP 10.10.103.123, Netmask 255.255.240.0 (Subnet 10.10.96.0/20): Rechner im IP-Bereich 10.10.96 111.0 255 sind im selben Subnet. 4 / 25 Konfiguration der Netzwerkschnittstelle per Hand Konfiguration des Loopback-Interfaces: ip addr add 127.0.0.1/8 dev lo oder ifconfig lo 127.0.0.1 netmask 255.0.0.0 Konfiguration der Netzwerkkarte ip addr add 10.10.103.123/20 broadcast 10.10.111.255 dev eth0 oder ifconfig eth0 10.10.103.123 netmask 255.255.240.0 broadcast 10.10.111.255 5 / 25 Hinzufügen der Routen Nun müssen noch die Routen hinzugefügt werden: Verbindungen nach 127.0.01/8 über das Loopback-Interface Verbindungen nach 10.10.96.0/20 direkt über eth0 Verbindungen nach außerhalb über das Gateway 10.10.96.1 route add -net 127.0.0.0 netmask 255.0.0.0 dev lo route add -net 10.10.96.0 netmask 255.255.240.0 dev eth0 route add default gw 10.10.96.1 6 / 25 Handout S. 2

Konfiguration à la Redhat Redhat und Fedora benutzen klassisch Konfigurationsdateien für Netzwerkschnittstellen unter /etc/sysconfig/network.scripts mit dem Namen ifcfg-devicename, also z. B. ifcfg-eth0: DEVICE="eth0" ONBOOT="yes" HWADDR=00:0C:29:46:C1:12 TYPE=Ethernet IPADDR0=10.10.103.123 PREFIX0=20 GATEWAY0=10.10.96.1 DEFROUTE=yes NAME="Broadcom Ethernet Card" 7 / 25 Die Zukunft: NetworkManager Moderne Distributionen nutzen seit einiger Zeit als Ersatz des bisherigen Konfigurations- und Administrations-Systems den NetworkManager, der folgende Vorteile bietet: Unterstützung diverser Typen von Netzwerkschnittstellen: kabelgebundenes Ethernet, Wireless, Breitbankverbindungen (z. B. UMTS), VPN Frontends für diverse Desktops bzw. Windowmanager (kompatibel zum Standard von freedesktop.org) Plugins, die die Konfiguration entweder auf das eigene Schema von NetworkManager oder auf die Konfigurations-Prinzipien von Distributionen (wie Redhat, Suse) abbilden. NetworkManager wurde 2004 von Redhat ins Leben gerufen, wird aber zumindest optional inzwischen auch u. a. von Debian und Suse unterstützt. 8 / 25 Prinzip von NetworkManager network-manager-kde Frontends GUI network-manager-gnome Frontend CLI cnetworkmanager NM keyfile ifcfg-rh (Fedora/RH) ifcfg-suse... Plugins 9 / 25 Handout S. 3

Netzwerkdienste unter Linux Automatische Konfiguration von Netzwerkschnittstellen über dhcp Namensauflösung über DNS Internetzeit über NTP Mailtransport mit Sendmail bzw. Alternativen wie postfix, exim usw. HTTP SSH FTP 10 / 25 Verwenden von Puffern Sockets sind relativ normale Filedeskriptoren (mit Einschränkungen, so ist eine absolute Positionierung natürlich nicht möglich). Analog zu Pipes können Sockets als gepuffert werden. Hierbei gilt als Faustregel, dass ein Socket niemals mit einem FILE gleichzeitig zum Lesen und Schreiben gepuffert werden darf. Daher ist folgender Code typisch: FILE* in = fdopen(sock, "r"); FILE* out = fdopen(dup(sock), "w"); 11 / 25 Beispiel-Client Im folgenden Beispiel wird meine Webseite über eine gepufferte Verbindung angefordert und gelesen (und nebenbei demonstriert, wie Namen per DNS aufgelöst werden können): #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdio.h> #define MAX 100 int main() { char * hostname = strdup("www.klaus-hoeppner.de"); struct hostent * host = gethostbyname(hostname); 12 / 25 Handout S. 4

Beispiel-Client (Forts.) if (host==null) { printf("kann host nicht aufloesen\n"); exit(exit_failure); struct in_addr * host_addr = (struct in_addr *) host->h_addr_list[0]; printf("ip: %s\n", inet_ntoa(*host_addr)); int sock = socket(af_inet, SOCK_STREAM, 0); if (sock<0) { printf("fehler %d beim socket-erzeugen: %s\n", errno, strerror(errno)); exit(exit_failure); struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(80); address.sin_addr = *host_addr; 13 / 25 Beispiel-Client (Forts.) if (connect(sock, (struct sockaddr *) &address, sizeof(address))<0) { printf("fehler %d beim connect: %s\n", errno, strerror(errno)); exit(exit_failure); FILE* in = fdopen(sock, "r"); FILE* out = fdopen(dup(sock), "w"); fprintf(out, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", hostname); fflush(out); char buf[max]; while (1) { if (fgets(buf, MAX-1, in)==null) break; printf(buf); close(sock); 14 / 25 Parallele Server Der bisherige Echo-Server kann nur einen Client gleichzeitig bedienen, d. h. während ein Client verbunden ist, müssen alle anderen warten. Nun wird der Echo-Server so modifiziert, dass er für jeden von max. 5 Clients einen neuen Serverprozess per fork erzeugt. Dies entspricht z. B. dem üblichen Vorgehen beim Apache-HTTPD (wo zur Beschleunigung meist schon per prefork mehrere Server im Voraus angelegt werden). 15 / 25 Handout S. 5

Änderung an der Implementierung void child_exited(int signum) { int pid, status; while ( (pid=wait(&status))!= -1) { printf("kindprozess %d beendet\n", pid); // Anpassungen in main() listen(sock, 5); sethandler(sigchld, child_exited); char buf[max]; struct sockaddr_in client_address; size_t addrlen = sizeof(client_address); while(1) { int client_sock = accept(sock, (struct sockaddr *) &client_address, &addrlen); if (client_sock<0) { printf("fehler %d beim accept: %s\n", errno, strerror(errno)); exit(exit_failure); Änderung an der Implementierung 16 / 25 int child_pid = fork(); if (child_pid==0) { close(sock); printf("verbindung von %s, Port %d\n", inet_ntoa(client_address.sin_addr), ntohs(client_address.sin_port)); sprintf(buf, "Bereit fuer Echo (quit fuer Ende)\n"); send(client_sock, buf, strlen(buf), 0); do { int size = recv(client_sock, buf, MAX-1, 0); buf[size] = \0 ; printf("%d Zeichen gelesen: +++%s+++\n", size, buf); send(client_sock, buf, strlen(buf), 0); while (strcmp(buf,"quit")); close(client_sock); exit(exit_success); close(client_sock); 17 / 25 Verbindungslose Kommunikation mit UDP Bei der verbindungslosen Kommunikation per UDP schickt ein Client Pakete an einen Server (oder an alle), ohne dass über Handshakes der Erfolg der Übertragung sicher gestellt ist. Da so ein großer Teil des Overheads wegfällt, ist die Kommunikation so deutlich Ressourcen-schonender. Der Nachteil liegt natürlich darin, dass man sich auf die Kommunikation nicht verlassen kann. D. h. eine Anwendung muss so implementiert sein, dass sie robust dagegen ist, dass eine verschickte Nachricht nicht ankommt. 18 / 25 Handout S. 6

Beispiel Im folgenden Beispiel sollen ein oder mehrere Clients verbindungslos den Namen und die Position eines Spielers an einen Server übertragen. Hierfür wird in position.h folgende Struktur definiert: #ifndef _POSITION_H #define _POSITION_H typedef struct { char name[40]; int pos; position_t; #endif 19 / 25 #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdio.h> #include "position.h" #define MAX 1024 Implementierung Server int main() { int sock = socket(af_inet, SOCK_DGRAM, 0); struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(9999); address.sin_addr.s_addr = htonl(inaddr_any); bind(sock, (struct sockaddr *) &address, sizeof(address)); 20 / 25 Implementierung Server (Forts.) position_t pos; struct sockaddr_in client_address; size_t addrlen = sizeof(client_address); while(1) { recvfrom(sock, &pos, sizeof(pos), 0, (struct sockaddr *) &client_address, &addrlen); printf("daten von %s, Port %d, Name %s, Position %d\n", inet_ntoa(client_address.sin_addr), ntohs(client_address.sin_port), pos.name, pos.pos); 21 / 25 Handout S. 7

Implementierung Client #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdio.h> #include "position.h" #define MAX 1024 int main(int argc, char** argv) { int sock = socket(af_inet, SOCK_DGRAM, 0); struct sockaddr_in client_address; memset(&client_address, 0, sizeof(client_address)); client_address.sin_family = AF_INET; client_address.sin_port = htons(0); client_address.sin_addr.s_addr = htonl(inaddr_any); bind(sock, (struct sockaddr*) &client_address, sizeof(client_address)); 22 / 25 Implementierung Client (Forts.) struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(9999); inet_aton("127.0.0.1", &address.sin_addr); position_t pos; strcpy(pos.name, argv[1]); int x; for (x=0; x<10; x++) { pos.pos = x; sendto(sock, &pos, sizeof(pos), 0, (struct sockaddr*) &address, sizeof(address)); sleep(1); close(sock); 23 / 25 Unix Domain Sockets Ein Socket muss nicht zwingend eine Kommunikation über Netzwerk beschreiben. Eine bereits lange verbreitete Methode besteht in dem Verwenden von Unix Domain Sockets, bei denen die Kommunikation über eine Datei stattfindet. Dies kann also auf einem Rechner zur Inter-Prozess-Kommunikation benutzt werden. Der Umstieg von IP-Kommunikation zu Socket-Files ist einfach: Änderung der Familie von AF_INET nach AF_UNIX Aufbau einer Struktur des Typs sockaddr_un statt sockaddr_un. 24 / 25 Handout S. 8

Grundgerüst Server #include <sys/un.h>... int main() { int sock = socket(af_unix, SOCK_STREAM, 0); struct sockaddr_un address; address.sun_family = AF_UNIX; strcpy(address.sun_path, "/tmp/myecho.sock"); bind(sock, (struct sockaddr *) &address, sizeof(address)); listen(sock, 1); struct sockaddr_un client_address; size_t addrlen = sizeof(client_address); while(1) { int client_sock = accept(sock, (struct sockaddr *) &client_address, &addrlen);... close(client_sock); Grundgerüst Client 25 / 25 #include <sys/un.h>... int main() { int sock = socket(af_unix, SOCK_STREAM, 0); struct sockaddr_un address; address.sun_family = AF_UNIX; strcpy(address.sun_path, "/tmp/myecho.sock"); connect(sock, (struct sockaddr *) &address, sizeof(address));... close(sock); 26 / 25 Handout S. 9