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 |
|---|---|---|
| std.net.socket | Transport | TCP, UDP, Unix, Raw-Sockets, ICMP, ARP, Poll/Select |
| std.net.types | Transport | Socket-Adresstypen und IP-Hilfsfunktionen |
| std.net.tls | Transport | TLS/SSL-Verbindungen (via OpenSSL) |
| std.net.syscalls | Transport | Portable POSIX-Socket-Syscall-Wrapper (unterste Schicht) |
| std.net.dns | Protokolle | DNS-Auflösung (A, AAAA, MX, NS, TXT, SOA, SRV, CAA, DNSKEY, DS, PTR) |
| std.net.http | Protokolle | HTTP/1.1-Client: GET, POST, Header, Chunked-Transfer |
| std.net.https | Protokolle | HTTPS-Client (TLS-gesichert) |
| std.net.smtp | Protokolle | SMTP-Mailversand (Ports 25/587/465) |
| std.net.imap | Protokolle | IMAP4rev1-Postfachzugriff: SELECT, LIST, FETCH |
| std.net.ssh | Protokolle | SSH: Auth, Remote-Befehlsausführung, Output-Capture |
| std.net.mqtt | Protokolle | MQTT 3.1.1: Publish, Subscribe, QoS 0/1/2 (IoT) |
| std.net.ntp | Protokolle | NTP v3: Zeitabfrage via UDP Port 123 |
| std.net.quic | Protokolle | QUIC (RFC 9000): UDP-basiert, TLS 1.3 integriert |
| std.net.sip | Protokolle | SIP (RFC 3261): REGISTER, INVITE, OPTIONS (VoIP) |
| std.net.telnet | Protokolle | Telnet (RFC 854): Option-Negotiation, Legacy-Geräte |
| std.net.whois | Protokolle | WHOIS (RFC 3912): Auto-Routing zu Registry-Servern |
| std.net.ldap | Verzeichnis & Routing | LDAP (RFC 4511): Bind, Search, Modify, SASL-Auth |
| std.net.bgp | Verzeichnis & Routing | BGP-4 (RFC 4271): AS-Routing, UPDATE-Messages |
| std.net.snmp | Management | SNMPv1/v2c: OID-basierter Geräteparameter-Zugriff |
| std.net.asn1 | Management | ASN.1/BER-Encoding (interne Hilfsbibliothek für SNMP) |
| 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);
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).
→ 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);
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);
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.
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.
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);
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);
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.).
Weitere Protokoll-Units
std.net.ntp— Zeitabfrage via NTP v3 (UDP Port 123)std.net.quic— QUIC-Transport (RFC 9000), Basis für HTTP/3std.net.sip— SIP-VoIP-Protokoll (RFC 3261)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.
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.
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.
→ Vollständige Dokumentation: std.net.snmp
Verwandte Units
std.db.mysql— MySQL-Datenbankzugriffstd.db.redis— Redis-Datenbankzugriffstd.url— URL-Parsing für HTTP-Anfragenstd.crypto.aes— AES-Verschlüsselung für eigene Protokollestd.validate.iban— IBAN-Validierung für Zahlungs-APIs
