====== std.net ======
Netzwerk-Units für TCP/UDP-Kommunikation, Anwendungsprotokolle und Netzwerkmanagement. Alle Units implementieren ihre Protokolle **nativ** — ohne externe Bibliotheken (Ausnahme: ''std.net.tls'' nutzt OpenSSL). Die Schichtarchitektur folgt dem ISO/OSI-Modell: Transport-Units bilden die Basis, darauf aufbauend die Protokoll-Units.
^ Unit ^ Gruppe ^ Beschreibung ^
| [[lyx_-_programmiersprache:units:net:socket|std.net.socket]] | Transport | TCP, UDP, Unix, Raw-Sockets, ICMP, ARP, Poll/Select |
| [[lyx_-_programmiersprache:units:net:types|std.net.types]] | Transport | Socket-Adresstypen und IP-Hilfsfunktionen |
| [[lyx_-_programmiersprache:units:net:tls|std.net.tls]] | Transport | TLS/SSL-Verbindungen (via OpenSSL) |
| [[lyx_-_programmiersprache:units:net:syscalls|std.net.syscalls]] | Transport | Portable POSIX-Socket-Syscall-Wrapper (unterste Schicht) |
| [[lyx_-_programmiersprache:units:net:dns|std.net.dns]] | Protokolle | DNS-Auflösung (A, AAAA, MX, NS, TXT, SOA, SRV, CAA, DNSKEY, DS, PTR) |
| [[lyx_-_programmiersprache:units:net:http|std.net.http]] | Protokolle | HTTP/1.1-Client: GET, POST, Header, Chunked-Transfer |
| [[lyx_-_programmiersprache:units:net:https|std.net.https]] | Protokolle | HTTPS-Client (TLS-gesichert) |
| [[lyx_-_programmiersprache:units:net:smtp|std.net.smtp]] | Protokolle | SMTP-Mailversand (Ports 25/587/465) |
| [[lyx_-_programmiersprache:units:net:imap|std.net.imap]] | Protokolle | IMAP4rev1-Postfachzugriff: SELECT, LIST, FETCH |
| [[lyx_-_programmiersprache:units:net:ssh|std.net.ssh]] | Protokolle | SSH: Auth, Remote-Befehlsausführung, Output-Capture |
| [[lyx_-_programmiersprache:units:net:mqtt|std.net.mqtt]] | Protokolle | MQTT 3.1.1: Publish, Subscribe, QoS 0/1/2 (IoT) |
| [[lyx_-_programmiersprache:units:net:ntp|std.net.ntp]] | Protokolle | NTP v3: Zeitabfrage via UDP Port 123 |
| [[lyx_-_programmiersprache:units:net:quic|std.net.quic]] | Protokolle | QUIC (RFC 9000): UDP-basiert, TLS 1.3 integriert |
| [[lyx_-_programmiersprache:units:net:sip|std.net.sip]] | Protokolle | SIP (RFC 3261): REGISTER, INVITE, OPTIONS (VoIP) |
| [[lyx_-_programmiersprache:units:net:telnet|std.net.telnet]] | Protokolle | Telnet (RFC 854): Option-Negotiation, Legacy-Geräte |
| [[lyx_-_programmiersprache:units:net:whois|std.net.whois]] | Protokolle | WHOIS (RFC 3912): Auto-Routing zu Registry-Servern |
| [[lyx_-_programmiersprache:units:net:ldap|std.net.ldap]] | Verzeichnis & Routing | LDAP (RFC 4511): Bind, Search, Modify, SASL-Auth |
| [[lyx_-_programmiersprache:units:net:bgp|std.net.bgp]] | Verzeichnis & Routing | BGP-4 (RFC 4271): AS-Routing, UPDATE-Messages |
| [[lyx_-_programmiersprache:units:net:snmp|std.net.snmp]] | Management | SNMPv1/v2c: OID-basierter Geräteparameter-Zugriff |
| [[lyx_-_programmiersprache:units:net:asn1|std.net.asn1]] | Management | ASN.1/BER-Encoding (interne Hilfsbibliothek für SNMP) |
| [[lyx_-_programmiersprache:units:net:mongo|std.net.mongo]] | Datenbank | MongoDB Wire Protocol: BSON-Dokumente, SCRAM-SHA-1 |
----
===== Schichtarchitektur =====
Die Net-Units bauen aufeinander auf:
┌─────────────────────────────────────────────────────────┐
│ Anwendungsprotokolle │
│ http · https · smtp · imap · ssh · mqtt · dns · ... │
├─────────────────────────────────────────────────────────┤
│ Transport │
│ socket · tls · types │
├─────────────────────────────────────────────────────────┤
│ Syscalls │
│ syscalls (sys_socket, sys_connect, sys_send, ...) │
└─────────────────────────────────────────────────────────┘
Beim direkten Einsatz importiert man typischerweise nur die Protokoll-Unit — die Transport-Schicht wird automatisch als Abhängigkeit mitgezogen.
----
===== Transport-Schicht =====
==== std.net.socket ====
Die Basis aller Netzwerkkommunikation. Unterstützt TCP (verbindungsorientiert), UDP (verbindungslos), Unix-Domain-Sockets, Raw-Sockets (ICMP, ARP) sowie nicht-blockierende I/O mit ''poll()'' und ''select()''.
import std.net.socket;
// TCP-Server
var srv: Socket := SocketTCPListen("0.0.0.0", 8080, 10);
var client: Socket := SocketAccept(srv);
var buf: pchar := alloc(4096);
var n: int64 := SocketRead(client, buf, 4096);
SocketWrite(client, "HTTP/1.1 200 OK\r\n\r\nHello", 25);
SocketClose(client);
SocketClose(srv);
→ [[lyx_-_programmiersprache:units:net:socket|Vollständige Dokumentation: std.net.socket]]
==== std.net.tls ====
TLS/SSL-Verbindungsschicht über OpenSSL. Wrappet einen bestehenden TCP-Socket mit TLS-Handshake und transparenter Ver-/Entschlüsselung. Basis für ''std.net.https'', ''std.net.imap'' (IMAPS) und ''std.net.smtp'' (SMTPS).
→ [[lyx_-_programmiersprache:units:net:tls|Vollständige Dokumentation: std.net.tls]]
----
===== Protokoll-Units =====
==== std.net.dns ====
DNS-Client mit Unterstützung für alle gängigen Record-Typen (A, AAAA, MX, NS, CNAME, TXT, PTR, SOA, SRV, CAA, DNSKEY, DS). Direkte UDP-Abfrage an den Resolver, keine Abhängigkeit von systemd-resolved oder libc-Resolver.
import std.net.dns;
var ip: pchar := DNSResolveA("example.com");
var mx: pchar := DNSResolveMX("example.com");
PrintStr(ip);
→ [[lyx_-_programmiersprache:units:net:dns|Vollständige Dokumentation: std.net.dns]]
==== std.net.http / std.net.https ====
HTTP/1.1-Client für GET und POST-Anfragen. ''std.net.http'' kommuniziert unverschlüsselt (Port 80), ''std.net.https'' schaltet TLS davor (Port 443). Unterstützt Custom-Header, Request-Body und Chunked-Transfer-Encoding.
import std.net.https;
var resp: HTTPResponse := HTTPSGet("example.com", 443, "/api/data");
PrintStr(resp.body);
→ [[lyx_-_programmiersprache:units:net:http|std.net.http]] · [[lyx_-_programmiersprache:units:net:https|std.net.https]]
==== std.net.smtp ====
SMTP-Client für Mailversand. Unterstützt Plaintext (Port 25), STARTTLS (Port 587) und SMTPS (Port 465). Implementiert den vollständigen SMTP-Dialog: EHLO, AUTH, MAIL FROM, RCPT TO, DATA.
→ [[lyx_-_programmiersprache:units:net:smtp|Vollständige Dokumentation: std.net.smtp]]
==== std.net.imap ====
IMAP4rev1-Client für Postfachzugriff. Unterstützt SELECT, LIST, FETCH, SEARCH und tagged Response-Parsing. Ermöglicht das Abrufen, Lesen und Verwalten von E-Mails aus einem IMAP-Postfach.
→ [[lyx_-_programmiersprache:units:net:imap|Vollständige Dokumentation: std.net.imap]]
==== std.net.ssh ====
SSH-Client für Remote-Verbindungen und Befehlsausführung. Authentifizierung per Passwort oder Key, Remote-Befehl ausführen und Ausgabe als String zurückbekommen.
import std.net.ssh;
var sess: SSHSession := SSHSessionNew();
SSHConnect(sess, "192.168.1.10", 22);
SSHAuth(sess, "admin", "secret");
var output: pchar := SSHExecOutput(sess, "uptime");
PrintStr(output);
SSHDisconnect(sess);
→ [[lyx_-_programmiersprache:units:net:ssh|Vollständige Dokumentation: std.net.ssh]]
==== std.net.mqtt ====
MQTT 3.1.1-Client für IoT-Kommunikation. Verbindet mit einem MQTT-Broker, publiziert Nachrichten auf Topics und abonniert Topics. Unterstützt QoS-Level 0 (fire-and-forget), 1 (at-least-once) und 2 (exactly-once).
import std.net.mqtt;
var conn: MQTTConn := MQTTConnect("broker.example.com", 1883, "sensor-01");
MQTTPublish(conn, "sensors/temperature", "23.4", 4, 0);
MQTTDisconnect(conn);
→ [[lyx_-_programmiersprache:units:net:mqtt|Vollständige Dokumentation: std.net.mqtt]]
==== std.net.whois ====
WHOIS-Client für Domain- und IP-Informationsabfragen (RFC 3912). Routet automatisch zur zuständigen Registry (Verisign für .com, DENIC für .de, RIPE für europäische IPs etc.).
→ [[lyx_-_programmiersprache:units:net:whois|Vollständige Dokumentation: std.net.whois]]
==== Weitere Protokoll-Units ====
* ''[[lyx_-_programmiersprache:units:net:ntp|std.net.ntp]]'' — Zeitabfrage via NTP v3 (UDP Port 123)
* ''[[lyx_-_programmiersprache:units:net:quic|std.net.quic]]'' — QUIC-Transport (RFC 9000), Basis für HTTP/3
* ''[[lyx_-_programmiersprache:units:net:sip|std.net.sip]]'' — SIP-VoIP-Protokoll (RFC 3261)
* ''[[lyx_-_programmiersprache:units:net:telnet|std.net.telnet]]'' — Telnet für Legacy-Geräte und Netzwerk-Equipment
----
===== Verzeichnis & Management =====
==== std.net.ldap ====
LDAP-Client (RFC 4511) für Verzeichnisdienste wie Active Directory oder OpenLDAP. Unterstützt Bind (einfach und SASL), Search mit Filtern, Modify, Add, Delete und Compare-Operationen auf dem DN-basierten Verzeichnisbaum.
→ [[lyx_-_programmiersprache:units:net:ldap|Vollständige Dokumentation: std.net.ldap]]
==== std.net.bgp ====
BGP-4-Implementierung (RFC 4271) für AS-Routing. Implementiert die BGP Finite State Machine (IDLE → CONNECT → ACTIVE → OPEN SENT → OPEN CONFIRM → ESTABLISHED) und verarbeitet UPDATE-Messages mit NLRI und Path-Attributes.
→ [[lyx_-_programmiersprache:units:net:bgp|Vollständige Dokumentation: std.net.bgp]]
==== std.net.snmp ====
SNMP-Client v1/v2c für Netzwerkmanagement. Liest und setzt Geräteparameter über OID-Pfade (GET, SET, WALK). Kompatibel mit allen SNMP-fähigen Geräten (Router, Switches, Server-Hardware). Nutzt ''std.net.asn1'' für die BER-Kodierung der PDUs.
→ [[lyx_-_programmiersprache:units:net:snmp|Vollständige Dokumentation: std.net.snmp]]
----
===== Verwandte Units =====
* ''[[lyx_-_programmiersprache:units:db:mysql|std.db.mysql]]'' — MySQL-Datenbankzugriff
* ''[[lyx_-_programmiersprache:units:db:redis|std.db.redis]]'' — Redis-Datenbankzugriff
* ''[[lyx_-_programmiersprache:units:url|std.url]]'' — URL-Parsing für HTTP-Anfragen
* ''[[lyx_-_programmiersprache:units:crypto:aes|std.crypto.aes]]'' — AES-Verschlüsselung für eigene Protokolle
* ''[[lyx_-_programmiersprache:units:validate:iban|std.validate.iban]]'' — IBAN-Validierung für Zahlungs-APIs