Bonjour à tous !
Je fais actuellement un peu de programmation réseau ; pour être plus précis, j'essaie de développer une petite pile TCP/IP pour le fun (la couche liaison de données est simulée par libnet pour envoyer des paquets et libpcap pour en capturer, ce qui est plus pratique que les sockets raw, je trouve).
J'en suis pour le moment au commencement de TCP et entre autres, j'ai commencé à écrire une fonction qui ouvre "activement" une connexion, c'est-à-dire qui envoie un paquet SYN au serveur et attend un paquet SYN-ACK avant d'envoyer un ACK.
Pour tester, j'ai envoyer un paquet SYN à l'adresse 173.194.34.56 (qui correspond à google.com) sur le port 80 (HTTP). Je reçois en réponse un SYN-ACK (ça, ça va) mais tout de suite après... je m'aperçois que ma machine a envoyé un paquet RST à 173.194.34.56 sur le port 80. Si la connexion est systématiquement réinitialisée aussitôt que mon programme tente de l'établir, je risque d'avoir du mal à poursuivre les tests. J'ai pensé que c'est le système d'exploitation qui a pris l'initiative de réinitialiser la connexion. Si c'est le cas, y a-t-il un moyen de l'en empêcher ? Sinon, d'où pourrait venir mon problème ?
Merci d'avance pour votre aide.
[Programmation réseau] Envoi d'une requête RST systématique
Re: [Programmation réseau] Envoi d'une requête RST systémati
Bon, si ça peut aider des gens après moi, je crois avoir trouvé la réponse à ma question (partiellement, du moins). En réalité, il est tout à fait normal que le noyau tente de réinitialiser la connexion (au moyen d'un paquet RST) dès qu'il reçoit un paquet inattendu. Un segment TCP inattendu peut en effet être le signe d'une précédente connexion mal fermée (voire d'une injection délibérée de paquets à des fins malveillantes ?). Sinon, j'ignore s'il existe un moyen simple de désactiver ce comportement autrement qu'en touchant au code source du noyau. Quand bien même ce serait possible, je crois désormais que le développement d'une pile TCP suppose de travailler sur un système qui ne possède pas de pile TCP afin de désamorcer tout conflit.