IP-Adresse des Remote-Hosts bei xinetd29. April 2006
Ihr AnliegenSie verwenden xinetd, um einen oder mehrere Dienste im Internet anzubieten. Als server verwenden Sie ein eigenes Programm, z.B. ein Shellskript. Damit wollen Sie z.B. Portknocking realisieren und wollen deshalb die IP-Adresse des Hosts feststellen, der sich zu Ihnen verbunden hat. Die Lösungxinetd teilt dem aufgerufenen Programm über das Environment die IP-Adresse des Remote-Hosts mit. Die Variable heißt REMOTE_HOST. Ein BeispielNehmen wir an, sie hängen an UDP Port 8888 ein Shellskript /root/test.sh. Ihre Konfiguration für xinetd sieht dann etwa so aus: /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
}
Das Testskript kann wie folgt auf die Adresse zugreifen: /root/test.sh:
#!/bin/bash logger "xinetd: Verbindung auf Port 8888 von IP-Adresse $REMOTE_HOST" Auch von einem C-Programm aus können Sie auf die Variable REMOTE_HOST zugreifen. Dafür gibt es die Funktion 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)");
}
|
| ||||||||||||||||||||||||||||||