version francaise english version

Hack zone

(Comparez hacker et cracker dans "The Jargon File")



J'ai travaillé sur les programmes suivants à l'époque où je portais, pour mon travail, une grosse application Unix vers Windows NT et Windows 95. Il s'agissait d'un système client/server avec très peu de code graphique (heureusement). Ca m'a donné l'occasion de me plonger dans les détails des différences d'API système entre Windows et Unix et cela m'a donné envie de porter d'autres applications Unix vers Windows.
Toutes ces applications sont gratuites (licenses GNU, BSD, voire pas de license) et sont fournies avec le source. N'hesitez pas à les modifier, les améliorer et faites moi part de vos suggestions, modifications, ...



* icmp_dev-0.1.2.zip - 20010922 - 13k

RFC 791 - RFC 792

Qu'est-ce que ICMP ?
ICMP est un protocole particulier qui bien que placé conceptuellement juste au-dessus de IP en fait partie intégrante. D'ailleurs IP l'utilise pour transporter des informations de maintenance et des messages d'erreur comme: destination injoignable (Host Unreachable), paramètre incorrect,... Pour avoir plus d'informations sur ICMP consultez la RFC 792. Lire la RFC 791 (protocole IP) vous sera également bénéfique.

A quoi sert icmp_dev ?
Le système n'est pas le seul à pouvoir émettre des paquets ICMP, vous pouvez aussi le faire dans vos programmes. Normalement ça se fait en ouvrant une socket RAW. Mais la Winsock ne supporte pas les sockets RAW alors en remplacement Microsoft, dans sa grande mansuétude, a créé "icmp.dll" qui fournit une API permettant aux programmes d'envoyer malgré tout des paquets ICMP. Bien sûr l'API n'est pas officielle et non documentée... sauf dans icmp_dev. icmp_dev fournit les librairies nécessaires pour Intel, Alpha, MIPS (R.I.P.) et PowerPC (R.I.P.)
Notez tout de même que les librairies et les header de icmp_dev semblent tout de même venir de Microsoft (il faut rendre â César ce qui est à César). Deuxième remarque, la Winsock dans ses versions 2.0 et supérieures supporte les sockets RAW. Il semble que la Winsock 2.0 soit à présent disponible sur NT 4.0 et Windows 98.

Qu'est-ce qu'on peut faire avec ICMP?
Typiquement des outils du type ping ou traceroute. En effet ping envoie des paquets ICMP Echo Request et attend en retour des paquets ICMP Echo Reply ou bien un autre type de paquet ICMP indiquant une erreur. Difficile donc d'écrire un outil ping sans paquets ICMP. Il y a aussi d'autres applications comme squid (excellent cache Web) qui se servent de ICMP pour déterminer les caractéristiques de leur environement et optimiser leur fonctionnement.

* ping_src-0.1.4.zip - 20010922 - 24k
* ping_win32_i386-0.1.4.zip - 20010922 - 33k

Readme - Man page

Ce ping est un bon exemple d'utilisation de la librairie icmp_dev ci-dessus mais c'est beaucoup plus qu'un simple exemple.

  • Tout d'abord il se conforme à l'interface de l'outil ping de Linux ce qui veut dire qu'il supporte le jeux d'options du premier ping introduit sur BSD. Vous retrouverez donc de nombreuses options absentes du ping Microsoft. Ces options permettent par exemple de maintenir une connection intermittante (ex. par modem) ouverte en envoyant un paquet ICMP toutes les deux minutes. Pour cela la commande "ping -i 120 remote.host" suffit.
  • Ensuite, il fournit des mesures de meilleure qualité que le ping Microsoft. La précision de mesure du RTT est en effet de quelques microsecondes et non d'une milliseconde. Les statistiques aussi sont plus complètes.
  • Vous pourrez aussi vous en servir comme d'un traceroute grâce à l'option "-t" et même collecter au passage des statistiques complètes sur les RTT pour chaque hôte.
  • Enfin je suis sûr que vous trouverez de nombreux autres usages à ce ping. Comme d'habitude ping_src contient les sources et ping_win32_i386 la doc et l'éxécutable pour Intel.

Si vous voulez compiler ping n'oubliez pas de prendre icmp_dev.

* bing_src-1.0.4.tar.gz - 19970603 - 26k
* bing_src-1.1.3.tar.gz - 19970603 - 38k
* bing_win32_i386-1.1.3.zip - 19970603 - 49k

Readme First - Readme - Man page

Qu'est-ce que bing ?
bing est une application ecrite par Pierre Beyssac qui mesure la bande passante intrinsèque d'un lien distant du réseau. Bon, je précise un peu: "distant" ça veut dire que vous pouvez mesurer la bande passante d'un lien qui n'est pas directement connecté à votre ordinateur, par exemple un lien entre votre fournisseur d'accès et le reste d'Internet. "bande passante intrinsèque" ça veut dire que ce n'est pas la bande passante qui reste de disponible une fois que tous les autres utilisateurs se sont servis mais bien la bande passante nominale du lien. Donc même si un lien est saturé et que vous n'arrivez pas à en tirer plus de 1Ko/s bing peut vous dire si c'est un lien à 128Kbps, 256Kbps ou plus. N'espérez pas non plus des miracles. Vous n'arriverez pas a mesurer la bande passante d'un ethernet à l'autre bout de l'internet à partir de votre modem à une heure de pleine saturation.

