Rechner kommunizieren entweder bidirektional über stromorientierte Protokolle (TCP) oder unidirektional über nachrichtenorientierte Protokolle (UDP). Dabei hat sich das Internet Protokoll als Standard durchgesetzt.
Daemon | Apache | Postfix | Dovecot | … | Dnsmasq | Chrony | Ping | Samba | |
---|---|---|---|---|---|---|---|---|---|
Anwendung | HTTP | SMTP | IMAP | … | DNS | NTP | SMB | ||
Transport | TCP | UDP | NetBIOS | ||||||
Netzwerk | IP | ICMP | NetBEUI | ||||||
Verbindung | Ethernet (MAC) | Wireless (SSID) | FDDI, … |
unistd.h
Der Hostname wird beim Start des Rechners aus /etc/hostname
gelesen.
Nur privilegierten Benutzer dürfen den Namen ändern.
Auf der Kommandozeile wird er mit hostname(1)
abgefragt.
int | gethostname | ( char * name, size_t len) | Eigener Hostname |
int | sethostname | (const char * name, size_t len) | |
int | getdomainname | ( char * name, size_t len) | Eigene Domäne |
int | setdomainname | (const char * name, size_t len) | |
long | gethostid | (void) | Identifikation |
int | sethostid | (long hostid) |
utsname.h
Betriebssystem identifizieren. Auf der Kommandozeile mit uname(1)
.
struct utsname | |||
---|---|---|---|
char | sysname[] | "Linux" | Kernelname |
char | nodename[] | "debian" | Hostname |
char | release[] | "3.16.0-4-amd64" | Kernelversion |
char | version[] | "#1 SMP … (2015-07-17)" | Kerneldatum |
char | machine[] | "x86_64" | Systemarchitektur |
int | uname | (struct utsname * buf) | Betriebssystem identifizieren |
net/if.h
Schnittstellen auflisten.
Auf der Kommandozeile mit ip link
.
Typische Namen sind zum Beispiel lo
,
eno1
etc.
struct if_nameindex | |||
---|---|---|---|
unsigned int | if_index | ||
char * | if_name | ||
struct if_nameindex * | if_nameindex | (void) | |
void | if_freenameindex | (struct if_nameindex * ptr) | |
char * | if_indextoname | (unsigned int index, char * name) | |
unsigned int | if_nametoindex | ( const char * name) |
IF_NAMESIZE | Mindestgröße für den name Parameter in if_indextoname . |
sys/un.h
Datenstruktur für Unix Domain Sockets.
struct sockaddr_un | |||
---|---|---|---|
sa_family_t | sun_family | AF_LOCAL | |
char | sun_path[100] | Pfad |
netinet/in.h
Datenstrukturen für Internet-Adressen.
typedef | in_addr_t | uint32_t | IPv4-Adresse |
typedef | in_port_t | uint16_t | Portnummer |
struct in_addr | |||
---|---|---|---|
in_addr_t | s_addr | IPv4-Adresse (32 Bit) | |
struct sockaddr_in | |||
sa_family_t | sin_family | AF_INET | |
in_port_t | sin_port | Portnummer | |
struct in_addr | sin_addr | IPv4 Adresse | |
unsigned char | sin_zero[] | Padding | |
struct in6_addr | |||
uint8_t | s6_addr[16] | IPv6 Adresse (128 Bit) | |
struct sockaddr_in6 | |||
sa_family_t | sin_family | AF_INET6 | |
in_port_t | sin6_port | Portnummer auf der Transportschicht | |
uint32_t | sin6_flowinfo | IPv6 Flussinformation | |
struct in6_addr | sin6_addr | IPv6 Adresse | |
uint32_t | sin6_scope_id | IPv6 scope-id |
netinet/tcp.h
TCP Flags:
#define | TCP_NODELAY |
arpa/inet.h
Adressen umrechnen
uint32_t | htonl | (uint32_t hostlong) | Adresse |
uint32_t | ntohl | (uint32_t netlong) | |
uint16_t | htons | (uint16_t hostshort) | Portnummer |
uint16_t | ntohs | (uint16_t netshort) | |
in_addr_t | inet_addr | (const char * cp) | Dezimaldarstellung |
int | inet_aton | (const char * cp, struct in_addr * in) | |
char * | inet_ntoa | ( struct in_addr in) | |
const char * | inet_ntop | (int af, const void * src, char * dst, socklen_t cnt) | |
int | inet_pton | (int af, const char * src, void * dst) | |
struct in_addr | inet_makeaddr | (int net, int host) | Kombination |
in_addr_t | inet_lnaof | (struct in_addr in) | Hostadresse |
in_addr_t | inet_netof | (struct in_addr in) | Netzwerkadresse |
in_addr_t | inet_network | (const char * cp) | Netzwerkadresse |
netdb.h
Um Hostnamen zu Adressen auflösen, list Der
NSS die Datei
/etc/nsswitch.conf
, wo normalerweise zuerst die Datei
/etc/hosts
konsultiert wird, bevor Anfragen per
/etc/resolv.conf
im
DNS
aufgelöst werden.
extern int | h_errno | ||
struct addrinfo | |||
---|---|---|---|
int | ai_flags | ||
int | ai_family | ||
int | ai_socktype | ||
int | ai_protocol | ||
size_t | ai_addrlen | ||
struct sockaddr * | ai_addr | ||
char * | ai_canonname | ||
struct addrinfo * | ai_next | ||
int | getaddrinfo | (const char * node, const char * service, const struct addrinfo * hints, struct addrinfo ** res) | |
int | getnameinfo | (const struct sockaddr * sa, socklen_t salen, char * host, size_t hostlen, char * serv, size_t servlen, int flags) | |
void | freeaddrinfo | (struct addrinfo * res) | |
const char * | gai_strerror | (int errcode) |
Lesen von /etc/hosts
struct hostent | |||
---|---|---|---|
char * | h_name | ||
char ** | h_aliases | ||
int | h_addrtype | ||
int | h_length | ||
char ** | h_addr_list | ||
void | sethostent | (int stayopen) | |
void | endhostent | (void) | |
struct hostent * | gethostent | (void) | |
struct hostent * | gethostbyaddr | (const void * addr, int len, int type) | |
struct hostent * | gethostbyname | (const char * name) | |
struct hostent * | gethostbyname2 | (const char * name, int domain) | |
int | gethostent_r | (struct hostent * ret, char * buf, size_t len, struct hostent ** result, int * err) | |
int | gethostbyname_r | (const char * name, struct hostent * ret, char * buf, size_t len, struct hostent ** result, int * err) | |
int | gethostbyname2_r | (const char * name, int af, struct hostent * ret, char * buf, size_t len, struct hostent ** result, int * err) | |
void | herror | (const char * s) | |
const char * | hstrerror | (int err) |
Lesen von /etc/services
struct servent | |||
---|---|---|---|
char * | s_name | ||
char ** | s_aliases | ||
int | s_port | ||
char * | s_proto | ||
void | setservent | (int stayopen) | |
void | endservent | (void) | |
struct servent * | getservent | (void) | |
struct servent * | getservbyname | (const char * name, const char * proto) | |
struct servent * | getservbyport | (int port, const char * proto) |
Lesen von /etc/networks
struct netent | |||
---|---|---|---|
char * | n_name | ||
char ** | n_aliases | ||
int | n_addrtype | ||
uint32_t | n_net | ||
void | setnetent | (int stayopen) | |
void | endnetent | (void) | |
struct netent * | getnetent | (void) | |
struct netent * | getnetbyname | (const char * name) | |
struct netent * | getnetbyaddr | (uint32_t net, int type) |
Lesen von /etc/protocols
struct protoent | |||
---|---|---|---|
char * | p_name | ||
char ** | p_aliases | ||
int | p_proto | ||
void | setprotoent | (int stayopen) | |
void | endprotoent | (void) | |
struct protoent * | getprotoent | (void) | |
struct protoent * | getprotobyname | (const char * name) | |
struct protoent * | getprotobynumber | (int proto) |
AI_CANONNAME | |
AI_PASSIVE | |
AI_V4MAPPED | |
AI_ALL | |
AI_NOFQDN | Nur den Hostnamen ermitteln |
AI_NUMERICHOST | Numerische Adresse statt Hostname ermitteln |
AI_NAMEREQD | Fehlermeldung statt Numerische Adresse |
AI_NUMERICSERV | Port Nummer statt Dienstname zurückliefern |
AI_DGRAM | Datagrammdienst UDP statt Stromdienst TCP liefern, meistens gleich |
AF_UNSPEC | Unbekannt |
AF_LOCAL | Unix Domain Socket |
AF_INET | IPv4 Adresse (32 Bit) |
AF_INET6 | IPv6 Adresse (128 Bit) |
SOCK_DGRAM | Verbindungslos und unsicher |
SOCK_STREAM | Verbindungsorientiert und sicher |
UDP | Verbindungslos (SOCK_DGRAM ) |
TCP | Verbindungsorientiert (SOCK_STREAM ) |
sys/socket.h
Netzwerk-Sockel erzeugen
int | socket | (int domain, int type, int protocol) | |
int | socketpair | (int domain, int type, int protocol, int fd[2]) | |
int | sockatmark | (int fd) | |
struct sockaddr | |||
---|---|---|---|
sa_family_t | sa_family | ||
char | sa_data[14] | ||
int | bind | (int fd, const struct sockaddr * addr, socklen_t len) | |
int | listen | (int fd, int backlog) | |
int | accept | (int fd, struct sockaddr * addr, socklen_t * len) | |
int | connect | (int fd, const struct sockaddr * addr, socklen_t len) | |
int | shutdown | (int fd, int how) | |
int | getsockname | (int fd, struct sockaddr * addr, socklen_t * len) | |
int | getpeername | (int fd, struct sockaddr * addr, socklen_t * len) | |
int | getsockopt | (int fd, int level, int optname, void * optval, socklen_t * optlen) | |
int | setsockopt | (int fd, int level, int optname, const void * optval, socklen_t optlen) | |
ssize_t | send | (int fd, const void * buf, size_t len, int flags) | |
ssize_t | sendto | (int fd, const void * buf, size_t len, int flags, const struct sockaddr * to, socklen_t len) | |
ssize_t | recv | (int fd, void * buf, size_t len, int flags) | |
ssize_t | recvfrom | (int fd, void * buf, size_t len, int flags, | |
struct sockaddr * from, socklen_t * len) | |||
struct msghdr | |||
void * | msg_name | ||
socklen_t | msg_namelen | ||
struct iovec * | msg_iov | ||
size_t | msg_iovlen | ||
void * | msg_control | ||
socklen_t | msg_controllen | ||
int | msg_flags | ||
ssize_t | sendmsg | (int fd, const struct msghdr * msg, int flags) | |
ssize_t | recvmsg | (int fd, struct msghdr * msg, int flags) |
PF_LOCAL | Lokale Kommunikation |
PF_INET | Internet Protokoll Version 4 |
PF_INET6 | Internet Protokoll Version 6 |
PF_IPX | Novell Protokoll |
PF_NETLINK | Kernel user interface device |
PF_X25 | ITU-T X.25 / ISO-8208 Protokoll |
PF_AX25 | Amateur radio AX.25 Protokoll |
PF_ATMPVC | Access to raw ATM PVCs |
PF_APPLETALK | Appletalk |
PF_PACKET | Low level packet interface |
SOCK_STREAM | Verbindungsorientierte, zuverlässige Zwei-Wege-Kommunikation (TCP) |
SOCK_DGRAM | Verbidungslose, unzuverlässige Datagramme (UDP) |
SOCK_SEQPACKET | Sequenzielle, zuverlässige Zweiwegeverbindung |
SOCK_RAW | Rohzugriff auf das Netzwerkprotokoll |
SOCK_RDM | Verbindungslose, zuverlässige Datageamme mit zufälliger Reihenfolge |
SOCK_PACKET | Obsolet |
SOL_SOCKET | |
TCP |
SO_KEEPALIVE | Nachrichten zum Aufrechterhalten der Verbindung senden |
SO_OOBINLINE | Band-externe Daten in den regulären Datenstrom einbetten |
SO_RCVLOWAT | |
SO_SNDLOWAT | |
SO_RCVTIMEO | |
SO_SNDTIMEO | |
SO_BSDCOMPAT | Obsolet |
SO_PASSCRED | Anmeldeinformationen senden (nur PF_LOCAL ) |
SO_PEERCRED | Anmeldeinformationen empfangen (nur PF_LOCAL ) |
SO_BINDTODEVICE | Sockel an ein Gerät binden, zum Beispiel eno1 |
SO_DEBUG | Fehlersuchodus anschalten |
SO_REUSEADDR | bind soll Adressen wiederverwenden |
SO_TYPE | Sockeltyp feststellen, zum Beispiel SOCK_STREAM (nur getsockopt ) |
SO_ACCEPTCONN | Feststellen ob der Sockel Verbindungen akzeptiert |
SO_DONTROUTE | Nur an direkt erreichbare Rechner senden |
SO_BROADCAST | Flag für Rundsendung abfragen oder setzen |
SO_SNDBUF | Größe des Sendepuffers ermitteln oder setzen |
SO_RCVBUF | Größe des Empfangspuffer ermitteln oder setzen |
SO_LINGER | Sets or gets the SO_LINGER option. The argument is a linger structure. |
SO_PRIORITY | Protokollspezifische Priorität festlegen |
SO_ERROR | Fehlerstatus zurücksetzen (nur getsockopt ) |
SHUT_RD | Lesezugriff unterbinden |
SHUT_WR | Schreibzugriff unterbinden |
SHUT_RDWR | Jeglichen Zugriff unterbinden |
MSG_OOB | Band-externe Daten empfangen |
MSG_PEEK | Vorschau in den Empfangspuffer |
MSG_WAITALL | Blockieren, bis alle angeforderten Daten vorliegen |
MSG_TRUNC | Echte Größe des Pakets ermitteln |
MSG_ERRQUEUE | Wartende Fehler entgegennehmen |