L'esigenza dell'utente

Utilizzi xinetd per fornire uno o più servizi su Internet. Come server utilizzi un tuo programma, ad esempio uno script di shell. Con questo programma vuoi realizzare, ad esempio, il Portknocking e quindi vuoi scoprire l'indirizzo IP dell'host che si è collegato a te.

La soluzione

xinetd comunica l'indirizzo IP dell'host remoto al programma chiamato tramite l'ambiente. Questa variabile si chiama REMOTE_HOST.

Un esempio

Supponiamo di collegare uno script di shell /root/test.sh alla porta UDP 8888. La configurazione di xinetd sarà simile a questa:

/etc/xinetd.d/test:service test
{
        disable         = no
        type            = UNLISTED
        socket_type     = dgram
        protocol        = udp
        user            = root
        wait            = yes
        port            = 8888
        server          = /bin/bash
        server_args     = /root/test.sh
}                           

Lo script di test può accedere all'indirizzo come segue:

/root/test.sh:#!/bin/bash
logger "xinetd: Verbindung auf Port 8888 von IP-Adresse $REMOTE_HOST"

È inoltre possibile accedere alla variabile REMOTE_HOST da un programma C. A tale scopo è disponibile la funzione getenv():

xinettest.c:#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *ip = getenv("REMOTE_HOST");
    printf("Adresse des Remote-Hosts: %s\n", ip ? ip : "(unbekannt)");    
}

Linux knowledge

Questi articoli sono stati scritti dal fondatore di Checkmk molti anni fa.
Tuttavia, sono ancora validi e quindi li conserviamo sul nostro sito web.
Da allora Mathias ha sviluppato un software di monitoraggio chiamato Checkmk.

Scopri di più