Перейти к содержимому
Калькуляторы

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

Имеем 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 отправляет данные на роутер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Чтобы MAC, но не ARP - можно в бридже (brctl showmacs bridge0).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Чтобы MAC, но не ARP - можно в бридже (brctl showmacs bridge0).

У меня нет бриджа

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня сделан кеш таблички /proc/net/arp. Кеш обновляется раз в минутку. Из arp - пропал, в кеше остался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а посмотреть в файле с лизами ? ну или как вариант включите логирование на dhcp-relay и парсите логи

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

arping ?

 

Для этого надо заранее знать mac. А для его "узнавания" обычного ping'а достаточно. :)

 

PS У меня есть старая тулзовинка, которая создает кеш маков. Взять можно тут: http://topola.unity.net/files/tools/arpcoll-0.04.05.tar.gz Если не обращать внимание на дополнительные прибамбасы - она просто собирает коллекцию маков.

Изменено пользователем vop

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.