2010-12-02 36 views
2

J'ai un système de travail qui reçoit des données via des paquets UDP envoyés à un IP fixe: Port et je veux utiliser un programme (une sorte de proxy?) Pour envoyer une copie de ces paquets à une nouvelle IP: Port (ou une liste de IP: Ports, mais tous dans le même LAN que le programme).Transférer des paquets UDP vers plusieurs adresses IP en maintenant l'adresse source d'origine

Pas aussi simple que cela semble, car j'ai besoin que les paquets copiés aient la même adresse IP source que les originaux. Dans mes recherches, j'ai trouvé que PCap.Net (wrapper WinPCap .NET) était utile, car il permet de créer un paquet de A à Z. Il supporte la modification de tous les champs d'adresse. J'ai réussi à capturer les paquets et à les construire. Mais quelque peu ils n'arrivent pas à la destination désirée (!?). Dois-je utiliser un autre PacketCommunicator pour les recevoir et les envoyer?

Quoi qu'il en soit, la question n'est pas entièrement liée à PCap.Net, mais de connaître d'autres façons d'atteindre mon objectif. Via une application gratuite? application commerciale? Échantillon open source? Toute autre bibliothèque à utiliser?

Mes systèmes sont basés sur Windows (pas de Linux disponible ici). Et j'ai une expérience C# (.NET) (je ne peux pas utiliser une bibliothèque C++, si les liaisons NET ne sont pas disponibles).

Un grand merci pour votre aide

Répondre

0

vous devriez penser à réseau en premier. cela peut ne pas être possible si le trafic doit passer par le routeur. le paquet d'origine est venu par:

source-> router-> votre serveur

si vous essayez de l'envoyer en arrière comme si:

votre server-> router-> un autre ordinateur

alors le routeur peut même pas accepter ce trafic, car il ne peut pas provenir de votre ordinateur, selon la configuration des routeurs. Il suffit de penser à cela - je pourrais envoyer du trafic comme n'importe qui, si cela était autorisé.

cependant, dans LAN est très faisable (sauf si vous avez une sorte de protection de l'usurpation d'identité MAC sur vos commutateurs)

+0

Ce "proxy" fonctionnera sur un LAN, aucun routeur impliqué. Les paquets source proviennent d'Internet et une fois dans le réseau local, le programme proxy envoie le même paquet (en conservant l'adresse source IP publique) à deux adresses IP: Ports. – Opera362

+0

J'ai modifié ma question originale avec la remarque LAN. Merci :-) – Opera362

+0

vous devrez vous assurer que ce trafic ne passe pas par le routeur mais est envoyé directement sur le réseau local depuis votre ordinateur. Je ne suis pas sûr que c'est le comportement par défaut d'UDP sur LAN. Cela est possible à appliquer en utilisant des sockets raw et/ou pcap. – Artemiy

0

Ce que vous essayez de faire est appelé « UDP Forwarding ». Vous recevez un paquet UDP, puis le transmettre à un autre hôte

Here is an application that does that (seems to be free)

+0

Uhm ... Je vais essayer ce programme, mais il semble que l'adresse source des paquets sera modifiée. J'ai besoin que les paquets transférés conservent l'adresse source d'origine. Les systèmes d'origine et nouveaux doivent répondre à l'adresse IP source (ils ont un mappage IP de nœud, et la traduction d'adresse ne fonctionnera pas). – Opera362

+0

Je pense que j'ai besoin d'UPD listener + "UDP spoofing" pour retransmettre les paquets ... Je continue de googler pour info ... – Opera362

0

en plus de garder l'adresse IP source et changer l'adresse IP de destination vous devez échanger les adresses source et destination MAC.

si vous envoyez un paquet brut à votre routeur/commutateur/modem, mais l'adresse mac n'est pas une adresse. il sera supprimé. Fondamentalement, vous devez réviser chaque couche réseau que vous traitez et gérer correctement l'adressage. Désolé pour mon orthographe

2

Je sais que c'est une vieille question, mais la réponse:

http://code.google.com/p/samplicator/

Ecoutes pour UDP et le transmet à un ou plusieurs autres adresses IP, le cas échéant l'usurpation d'identité (l'original) adresse IP source.

Utilisé pour l'acheminement des paquets netflow/sflow/syslog etc.

+0

Merci ça me vaut vraiment 1 + 1 –

0

Si vous essayez d'usurper l'adresse de destination pour faire des choses comme le relais netflow, vous serez souvent bloqué par les routeurs anti-spoofing entre les deux. J'ai rencontré ceci avec AWS par exemple.

La solution est de prendre le paquet udp RAW, puis de l'envoyer à votre nouvelle destination dans un autre paquet udp. Quand il atteint la destination, vous devez "déballer" le paquet, puis l'envoyer à lui-même sur l'interface de bouclage (essentiellement "déballer").

Vous pouvez le faire avec du code python avec le module sockets.