ne-vlezay80 Опубликовано 12 февраля, 2015 · Жалоба Имеем 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 отправляет данные на роутер. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
TheUser Опубликовано 12 февраля, 2015 · Жалоба Единственное, это конструкция периодически лагает, потому то необходимо чтобы этот mac был в arp. Как обойтись без arp? Чтобы MAC, но не ARP - можно в бридже (brctl showmacs bridge0). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 12 февраля, 2015 · Жалоба Единственное, это конструкция периодически лагает, потому то необходимо чтобы этот mac был в arp. Как обойтись без arp? Чтобы MAC, но не ARP - можно в бридже (brctl showmacs bridge0). У меня нет бриджа Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
GrandPr1de Опубликовано 12 февраля, 2015 · Жалоба Создать бридж? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 12 февраля, 2015 · Жалоба У меня сделан кеш таблички /proc/net/arp. Кеш обновляется раз в минутку. Из arp - пропал, в кеше остался. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 12 февраля, 2015 · Жалоба arping ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
orlik Опубликовано 13 февраля, 2015 · Жалоба а посмотреть в файле с лизами ? ну или как вариант включите логирование на dhcp-relay и парсите логи Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 13 февраля, 2015 (изменено) · Жалоба arping ? Для этого надо заранее знать mac. А для его "узнавания" обычного ping'а достаточно. :) PS У меня есть старая тулзовинка, которая создает кеш маков. Взять можно тут: http://topola.unity.net/files/tools/arpcoll-0.04.05.tar.gz Если не обращать внимание на дополнительные прибамбасы - она просто собирает коллекцию маков. Изменено 13 февраля, 2015 пользователем vop Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...