LINUX.ORG.RU
ФорумAdmin

Получить интерфейс, за которым находится mac адрес хоста

 , , , ,


1

1

Имеем dhcp-relay. Сервер имеет ip:10.99.215.7. Шлюз имеет: 10.99.200.11. Клиент с dhcp получает 10.99.100.10/32. Задача: получить сетевой интерфейс за которым скрывается клиент. На данный момдет она решается так:

LANDEV=$(arp -n|grep $ETHER|gawk '{print $5}')

Единственное, это конструкция периодически лагает, потому то необходимо чтобы этот mac был в arp. Как обойтись без arp?

Полный код скрипта:

root@debian-01:~# cat /srv/cgi/cgi-bin/ip.cgi
#!/bin/bash

# Global script param

# RTABLE=100
# LANDEV=eth1
PROTO=dhcp

# Header to WWW

echo "Content-Type: text/html"
echo ""

# Internal parametrs (no change)

PASSKEY_1=/srv/cgi/passkey
CMD_LINE=$(echo $QUERY_STRING|tr '&' ' ')

ACTION=$(echo $CMD_LINE|gawk '{print $1}')
ADDR=$(echo $CMD_LINE|gawk '{print $2}')

# PASSKEY=$(echo $CMD_LINE|gawk '{print $3}')
ETHER=$(echo $CMD_LINE|gawk '{print $3}')
PASSKEY=$(echo $CMD_LINE|gawk '{print $4}')

PASSKEY_LD=$(cat $PASSKEY_1)

# Getting interface data

LANDEV=$(arp -n|grep $ETHER|gawk '{print $5}')

# Chack passkey

if [ "$PASSKEY_LD" == "$PASSKEY" ]
then

# Setup to action

        case $ACTION in

# Add route
                ADD)
                        ip route add $ADDR dev $LANDEV proto $PROTO

# Check state from ip route add

                        if [ "$?" -eq "0" ]
                        then
                                STATE=SUCCESS
                        else
                                STATE=FAIL
                        fi
                        ;;

# Remove route
                DEL)
                        ip route del $ADDR proto $PROTO # dev $LANDEV

# Check state from ip route del

                        if [ "$?" -eq "0" ]
                        then
                                STATE=SUCCESS
                        else
                                STATE=FAIL
                        fi
                        ;;
# Exit
        esac
else

# State to invalid

        STATE=INVALID_PKEY
fi

# Display internal state

echo "IPROUTE: ACTION=$ACTION HOST=$ADDR ETHER=$ETHER STATE=$STATE"

# End

dhcp сервером запускается скрипт, который через curl отправляет данные на роутер.

★★★★★

Последнее исправление: ne-vlezay (всего исправлений: 1)

Ответ на: комментарий от vel

Это актуально только для существующих маршрутов. Мне нужно, чтобы по mac-адресу можно было узнать, куда прописывать маршрут.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

Странная затея с прописыванием прямых маршрутов. Похоже на какой-то адский велосипед.

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.