Comment marche bing ?
bing fonctionne grâce à... ICMP bien sûr ! bing envoie des paquets Echo Request de différentes tailles et analyse les différences de RTT qui en résultent. Bien sûr les RTT varient beaucoup alors il faut faire plusieurs essais, mesurer les RTT très précisement et puis prendre la valeur minimum pour chaque taille de paquet pour l'hôte source et l'hôte destination. Pour plus d'informations sur bing, consultez le fichier Readme.

Quel fichier dois-je prendre ?
Il y a actuellement deux packages pour le source. La version 1.0.4 est la dernière version stable officielle développée par Pierre Beyssac mais elle ne marche que sous Unix. La version 1.1.3 est une version de développement qui en dérive et que j'ai portée sur les plateformes Win32. Bien qu'étant en développement elle est suffisamment stable pour être utilisée à la place de la 1.0.4. Pour les utilisateurs de l'ancienne 1.1.2 sous Win32, je vous conseille d'effectuer l'upgrade car j'ai grandement amélioré la précision de la mesure des RTT.

* bing_src-1.3.5.tar.gz - 19991025 - 79k

Bing 1.3 se veut une réimplémentation à partir de zéro de bing mais pour l'instant c'est du code en chantier et vous aurez de la chance s'il compile. Le problème c'est qu'étant sans cesse distrait par d'autres projets bing 1.3 n'avance pas vite. Néanmoins vous êtes les bienvenus si vous voulez vous lancer dedans.

Pourquoi réimplémenter bing à partir de zéro ?
J'espère en partant de zéro arriver à l'architecturer de façon à lui ajouter des fonctionnalités qui me semblent difficiles à introduire dans la version originale. Ces fonctionnalités sont de plusieurs types:

  • Tout d'abord au lieu d'utiliser deux tailles de paquets bing 1.3 utilise plusieurs tailles de paquets et effectue une régression linéaire (RTT,taille). Cela devrait permettre, via le taux de corrélation, de déterminer quand l'on a mesuré suffisament de RTTs pour connaitre la bande passante avec suffisament de précision. Réciproquement, cela permet d'identifier les machines pour lesquelles on ne connait pas bien le RTT, et donc d'envoyer les prochains paquets en priorité vers ces machines.
  • Le second but est d'introduire de nouvelles techniques de mesure des RTTs. Certains routeurs bloquent ICMP mais il devrait être possible de mesurer le RTT en utilisant le port ECHO par exemple. Une autre option très intéressante consiste à envoyer des paquets qui génèrent une réponse de taille fixe.
  • En combinant deux méthodes différentes de calcul des RTTs, une qui élicite des paquets de retour de taille fixe et l'autre qui élicite des paquets de retour de taille variable, il est possible de mesurer indépendamment le débit montant et le débit descendant d'un lien. L'intérêt ? On trouve de plus en plus de liens dont le débit est assymétrique: modems X2/56K/V90, certaines variantes de DSL, certains modems cable,... Le bing "classique" est incapable de mesurer le débit de ces liens.
  • Un des autres buts est de permettre la mesure de la bande passante de chacun des liens qui relient une machine à une autre. L'intérêt de faire ces mesures en une fois plutôt que d'invoquer bing plusieurs fois est que l'on peut ainsi économiser le nombre de paquets utilisés et donc normalement aussi obtenir le résultat plus rapidement.
  • Un des derniers buts, mais il est important, est d'obtenir une architecture extensible et cela à plusieurs niveaux: scheduling des mesures, méthodes utilisées pour calculer les RTTs, interface utilisateur textuelle, graphique,... Par exemple il est clair que certains algorithmes de scheduling des mesures fourniront leurs résultats dans le désordre (et non suivant la séquence host1, host2, host3,...). Pour fournir leurs résultats au fur et à mesure à l'utilisateur, ces algorithmes auront besoin soit d'une interface graphique soit d'une interface texte basée sur curses.

* su_src-0.1.0.zip - 19970603 - 3k
* su_win32_i386-0.1.0.zip - 19970603 - 15k

su mimique le su Unix. Il est destiné aux utilisateurs de Windows NT qui veulent pouvoir démarrer un nouveau shell ou une application sous une autre identité.
Malheureusement NT n'étant pas multi-utilisateur, su est loin de fonctionner aussi bien que sous Unix. Vous pourrez démarrer des applications console ou graphiques (gare aux bugs NT), mais les variables d'environement du nouvel utilisateur ne seront pas positionnées, vous n'aurez pas accès à sa portion du registry (HKEY_CURRENT_USER pointe toujours vers l'utilisateur initial), les filesystems montés sont toujours ceux de l'utilisateur original et vous devrez partager...

fgouget@free.fr Cette page est hébergée gratuitement par Free.fr