{"id":37,"date":"2009-04-29T15:11:21","date_gmt":"2009-04-29T13:11:21","guid":{"rendered":"http:\/\/46.105.150.90\/tstnunix\/?p=37"},"modified":"2016-08-21T19:38:14","modified_gmt":"2016-08-21T17:38:14","slug":"netcat-connexions-reseaux-en-shell","status":"publish","type":"post","link":"https:\/\/nunix.fr\/?p=37","title":{"rendered":"Netcat : connexions r\u00e9seaux en shell !"},"content":{"rendered":"<p>\u00a0Netcat est un outil en ligne de commande permettant de cr\u00e9er des connections r\u00e9seaux tcp ou udp.<\/p>\n<p>Le nom \u00ab\u00a0<font color=\"#ff6600\"><em>netcat<\/em><\/font>\u00a0\u00bb s&rsquo;inspire de la commande cat qui permet de lire un fichier. Nc, pour les intimes, va donc permettre de lire des sockets, c&rsquo;est \u00e0 dire une connexion r\u00e9seau entre 2 ordinateurs.<\/p>\n<p>Nous allons commencer par les fonctions de base : \u00e9tablissement d&rsquo;une connexion r\u00e9seau en tant que client ou serveur, puis nous verrons des fonctions plus particuli\u00e8res comme effectuer un scan de ports, dumper des connexions r\u00e9seaux, &#8230;etc<br \/> <!--more--> <br \/>Il est bon de se rappeler qu&rsquo;\u00e0 tout moment, un \u00ab\u00a0<font color=\"#ff6600\"><em>nc -h<\/em><\/font>\u00a0\u00bb nous rappel bri\u00e8vement les options et leur fonctions :<br \/><em>[v1.10-38]<br \/>connect to somewhere:\u00a0\u00a0 \u00a0nc [-options] hostname port[s] [ports] &#8230; <br \/>listen for inbound:\u00a0\u00a0 \u00a0nc -l -p port [-options] [hostname] [port]<br \/>options:<br \/>\u00a0\u00a0 \u00a0-c shell commands\u00a0\u00a0 \u00a0as `-e&rsquo;; use \/bin\/sh to exec [dangerous!!]<br \/>\u00a0\u00a0 \u00a0-e filename\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 program to exec after connect [dangerous!!]<br \/>\u00a0\u00a0 \u00a0-b\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 allow broadcasts<br \/>\u00a0\u00a0 \u00a0-g gateway\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 source-routing hop point[s], up to 8<br \/>\u00a0\u00a0 \u00a0-G num\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 source-routing pointer: 4, 8, 12, &#8230;<br \/>\u00a0\u00a0 \u00a0-h\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this cruft<br \/>\u00a0\u00a0 \u00a0-i secs\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 delay interval for lines sent, ports scanned<br \/>\u00a0 \u00a0 -k\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set keepalive option on socket<br \/>\u00a0\u00a0 \u00a0-l\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 listen mode, for inbound connects<br \/>\u00a0\u00a0 \u00a0-n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0\u00a0 numeric-only IP addresses, no DNS<br \/>\u00a0\u00a0 \u00a0-o file\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 hex dump of traffic<br \/>\u00a0\u00a0 \u00a0-p port\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0 local port number<br \/>\u00a0\u00a0 \u00a0-r\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0\u00a0 \u00a0 randomize local and remote ports<br \/>\u00a0\u00a0 \u00a0-q secs\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 quit after EOF on stdin and delay of secs<br \/>\u00a0\u00a0 \u00a0-s addr\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 local source address<br \/>\u00a0\u00a0 \u00a0-T tos\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0 set Type Of Service<br \/>\u00a0\u00a0 \u00a0-t\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 answer TELNET negotiation<br \/>\u00a0\u00a0 \u00a0-u\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0 UDP mode<br \/>\u00a0\u00a0 \u00a0-v\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0 verbose [use twice to be more verbose]<br \/>\u00a0\u00a0 \u00a0-w secs\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0 timeout for connects and final net reads<br \/>\u00a0\u00a0 \u00a0-z\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0 zero-I\/O mode [used for scanning]<br \/>port numbers can be individual or ranges: lo-hi [inclusive];<br \/>hyphens in port names must be backslash escaped (e.g. &lsquo;ftp-data&rsquo;).<\/em><\/p>\n<blockquote>\n<h3><font color=\"#993366\"><strong>1\u00b0) Client\/serveur simple<\/strong><\/font><\/h3>\n<\/blockquote>\n<p><strong>Principe d&rsquo;utilisation:<\/strong><br \/>Netcat permet d&rsquo;\u00e9tablir des connexions tcp ou udp depuis un script shell. Les \u00e9changes se font par stdin et stdout. <br \/>Nc peut \u00e9tablir deux types de connexions : <br \/>-client (il se connecte \u00e0 un serveur),<br \/>-serveur (il se met en attente de connexions clientes).<\/p>\n<p>Utilisation de nc en mode serveur :<br \/><font color=\"#ff6600\">$ nc -l -p 1234 <\/font><br \/>permet de cr\u00e9er un serveur en attente de connexion sur le port 1234.<br \/>Les options sont faciles \u00e0 retenir :<br \/>-l :\u00a0 listen, \u00e0 l&rsquo;\u00e9coute de clients<br \/>-p : le port sur lequel le serveur s&rsquo;\u00e9tablit<br \/>(Attention : il faut \u00eatre root pour pouvoir \u00e9tablir un serveur sur les ports compris entre [1 et 1023])<\/p>\n<p>Utiliser Nc en mode client est tr\u00e8s simple :<br \/><font color=\"#ff6600\">$ nc -v localhost 1234<\/font><br \/>Ceci permet de se connecter sur le port 1234 en local. Il faut \u00e9videmment qu&rsquo;un serveur soit attente de connexion sur ce port. <br \/>Le mode verbeux (-v) permet d&rsquo;avoir des informations sur le d\u00e9roulement de la commande. Vous pouvez par exemple obtenir :<br \/>-\u00ab\u00a0<em>localhost [127.0.0.1] 1234: Connexion refus\u00e9e<\/em>\u00a0\u00bb si aucun serveur n&rsquo;\u00e9tait en attente de client sur le port 1234.<br \/>-\u00ab\u00a0<em>localhost [127.0.0.1] 1234 open<\/em>\u00a0\u00bb si la connexion s&rsquo;est bien pass\u00e9e.<\/p>\n<p><strong><br \/>exemple n\u00b01 : client\/serveur simple <\/strong><\/p>\n<p>Dans un permier shell, lancez un serveur :<br \/><font color=\"#ff6600\">$ nc -l -p 1234 -v<\/font><br \/>Dans un second, lancez un client :<br \/><font color=\"#ff6600\">$ nc -v localhost 1234<\/font><br \/>Voila, vous avez r\u00e9alis\u00e9 une connexion tcp entre les deux shell. Si vous tapez un message dans un des deux shell, il apparaitra dans l&rsquo;autre !<\/p>\n<div style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-36\" src=\"http:\/\/46.105.150.90\/tstnunix\/wp-content\/uploads\/2009\/04\/Linux-shell-netcat-image1.png\" border=\"0\" alt=\"screenshot\" width=\"379\" height=\"237\" srcset=\"https:\/\/nunix.fr\/wp-content\/uploads\/2009\/04\/Linux-shell-netcat-image1.png 657w, https:\/\/nunix.fr\/wp-content\/uploads\/2009\/04\/Linux-shell-netcat-image1-300x188.png 300w\" sizes=\"auto, (max-width: 379px) 85vw, 379px\" \/><\/div>\n<p>Simple non ?<\/p>\n<p>L&rsquo;utilitaire <strong><em>netstat<\/em><\/strong> permet d&rsquo;apprendre beaucoup sur les connexions r\u00e9seaux de son ordinateur :<br \/><font color=\"#ff6600\">$ netstat -t <\/font><br \/>affiche par exemple la liste des connexions tcp actives. On pourra alors visualiser la connexion qu&rsquo;on a ouverte gr\u00e2ce \u00e0 netcat :<br \/><em>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 localhost:1234\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 localhost:34994\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ESTABLISHED<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 localhost:34994\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 localhost:1234\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ESTABLISHED<\/em><br \/>On peut cependant aussi demander \u00e0 consulter la liste des serveurs tcp :<br \/><font color=\"#ff6600\">$ netstat -lt<\/font>\u00a0\u00a0\u00a0\u00a0\u00a0 (l pour listening  serveur)<br \/><em>Proto Recv-Q Send-Q Adresse locale\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Adresse distante\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Etat\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 *:4014\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 *:sunrpc\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 *:www\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 *:54484\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 *:ssh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<br \/>tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 localhost:ipp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN\u00a0\u00a0\u00a0 \u00a0<\/em><\/p>\n<p><strong>exemple n\u00b02 : Utiliser Netcat pour r\u00e9cup\u00e9rer le code source d&rsquo;une page web :<\/strong><\/p>\n<p>Nous allons voir i\u00e7i que netcat peut faire mieux que telnet&#8230;<br \/>Si nous voulons r\u00e9cup\u00e9rer le code source de la page d&rsquo;acceuil de Nunix, il suffit de se faire passer pour un navigateur internet : \u00e9tablir une connexion avec www.nunix.fr sur le port 80 et envoyer une requ\u00eate HTTP demandant la page d&rsquo;acceuil.<\/p>\n<p>Essayons avec telnet :<br \/><font color=\"#ff6600\">$ echo -e \u00ab\u00a0\u00a0\u00bbGET \/ HTTP\/1.0rnHost: www.nunix.frnn\u00a0\u00bb\u00a0 | telnet www.nunix.fr 80<\/font><br \/><em>Trying 74.125.39.106&#8230;<br \/>Connected to 74.125.39.106.<br \/>Escape character is &lsquo;^]&rsquo;.<br \/>Connection closed by foreign host.<\/em><\/p>\n<p>Telnet n&rsquo;attend pas la r\u00e9ponse de Nunix, et nous dit que le serveur distant a ferm\u00e9 la connexion&#8230;.<br \/>Pas tr\u00e8s concluant&#8230;<\/p>\n<p>Essayons maintenant avec netcat :<br \/><font color=\"#ff6600\">$ echo -e \u00ab\u00a0\u00a0\u00bbGET \/ HTTP\/1.0rnHost: www.nunix.frnn\u00a0\u00bb\u00a0 | nc -w 10 www.nunix.fr 80<\/font><br \/><em>HTTP\/1.1 200 OK<br \/>Date: Wed, 29 Apr 2009 16:33:48 GMT<br \/>Server: Apache\/2.2.9 (Ubuntu) PHP\/5.2.6-2ubuntu4.1 with Suhosin-Patch mod_ssl\/2.2.9 OpenSSL\/0.9.8g<br \/>X-Powered-By: PHP\/5.2.6-2ubuntu4.1<br \/>P3P: CP=\u00a0\u00bbNOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM\u00a0\u00bb<br \/>Expires: Mon, 01 Jan 2001 00:00:00 GMT<br \/>Last-Modified: Wed, 29 Apr 2009 16:33:49 GMT<br \/>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br \/>Pragma: no-cache<br \/>Vary: Accept-Encoding<br \/>Content-Type: text\/html; charset=utf-8<br \/>Set-Cookie: a03ae0785f896af464903dee08e9ef42=955ce2b01a7ff2e2e638682793dc5c02; path=\/<br \/>Set-Cookie: ja_purity_tpl=ja_purity; expires=Mon, 19-Apr-2010 16:33:49 GMT; path=\/<br \/>Via: 1.0 nunix.fr<br \/>Connection: close<\/em><\/p>\n<p><em>[&#8230;&#8230;Code source de la page d&rsquo;accueil&#8230;&#8230;]<\/em><\/p>\n<p>Netcat dipose de l&rsquo;option -w, qui permet de mettre en place un timeout.<br \/>Le timeout permet d&rsquo;attendre 10 secondes que le serveur r\u00e9ponde. <br \/>Par contre s&rsquo;il n&rsquo;a pas r\u00e9pondu au bout de ces 10 secondes, netcat coupe automatiquement la connection. <br \/>Dans notre cas, Nunix r\u00e9pond en moins de 10 secondes (pfiouu, heureusement&#8230;) puis coupe la connection.<\/p>\n<p><strong>exemple n\u00b03 : Transmission d&rsquo;un fichier<\/strong><\/p>\n<p>Netcat permet donc d&rsquo;\u00e9changer des donn\u00e9es, qu&rsquo;il lit sur son entr\u00e9e standard et \u00e9crit sur sa sortie standard.<\/p>\n<p>Avec les m\u00e9canismes de redirection du shell, il est donc tr\u00e8s simple d&rsquo;\u00e9changer des fichiers :<br \/>Le serveur envoit un fichier sur la socket :<br \/><font color=\"#ff6600\">$ cat ~\/.bashrc | nc -q 0 -l -p 1234<\/font><br \/>ou : <br \/><font color=\"#ff6600\">$ nc -q 0 -l -p 1234 < ~\/.bashrc<\/font><br \/>(Ici il a fallut rajouter l&rsquo;option -q 0 qui permet d&rsquo;arreter la transmission d\u00e8s que le serveur rencontre EOF sur son entr\u00e9e standard)<br \/>et le client le re\u00e7oit :<br \/><font color=\"#ff6600\">$ nc localhost 1234 > fichier_recu.txt<\/font><br \/>Vous pouvez v\u00e9rifier le contenu de fichier_recu.txt, c&rsquo;est identique !<\/p>\n<blockquote>\n<h3><font color=\"#993366\"><strong>2\u00b0) Scanner des ports avec netcat<\/strong><\/font><\/h3>\n<\/blockquote>\n<p>Nc peut \u00eatre utilis\u00e9 pour scanner des ports. Il suffit de le lancer en mode verbeux (-v) avec l&rsquo;option -z, et de lui indiquer un (ou plusieurs) intervals de port \u00e0 scanner. <br \/>Par exemple pour scanner du port 1 \u00e0 1024 :<br \/><font color=\"#ff6600\">$ nc -vz localhost 1-1024<\/font><br \/>Ce qui me donne :<br \/><em>localhost [127.0.0.1] 22 (ssh) open<br \/>localhost [127.0.0.1] 80 (www) open<br \/>localhost [127.0.0.1] 111 (sunrpc) open<br \/>localhost [127.0.0.1] 631 (ipp) open<\/em><br \/>Le mode verbeux (-v) indique \u00e0 netcat d&rsquo;afficher les ports ouverts. <br \/>On peut le lancer en mode tr\u00e8s verbeux (-vv) pour obtenir le d\u00e9tail de chaque port test\u00e9 : ouvert ou ferm\u00e9.<br \/>L&rsquo;option -z, elle, permet d&rsquo;indiquer \u00e0 netcat qu&rsquo;on s&rsquo;int\u00e9resse uniquement \u00e0 l&rsquo;\u00e9tat du port (ferm\u00e9 ou ouvert). Avec cette option, s&rsquo;il tombe sur un port ouvert il passe directement au suivant, sans s&rsquo;attarder. <br \/>Si on le lance sans cette option, nc s&rsquo;arr\u00eate d\u00e8s qu&rsquo;il a pu ouvrire une connexion, c&rsquo;est-\u00e0-dire sur le premier port ouvert qu&rsquo;il trouve.<\/p>\n<p>All\u00e9, encore deux petites options :<br \/><font color=\"#ff6600\">$ nc -v -r localhost 1-100 2000-4000<\/font><br \/>L&rsquo;option -r indique \u00e0 netcat de scanner les ports dans le d\u00e9sordre.\u00a0 (Certains syst\u00e8mes de d\u00e9tection de scan sont bas\u00e9s sur un scan cons\u00e9cutif des ports).<br \/>L&rsquo;option -i permet d&rsquo;inserer un delai pour le scannage de ports, ce qui permet d&rsquo;\u00eatre moins rep\u00e9rable.<\/p>\n<blockquote>\n<h3><font color=\"#993366\"><strong>3\u00b0) Une option int\u00e9ressante<\/strong><\/font><\/h3>\n<\/blockquote>\n<p>Netcat permet \u00e9galement de rediriger les entr\u00e9es et sorties d&rsquo;un prog vers une socket : c&rsquo;est l&rsquo;option -c.<br \/>On peut par exemple dire \u00e0 netcat d&rsquo;ex\u00e9cuter un shell lors de la connexion d&rsquo;un client :<br \/><font color=\"#ff6600\">$ nc -l -p 1234 -c \u00ab\u00a0\/bin\/bash\u00a0\u00bb<\/font><\/p>\n<p><font color=\"#ff6600\">$ nc localhost 1234<\/font><br \/><em>pwd<br \/>\/home\/apesle<br \/>echo $SHELL<br \/>\/bin\/bash<\/em><\/p>\n<p>(Vous pouvez remarquez que le prompt ne s&rsquo;affiche pas, et qu&rsquo;on perd les couleurs&#8230; si vous savez pourquoi&#8230;laissez un commentaire !)<\/p>\n<p>On dispose ainsi d&rsquo;un shell sur une simple connexion tcp\/ip. \u00c9videmment cette exemple est une<font color=\"#800000\"> trrrrr\u00e8s mauvaise id\u00e9e<\/font> au point de vue s\u00e9curit\u00e9, mais il est l\u00e0 pour expliquer le fonctionnement de l&rsquo;option.<br \/>\u00a0<br \/>Cette option permet donc de s&rsquo;affranchir de la programmation des sockets : il suffit de faire un prog qui manie stdin\/stdout. En plus le programme peut \u00eatre r\u00e9alis\u00e9 dans n&rsquo;importe quel language, C, C++, script shell, du moment qu&rsquo;il dispose de l&rsquo;entr\u00e9e et de la sortie standard.<\/p>\n<p>\u00a0<\/p>\n<blockquote>\n<h3><strong><font color=\"#993366\">4\u00b0) Netcat peut aussi utiliser l&rsquo;udp<\/font><\/strong><\/h3>\n<\/blockquote>\n<p>Pour le moment, toute les connections cr\u00e9es utilisaient le protocole TCP, mais netcat sait aussi utiliser les sockets UDP&#8230; et donc tout les exemples vu pr\u00e9c\u00e9demment peuvent s&rsquo;appliquer \u00e0 l&rsquo;udp avec l&rsquo;option -u&#8230; <\/p>\n<ul>\n<li>scann de port udp&#8230;<\/li>\n<li>\u00a0redirections de port en udp, &#8230;<\/li>\n<li>&#8230;.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote>\n<h3><strong><font color=\"#993366\">5\u00b0) Dumper des connexions r\u00e9seau avec netcat : <\/font><\/strong><\/h3>\n<\/blockquote>\n<p>Id\u00e9al pour d\u00e9buguer ses programmes, l&rsquo;option -o permet de faire un dump de tous les octets \u00e9chang\u00e9s par la socket :<\/p>\n<p><font color=\"#ff6600\">$ nc -l -p 8000<\/font><br \/><em>youhou<br \/>tagada<br \/>tsoin<\/em><\/p>\n<p><font color=\"#ff6600\">$ nc -o dump.txt localhost 8000<\/font><br \/><em>youhou<br \/>tagada<br \/>tsoin<\/em><br \/>[ctrl+C]<\/p>\n<p><font color=\"#ff6600\">$ cat dump.txt<\/font><br \/><em>Received 7 bytes from the socket<br \/>00000000\u00a0 79 6F 75 68\u00a0 6F 75 0A\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 youhou.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<br \/>Received 7 bytes from the socket<br \/>00000000\u00a0 74 61 67 61\u00a0 64 61 0A\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tagada.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<br \/>Sent 6 bytes to the socket<br \/>00000000\u00a0 74 73 6F 69\u00a0 6E 0A\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tsoin. <\/em><\/p>\n<p>Le sens de chaque \u00e9change est aussi consign\u00e9.<\/p>\n<blockquote>\n<h3><font color=\"#993366\"><strong>6\u00b0) Conclusion :<\/strong><\/font><\/h3>\n<\/blockquote>\n<p>Voila, c&rsquo;est la fin de cet article, j&rsquo;esp\u00e8re qu&rsquo;il vous \u00e0 plu et qu&rsquo;il vous sera utile.<br \/>Sachez cependant que netcat a encore quelques options suppl\u00e9mentaires que je n&rsquo;ai pas test\u00e9, comme la redirection de ports&#8230;<br \/>En tout cas, merci pour votre lecture et n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire si une erreur s&rsquo;est gliss\u00e9e, ou si vous voulez partager une astuce ou deux&#8230;<\/p>\n<p>La prochaine \u00e9tape sera la r\u00e9alisation d&rsquo;un script bash utilisant netcat pour r\u00e9aliser un serveur tcp\/ip multi-client&#8230;. <a href=\"http:\/\/46.105.150.90\/tstnunix\/?p=41\">c&rsquo;est i\u00e7i !<\/a><\/p>\n<p>{jcomments on}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0Netcat est un outil en ligne de commande permettant de cr\u00e9er des connections r\u00e9seaux tcp ou udp. Le nom \u00ab\u00a0netcat\u00a0\u00bb s&rsquo;inspire de la commande cat qui permet de lire un fichier. Nc, pour les intimes, va donc permettre de lire des sockets, c&rsquo;est \u00e0 dire une connexion r\u00e9seau entre 2 ordinateurs. Nous allons commencer par &hellip; <a href=\"https:\/\/nunix.fr\/?p=37\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Netcat : connexions r\u00e9seaux en shell !&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":35,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-shell"],"_links":{"self":[{"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nunix.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=37"}],"version-history":[{"count":1,"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":119,"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/posts\/37\/revisions\/119"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nunix.fr\/index.php?rest_route=\/wp\/v2\/media\/35"}],"wp:attachment":[{"href":"https:\/\/nunix.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nunix.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nunix.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}