CGI skripty

Z Freenetis Wiki
Přejít na: navigace, hledání


Podporu pro CGI skripty je možné zapnout v sekci nastavení.

Získání MAC adresy

FreenetIS umožňuje aktuálně získávat MAC adresu kromě SNMP i pomocí vlastních CGI skriptů, které si umístíte přímo na dotyčný router. Daný skript musí vracet pouze MAC adresu.

Cesta ke skriptu je definována po povolení CGI skriptů v nastavení, přesněji v záložce Síť položkou URL pro ARP tabulku. Výchozí hodnota je http://{GATEWAY_IP_ADDRESS}/cgi-bin/arp.cgi?ip_address={IP_ADDRESS}, kde parametry {GATEWAY_IP_ADDRESS} a {IP_ADDRESS} budou nahrazeny za IP adresu brány a IP adresu, ke kterému je hledána MAC adresa.

Získání MAC adresy z ISC DHCP serveru

Bash skript

Instalace:

  • Zkopírujte skript do složky s CGI skripty
  • Vytvořte log
touch /var/log/arp.cgi.log && chmod 0777 /var/log/arp.cgi.log
  • Upravte konfiguraci (proměnná DHCP_LEASES_FILE)

Skript:

#!/bin/bash
################################################################################
# This is a CGI script that allows to obtain MAC address from DHCP leases
# by IP address that id retrieved via URL parameter.
#
# Authors:
#	Michal Kliment <kliment@freenetis.org>
#	Ondrej Fibich <fibich@freenetis.org>
#
# Version:
#	0.1.2
################################################################################

# config part ##################################################################

# log (must be chmoded to 0777)
LOG_FILE=/var/log/arp.cgi.log

# DHCP leases file (change this according to your system)
DHCP_LEASES_FILE=/var/lib/dhcp/dhcpd.leases
#DEBIAN lenny:# DHCP_LEASES_FILE=/var/lib/dhcp3/dhcpd.leases

# execute part #################################################################

# get IP address from URL param
ip_address=`echo $QUERY_STRING | sed 's/ip_address\=\([^&]\+\).*/\1/'`

# print header
echo "Content-type: text/plain"
echo ""

# DHCP leases file not exist/not readable
if [ ! -r "$DHCP_LEASES_FILE" ]; then
	echo "$DHCP_LEASES_FILE cannot be readed"
	exit 1
else
	# get MAC
	mac=`cat "$DHCP_LEASES_FILE" | grep -A6 "$ip_address" | 
		 grep "hardware ethernet" | sed -e 's/^[ \t]*//' | 
		 cut -d " " -f 3 | sed 's/;//'`
	# print MAC
	echo $mac
	# log if writable
	if [ -w "$LOG_FILE" ]; then
		echo "`date -u` [INFO] IP=$ip_address, MAC=$mac" >> "$LOG_FILE"
	fi
fi