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)");
}