[xymon] MAC address in the client data?
Ward, Martin
Martin.Ward at colt.net
Mon Jul 26 11:17:59 CEST 2010
Thanks gents for your replies and directions. I decided to use arp(1m)
rather than sudo to avoid having to mangle the sudoers file.
So for anyone else that needs to implement the same solution, below is
the three-step solution. I followed the Xymon standard of using an
environment variable to re-point the ifconfig(1m) command elsewhere.
Could we get this change to the ifconfig command use put in to the next
version?
Step 1:
I modified the ~xymon/client/bin/hobbitclient-sunos.sh file and changed:
echo "[ifconfig]"
ifconfig -a
to be:
echo "[ifconfig]"
$IFCONFIG -a
Step 2:
I modified the ~xymon/client/etc/hobbitclient.cfg, appending the
following to the bottom:
IFCONFIG="/opt/hobbit/client/ext/ifconfig.pl"
Step 3:
I created the file ~xymon/client/ext/ifconfig.pl. This script uses arp
to get the MAC address and prints it out in a similar format to the real
ifconfig command and the source is at the bottom of this email.
The only difference between this and the output of "ifconfig -a" is that
Solaris does not put leading zeroes in to the MAC address whereas
arp(1m) does:
arp -> 00:08:7c:bb:04:c0
ifconfig -> 0:8:7c:bb:4:c0
I left the code out to remove leading zeroes for the sake of speed. I
will add it in later so if you want this functionality email me, or feel
free to hack the code yourself.
Here is the source code:
----
#!/usr/bin/perl -w
# A perl script that emulates the "ifconfig" output but puts the MAC
# address in the right place if the executing user is not root.
#
# v1.0 - Author: |\/|artin (martin.ward at colt.net)
#
# On Solaris servers you only see the MAC address in the ifconfig -a
# output if you are root. This script emulates that by using the output
# from arp -an.
my $IFCONFIG='/sbin/ifconfig';
my $ARP='/usr/sbin/arp';
my ($iface, $curriface, $inet, $ipaddr, $arpip, $mac);
# Check if we are root.
if ($> == 0) {
# Simmply execute ifconfig with the command line parameters
exec $IFCONFIG, @ARGV;
}
# The user is not root, so run IFCONFIG but catch the output
open(IFC, "$IFCONFIG @ARGV |") or die "Unable to run $IFCONFIG:". $!;
# Output from ifconfig looks like this:
# ce0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index
2
# inet 10.5.2.46 netmask ffffffe0 broadcast 10.5.2.63
$curriface = '';
while (<IFC>) {
# First print the current line out though.
print $_;
chomp;
($iface, $ipaddr, undef) = split/ +/, $_, 3;
if ($iface =~ /\tinet/) {
# We have an IP address so use it to get the MAC address
open(ARP, "$ARP -an |") or die "Unable to run arp:" .
$!;
while(<ARP>) {
chomp;
(undef, $arpip, undef, undef, $mac) = split;
print "\tether $mac\n" if ($arpip eq $ipaddr);
}
close(ARP);
}
}
close(IFC);
----
|\/|artin
--
Martin Ward
Manager, Technical Services
DDI:+44 (0) 20 7863 5218 / Fax: +44 (0)20 7863 9999 / www.colt.net
Colt Technology Services, Unit 12, Powergate Business Park, Volt Avenue,
Park Royal, London, NW10 6PW, UK.
Help reduce your carbon footprint | Think before you print. Registered
in England and Wales, registered number 02452736, VAT number GB 645 4205
50
> -----Original Message-----
> From: Tim McCloskey [mailto:tm at freedom.com]
> Sent: 22 July 2010 04:34
> To: xymon at xymon.com
> Subject: RE: [xymon] MAC address in the client data?
>
> From a Solaris 10 ifconfig man page:
>
> ether [ address ]
> If no address is given and the user is root or has suf-
> ficient privileges to open the underlying device, then
> display the current Ethernet address information.
>
> Vernon is right, arp is probably your friend here. There are other
ways of
> doing this, arp being one of them. If it were me, I would not want to
run
> sudo or change anything to run as root when the same information is
already
> available to the hobbit user. For displaying information, arp will
work in
> child zones as well.
>
> Certainly you would do something a bit more sane than the following,
laziness
> provides the following example, there are better ways to do this:
>
> for ip in `ifconfig -a | gegrep -A1 "bge0: " | tail -1 | awk '{print
$2}'`;
> do arp -na | grep $ip | awk '{print $NF}'; done
>
> some:mac:addres:displayed:here
>
> Regards,
>
>
>
>
> ________________________________________
> From: Vernon Everett [everett.vernon at gmail.com]
> Sent: Wednesday, July 21, 2010 8:00 PM
> To: xymon at xymon.com
> Subject: Re: [xymon] MAC address in the client data?
>
> Hi Martin
>
> I believe this to be a Solaris feature. And looks like it is also the
case on
> others.
> See here http://www.coffer.com/mac_info/locate-unix.html
>
> And yes, I think sudo is the simplest way of getting round it.
> However, if you have conscientious objections to using root and/or
sudo, you
> could try messing about with the output of arp -a.
> A bit of creative scripting, and you should get something you could
tack onto
> the output of ifconfig -a.
> YMMV.
>
> Cheers
> Vernon
>
>
>
> On Thu, Jul 22, 2010 at 12:10 AM, Ward, Martin
> <Martin.Ward at colt.net<mailto:Martin.Ward at colt.net>> wrote:
> All,
>
> I don't know if this quirk is peculiar to Solaris or is the same on
other
> flavours of UNIX, but if you are not the root user and you run the
> ifconfig(1m) command it does not show the MAC address assigned to the
> interfaces. Here is what I see in Xymon's client data view for one
host:
>
> [ifconfig]
> lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu
8232
> index 1
> inet 127.0.0.1 netmask ff000000
> ce0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index
2
> inet 10.5.2.46 netmask ffffffe0 broadcast 10.5.2.63
>
> If I login as root and run the command I see:
> lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu
8232
> index 1
> inet 127.0.0.1 netmask ff000000
> ce0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index
2
> inet 10.5.2.46 netmask ffffffe0 broadcast 10.5.2.63
> ether 0:3:ba:96:e6:4f
>
> I am currently writing a script to retrieve information from the
stored client
> data and to populate a database with that info. In this manner when I
install
> Xymon on a new server the configuration information is automatically
updated
> in my server database. The question is: How can I get the MAC address?
By
> default the Xymon client is installed and run under the hobbit user
ID. Is
> there any way I can configure the hobbitclient-sunos.sh script to run
as root?
> I guess I could run the ifconfig command using sudo and configure sudo
so that
> it doesn't require a password, but is there any
other/better/easier/more
> elegant ways of doing this?
>
> |\/|artin
> --
> [cid:image001.jpg at 01CB28F6.36AD1610]
> Martin Ward
> Manager, Technical Services
>
> DDI:+44 (0) 20 7863 5218 / Fax: +44 (0)20 7863 9999 /
> www.colt.net<http://www.colt.net/>
> Colt Technology Services, Unit 12, Powergate Business Park, Volt
Avenue, Park
> Royal, London, NW10 6PW, UK.
>
> Help reduce your carbon footprint | Think before you print. Registered
in
> England and Wales, registered number 02452736, VAT number GB 645 4205
50
>
> [Colt Disclaimer] The message is intended for the named addressee only
and may
> not be disclosed to or used by anyone else, nor may it be copied in
any way.
> The contents of this message and its attachments are confidential and
may also
> be subject to legal privilege. If you are not the named addressee
and/or have
> received this message in error, please advise us by e-mailing
> abuse at colt.net<mailto:abuse at colt.net> and delete the message and any
> attachments without retaining any copies. Internet communications are
not
> secure and Colt does not accept responsibility for this message, its
contents
> nor responsibility for any viruses. No contracts can be created or
varied on
> behalf of Colt Technology Services, its subsidiaries, group companies
or
> affiliates ("Colt") and any other party by email communications unless
> expressly agreed in writing with such other party. Please note that
incoming
> emails will be automatically scanned to eliminate potential viruses
and
> unsolicited promotional emails. For more information refer to
> www.colt.net<http://www.colt.net> or contact us on +44(0)20 7390 3900
More information about the Xymon
mailing list