Jump to content

Recommended Posts

Posted

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

Posted

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

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

Posted

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

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

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

Posted (edited)

arping ?

 

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

 

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

Edited by vop

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.