Forum Programmation.c++ "desactiver" TCP dans linux

Posté par  .
Étiquettes : aucune
0
1
juin
2006
Bonjour forum!

Une question assez bizare m'amène à toi.
Je voulais savoir s'il était possible de desactivé la pile TCP dans linux ? tout en gardant IP actif.

Je sais, c'est zarbe, je suis pas cousin avec terminator et c'est bel et bien une vrai question :)

L'explication est assez simple, j'ai comme travail en ce moment de recoder une pile TCP (Elle n'a pas pour but de remplacer celle existante (suis loin d'être suffisamment bon pour ca)) et celle du noyau marche sur mes plates bandes.

J'ai déjà eu comme réponses sur irc :
- Je sais pas comment, mais c'est forcémment faisable car linux == logiciel libre. (#linux-fr@freenode)
- Non. Mais le hurd sait le faire. (un ami qui code pour le hurd :))

Donc voilà où j'en suis. Sachant que si vous avez des idées, ce serais bien que ce soit faisable "relativement" facilement. Mon temps étant déjà pas mal pris par cette pile pour pas le passé a bidouiller mon OS.

Merci d'avance à toutes les bonnes âmes.
  • # TWH raw socket

    Posté par  . Évalué à 1.

    Re.

    Bon, pour faire plus simple, mon but est pour l'instant d'etablir un three way handshake en raw socket.
    J'envoie bien le SYN, je lis bien le SYN/ACK et *j'essaye* d'envoyé le ACK, mais monsieur LINUX envoie un RST avant.
    Existe-t-il un moyen de dire à l'OS que c'est a moi d'envoyé le ACK ? et de gerer cette connexion en général.
  • # Kernel TCPLess

    Posté par  (site web personnel) . Évalué à 1.

    Il te suffit de compiler un noyau sans TCP ... Je crois que c possible, par contre, ca implique plein de chose...
  • # redirection iptables

    Posté par  . Évalué à 1.

    Avec des regles iptables spécifiant comme target QUEUE ou NFQUEUE, il doit -etre possible de rediriger tous les paquets reçus en userspace. Comment on les récupère exactement, je ne sais pas, lire page de man de iptables, et chercher un module "ip_queue".

    Voir aussi les page de man de raw(7) (ou packet(7) qui semble plus vieux)


    Ensuite pour en emettre, il suffit de les envoyer sur une socket de type "RAW"
  • # coder le LISTEN

    Posté par  . Évalué à 1.

    J'ai trouver une autre solution qui m'évitera de toucher a linux.

    Suffit de coder la partie LISTEN (open passif) de ma pile, mais :
    - ca fait chier parceque j'aurais voulu valider ma partie open en actif (TWH) avec une pile qui marche bien (celle de l'OS)
    - ca fait chier parceque plus compliquer à debugger (comment savoir avec tcpdump qu'un paquet viens de ma pile et pas de celle du noyau ?)

    Bref, j'vais essayer d'avancer comme ça.
    Merci pour vos idées et vivement que le hurd soit :)
    • [^] # Re: coder le LISTEN

      Posté par  . Évalué à 1.

      bon ben nan ...
      même problème !
      J'envoie le SYN et LINUX me repond par un RST avant même que j'puisse envoyé le SYN/ACK :(

      voilà des logs tcpdump pour ceux que ça peus interesser :


      sylv@bart:~/arbeit/projet_TCP/src$ sudo tcpdump -i lo
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
      14:32:25.226271 IP localhost.localdomain.1212 > localhost.localdomain.4242: S 123456:123456(0) win 32767
      14:32:25.227037 IP localhost.localdomain.4242 > localhost.localdomain.1212: R 0:0(0) ack 123457 win 0
      14:32:25.228090 IP localhost.localdomain.4242 > localhost.localdomain.0: S 654321:654321(0) ack 123457 win 32767
      14:32:25.228116 IP localhost.localdomain.0 > localhost.localdomain.4242: R 123457:123457(0) win 0
      • [^] # Re: coder le LISTEN

        Posté par  (site web personnel) . Évalué à 1.

        Euh alors amha si tu veut faire de l'experimentation de ce type n'utilise surtout pas l'interface virtuelle de loopback. installe plutot une carte ethernet dédiée à ces expérimentations
        • [^] # Re: coder le LISTEN

          Posté par  . Évalué à 1.

          pourquoi pas le loopback ?

          Et au passage, j'ai trouver une solution ! merci a dek\ de #gcu@freenode.


          iptables -A OUTPUT -o lo -p tcp --dport 4242 --tcp-flags ALL RST -j DROP
          iptables -A OUTPUT -o lo -p tcp --sport 4242 --tcp-flags ALL RST,ACK -j DROP


          ==>


          16:32:13.968256 IP localhost.localdomain.1212 > localhost.localdomain.4242: S 123456:123456(0) win 32767
          16:32:13.968803 IP localhost.localdomain.4242 > localhost.localdomain.1212: S 764571604:764571604(0) ack 123457 win 32767 <mss 16396>
          16:32:13.971633 IP localhost.localdomain.1212 > localhost.localdomain.4242: . ack 1 win 32767


          \o/

          Jusqu'ici, cette solution fonctionne. Ce qui veus dire qu'apparemment, netfilter drop les paquets du noyau et laisse bien tranquille les miens en userland, même en rawsocket \o/ :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.