Frage

Wie kann ich einen Client erstellen UDP-Sockets in C ++, so dass es auf einem Port zu hören, die von einer anderen Anwendung gehört wird? Mit anderen Worten: Wie kann ich mich bewerben Port Multiplexen in C ++?

War es hilfreich?

Lösung

  

Ich möchte hören auf nur einen Port

Sie können das tun mit einem Sniffer. Ignorieren Sie die Pakete von verschiedenen Ports.

  

Ich könnte es brauchen, um zu verhindern heraus einige bestimmte Pakete zu senden, weil mein Programm es anstelle der ursprünglichen Anmeldung senden

Okay, hier empfehle ich Ihnen zu verwerfen Sniffer, und verwenden Sie ein MITM Technik.

Sie müssen auf einer PREROUTING Firewall-Regel verlassen, um zu Umleitung die Pakete zu einer " Proxy " -Anwendung. Unter der Annahme, UDP, Linux, iptables, und die " Proxy " läuft auf dem gleichen Host, hier ist es, was die " Proxy " eigentlich tun muss:

1 Fügen Sie die Firewall-Regel Umleitung die Pakete (tun Sie es manuell, wenn Sie bevorzugen).

iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
    -j REDIRECT --to-port <newport>

2. Bind und hört auf <newport>.

3. Relais der gesamten Verkehr zwischen den zwei Endpunkten (Client und ursprüngliches Ziel). Wenn Sie mit dem " Proxy " auf einem anderen Host, verwenden Sie getsockopt mit SO_ORIGINAL_DST der ursprünglichen Zieladresse abgerufen werden.

Es könnte heikel klingen, aber ... ja, das ist, weil es ein bisschen schwierig ist :-) Fragen Sie Ihre Firewall-Dokumentation, wenn meine Annahme divergiert.

Andere Tipps

Dies ist Paket nur Sniffing wie tcpdump oder snoop, öffnen Sie ein Raw-Socket und zieht alles aus dem Draht und Filter, wie Sie benötigen. Sie wollen wahrscheinlich libpcap verwenden, um die Dinge ein wenig leichter zu machen.

Ohne Administrator oder Superuser-Privilegien müssen Sie die Zielanwendung zu offenen Ports mit SO_REUSEADDR und SO_REUSEPORT als geeignet für die Plattform. Der Nachteil ist nur Broadcast- und Multicast-Pakete empfangen kann, Unicast-Pakete werden an dem ersten offenen Buchse geliefert.

Dies ist nicht Multiplexen -. Dieser Begriff ist reserviert für den Umgang mit E / A auf mehreren Kanälen im gleichen Prozess und wo Dinge wie select(2) und poll(2) sind am nützlichsten

Was Sie fordern ist Multicast . Hier ist das grundlegende Beispiel.

Beachten Sie, dass IP einen speziellen Bereich von Adressen (auch bekannt als Gruppen) zum Sammels behält. Diese erhalten auf spezielle Ethernet-Adressen abgebildet. Der Zuhörer (n) würde haben, beitreten die Multicast-Gruppe, während Absender muss nicht, sendet er nur wie gewohnt.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top