Le moyen le plus efficace de manipuler les numéros ISN dans les en-têtes TCP

J’essaie actuellement d’écrire un programme capable de créer une connexion TCP stable et d’avoir un contrôle complet sur les numéros ISN. J’écris en C et je suis à un point où mes connaissances très limitées ont atteint leurs limites et je me demandais s’il y avait une meilleure façon de le faire.

Ce que j’ai essayé, c’est de construire les en-têtes manuellement, en utilisant des sockets brutes pour envoyer et recevoir les paquets sans interférence du kernel, ce qui constitue un défi.

Donc, quelle que soit la langue, quel est, à votre avis, le moyen le plus efficace et le plus simple de manipuler l’ISN?

Eh bien, ISN est généré de manière aléatoire pour empêcher une attaque par prédiction ISN ( http://www.thegeekstuff.com/2012/01/tcp-sequence-number-attacks/ ).

La stack réseau Linux, utilisez la fonction tcp_v4_init_sequence pour générer l’ISN ( http://lxr.free-electrons.com/source/net/ipv4/tcp_ipv4.c#L101 ), cette fonction appelle la fonction secure_tcp_sequence_number ( http: // lxr .free-electrons.com / source / net / core / secure_seq.c # L106 ). Jetez un coup d’oeil à cette fonction et essayez de la cloner pour pouvoir l’utiliser avec votre code depuis l’espace utilisateur.

Si vous avez suffisamment de temps, consultez la section 3 de la RFC 6528 ( http://www.rfc-editor.org/rfc/rfc6528.txt ), elle décrit un algorithme permettant de générer un ISN:

 ISN = M + F(localip, localport, remoteip, remoteport, secretkey) 

Et essayez de le mettre en œuvre, si vous voulez 🙂