J'essaie de créer une application C# simple qui fait la redirection de port, et besoin de savoir comment utiliser l'option de socket IP_HDRINCL pour essayer de truquer l'extrémité de réception à penser que la connexion est vraiment à la source . Tous les exemples seraient grandement appréciés.C# Raw Sockets Port Forwarding
Répondre
sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
sock.Bind(new IPEndPoint(IPAddress.Parse("10.25.2.148"), 0));
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] trueBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
sock.IOControl(IOControlCode.ReceiveAll, trueBytes, outBytes);
sock.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
Le seul problème est que je suis en mesure de recevoir correctement les données d'une socket raw comme celui-ci, (y compris l'en-tête IP), mais pas l'envoyer.
IP_HDRINCL
de .NET type Socket prend en charge RAW, et il est SocketOptionName.HeaderIncluded
pour une utilisation avec Socket.SetSocketOption
.
Vous pouvez utiliser Reflector pour vérifier que l'implémentation .NET s'aligne sur les valeurs enum.
J'ai trouvé ce site, mais ne sais pas comment le code fonctionne: http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html
versions plus récentes de Windows limitent l'utilisation des sockets raw en raison de programmes malveillants fortement les abus.
Cité du MSDN
Sous Windows 7, Windows Vista et Windows XP avec Service Pack 2 (SP2), la capacité de envoyer du trafic sur des sockets premières a été limitée de plusieurs manières :
- Les données TCP ne peuvent pas être envoyées sur des sockets raw.
- Les datagrammes UDP avec une adresse source non valide ne peuvent pas être envoyés via des sockets raw. L'adresse de source IP de tout datagramme UDP sortant doit exister sur une interface réseau ou le datagramme est supprimé. Cette modification a été effectuée pour limiter la capacité du code malveillant à créer des attaques par déni de service distribuées et limiter la possibilité d'envoyer des paquets spoofés (paquets TCP/IP avec une adresse IP source falsifiée).
- Un appel à la fonction de rattachement avec un socket brut pour le protocole IPPROTO_TCP n'est pas autorisé. Remarque La fonction de liaison avec une prise brute est autorisée pour d'autres protocoles (IPPROTO_IP, IPPROTO_UDP ou IPPROTO_SCTP, par exemple.
Ces restrictions ci-dessus ne sont pas applicables à Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, ou aux versions du système d'exploitation antérieures à Windows XP avec SP2
- 1. International SMS Forwarding
- 2. C Sockets Commande Ping?
- 3. Combien de sockets peut-on créer à partir d'un port?
- 4. Manière standard d'utiliser un seul port pour plusieurs sockets?
- 5. Exclusion mutuelle et Sockets C
- 6. Décodeurs d'images RAW mono-compatibles
- 7. ioctl FIOREAD sur socket raw sous Linux
- 8. Raw Socket Receive Buffer
- 9. Problème avec les sockets en C#
- 10. Accélération des sockets Unix non bloquants (C++)
- 11. Extraction de l'adresse IP à partir des sockets C
- 12. Aide pour l'envoi/la réception de paquets UDP - C Sockets
- 13. Port réseau dédié en C#
- 14. PHP Sockets ou Python, Perl, Bash Sockets?
- 15. Implémenter Raw Ethernet dans Winsock
- 16. Sockets TCP avec Zend Framework
- 17. Comment trouver un port UDP disponible localement avec unix Sockets API
- 18. sockets sniffer
- 19. Sockets - envoyer et recevoir
- 20. PHP Networking Sockets
- 21. Port de descripteurs Symbian OS/C++?
- 22. Port de .NET C++ autonome à Mac
- 23. Comment créer des sockets en javascript
- 24. Raw POST de Ruby on Rails
- 25. RAW POST en utilisant cURL en PHP
- 26. RAW Données de l'image de ressource incorporée
- 27. sockets de streaming C#, comment séparer les messages?
- 28. Comment accéder au serveur C# sockets depuis telnet ou SSH?
- 29. Sockets in C#: Comment obtenir le flux de réponse?
- 30. Test d'un serveur multithreading basé sur des sockets C#
Laissez-moi vous faire gagner du temps Le code mentionné ici a des méthodes mal référencées et ne compile pas. :) –