Dans cet article nous allons développer un script shell permettant de réaliser un serveur TCP/IP multi-clients à l’aide de NetCat .
Pour partir sur de bonnes bases, je vous recommande donc la lecture de mon article, sur …. NetCat… (pfheu, le m’ssieur ‘y fait dla pub’ pour ses articles…).
Le but de cet article est d’illustrer l’utilisation de netcat, surtout l’option « -c » qui permet de rediriger les entrées et sorties d’un programme vers une socket. Cette option permet donc de s’affranchir de la programmation des sockets.
Comme il faut bien donner quelque chose à faire au serveur vis-à-vis des clients, on va lui soumettre des chaines de caractères et il en donnera un anagramme.
#define FREE(x) do{ free(x); x=NULL; } while (0)
char *read_from_file (FILE * f, size_t max_size);
static void gestionnaire_signaux (int ignore);
/* chaine doit être une globale pour pouvoir
libérer la mémoire lors de la terminaison */
char *chaine = NULL;
int
main (void)
{
/*————————————————————————-
* gestionnaire de signaux qui capture SIGTERM et SIGINT.
*————————————————————————-*/
struct sigaction action;
action.sa_handler = gestionnaire_signaux;
sigemptyset (&(action.sa_mask));
action.sa_flags = 0;
if ((sigaction (SIGTERM, &action, NULL) != 0)
|| (sigaction (SIGINT, &action, NULL) != 0))
{
fprintf (stderr, « Signal non capturé.n »);
exit (EXIT_FAILURE);
}
do
{
/* lecture de la chaine sur stdin */
chaine = read_from_file (stdin, 1024);
/* il faut enlever le ‘n’ */
chaine[strlen (chaine) – 1] = ‘