Имеем UDP сокет, который висит на всех интерфейсах. Необходимо определить с какого интерфейса пришел DHCP запрос. попробовал как описано ниже, но $ipaddr1 и $ipaddr2 остаются пустыми. IP адрес клиента понятное дело пуст, т.к. клиент первоначально не имееет IP, почему пусто в адресе сокета и как его всеже получить?
| Код | #!/usr/bin/perl -w
use IO::Socket::INET;
my $sock = IO::Socket::INET->new(LocalPort => 67, Broadcast =>1, Proto => 'udp') or die "Cannot create socket: $!\n";
my $newmsg = ""; my $max_len = 1024; while($sock->recv($newmsg, $max_len)) { if($newmsg) { my($port1, $ipaddr1) = sockaddr_in($sock->peername); my($port2, $ipaddr2) = sockaddr_in($sock->sockname); print "Client $ipaddr1:$port1 on NIC $ipaddr2:$port2\n"; } }
|
|