====== 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