From 57d3e5400ce51f1881320585b520bc5f88f004ce Mon Sep 17 00:00:00 2001 From: mitty Date: Tue, 13 Apr 2010 06:31:20 +0000 Subject: [PATCH] * add svn:executable * get_ip* from http://www.perlmonks.org/?node_id=53660 git-svn-id: https://lab.mitty.jp/svn/lab/trunk@38 7d2118f6-f56c-43e7-95a2-4bb3031d96e7 --- bin/get_ip_from_ifconfig.pl | 14 ++++++++++++++ bin/get_ip_from_ioctl.pl | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100755 bin/get_ip_from_ifconfig.pl create mode 100755 bin/get_ip_from_ioctl.pl mode change 100644 => 100755 bin/smartgrep mode change 100644 => 100755 bin/svnst mode change 100644 => 100755 bin/wake diff --git a/bin/get_ip_from_ifconfig.pl b/bin/get_ip_from_ifconfig.pl new file mode 100755 index 0000000..ba6432d --- /dev/null +++ b/bin/get_ip_from_ifconfig.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl +use strict; +use Data::Dumper; + +my $interface; +my %IPs; + +foreach ( qx{ (LC_ALL=C /sbin/ifconfig -a 2>&1) } ) { + $interface = $1 if /^(\S+?):?\s/; + next unless defined $interface; + $IPs{$interface}->{STATE}=uc($1) if /\b(up|down)\b/i; + $IPs{$interface}->{IP}=$1 if /inet\D+(\d+\.\d+\.\d+\.\d+)/i; +} +print Dumper(\%IPs); diff --git a/bin/get_ip_from_ioctl.pl b/bin/get_ip_from_ioctl.pl new file mode 100755 index 0000000..151b506 --- /dev/null +++ b/bin/get_ip_from_ioctl.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl +use strict; +use warnings; +require 'sys/ioctl.ph'; +use Socket; + +my %interfaces; +my $max_addrs = 30; +socket(my $socket, AF_INET, SOCK_DGRAM, 0) or die "socket: $!"; + +{ + my $ifreqpack = 'a16a16'; + my $buf = pack($ifreqpack, '', '') x $max_addrs; + my $ifconf = pack('iP', length($buf), $buf); + + # This does the actual work + ioctl($socket, SIOCGIFCONF(), $ifconf) or die "ioctl: $!"; + + my $len = unpack('iP', $ifconf); + substr($buf, $len) = ''; + + %interfaces = unpack("($ifreqpack)*", $buf); + + unless (keys(%interfaces) < $max_addrs) { + # Buffer was too small + $max_addrs += 10; + redo; + } +} + +for my $addr (values %interfaces) { + $addr = inet_ntoa((sockaddr_in($addr))[1]); +} + +use Data::Dumper; +print Dumper \%interfaces; diff --git a/bin/smartgrep b/bin/smartgrep old mode 100644 new mode 100755 diff --git a/bin/svnst b/bin/svnst old mode 100644 new mode 100755 diff --git a/bin/wake b/bin/wake old mode 100644 new mode 100755 -- 1.7.9.5