Ich möchte einen Daemon schreiben, der auf einer großen Anzahl von AF_INET-SOCK_STREAM und AF_INET-SOCK_DGRAM Sockets für Netzwerk-Debugging-Zwecke verfügbar ist.Wie multipliziert man AF_INET-Sockets mit einem Daemon und erhält man die Informationen über den ursprünglichen Port in der Anwendung?
Um eine übermäßige Ressourcennutzung zu vermeiden, möchte ich vermeiden, eine große Anzahl von Ports auf der Anwendungsschicht zu öffnen, aber versuche die Verbindungen pro Socket-Typ auf unteren Schichten zu multiplexen. Die Kenntnis des ursprünglichen eingehenden Ports auf der Anwendungsschicht ist Voraussetzung.
Ich habe erfolgreich einen Daemon implementiert, der auf einem AF_INET SOCK_STREAM-Socket wartet, der von einer iptables-REDIRECT-Regel gemultiplext wird. Der ursprüngliche eingehende Port der Verbindung kann durch Aufrufen von getsockopt mit SO_ORIGINAL_DST abgerufen werden. Soweit ich weiß, funktioniert dies nicht mit AF_INET SOCK_DGRAM.
Ich habe auch erfolgreich einen Daemon implementiert, der auf einen AF_INET SOCK_DGRAM-Socket wartet, der durch eine iptables-TPROXY-Regel gemultiplext wird. Der ursprüngliche eingehende Port der Verbindung kann abgerufen werden, indem recvmsg() verwendet wird und die verfügbare Zusatznachricht mit Informationen über die Verbindung vor dem Multiplexen konsumiert wird. Soweit ich weiß, funktioniert das nicht mit AF_INET SOCK_STREAM.
Gibt es eine Transportschicht-agnostische Art des Multiplexens solcher Socket-Verbindungen und das Abrufen von Informationen über den ursprünglichen eingehenden Port? Möglicherweise sogar für Protokolle wie SCTP oder DCCP geeignet?
"Gibt es eine Transportschicht-agnostische Möglichkeit, solche Socket-Verbindungen zu multiplexen und Informationen über den ursprünglichen eingehenden Port abzurufen?" Das klingt eher nach einer Frage für Superuser als nach Stackoverflow. Dinge wie Iptables-Regeln sind in der Regel hier nicht möglich. – xaxxon
Sieht für SO angemessen aus, da es nicht so sehr um iptables geht, sondern um die Programmierung auf dem (Proxy-) Server, aber: etwas SOS-Verhalten zwischen SOCK_STREAM und SOCK_DGRAM ist etwas optimistisch, IMO. – ephemient