Home > voicebox > hostipinfo.m

hostipinfo

PURPOSE ^

HOSTIPINFO get host name and internet connection information

SYNOPSIS ^

function [ipinfo,tt]=hostipinfo(m,t)

DESCRIPTION ^

HOSTIPINFO get host name and internet connection information
  Usage:    hostname   = hostipinfo;        % computer name
            ip_address = hostipinfo('i');   % IP address

  Inputs:   m  mode input selects the information to output (see below)
            t  optional output from an "ipconfig -all" command

  Outputs:  ipinfo   cell array with one row per IP connection. The number
                     of columns is detemined by the m input (see below).
                     If only a single output value is selected by the m input, then
                     ipinfo will be a string rather than a cell array.
            tt       output from the "ipconfig -all" command

  The "m" input selects whch IP connections to supply information about
  (rows of IPINFO) and what information to supply (columns of IPINFO).
  
  Row selection: A   include all connections
                 L   Local Internet Connection [default if m non-empty]
                 B   Bluetooth Connection
                 P   PPP connection (e.g. a VPn connection)

  Col selection: h   hostname (same for all connections) [default if m is empty]
                 c   Connection type code: L=local, B=bluetooth, P=PPP or ?=other
                 t   Connection type (e.g. "Ethernet" or "PPP")
                 n   Connection name (e.g. "Local Area Connection")
                 m   MAC address (e.g. "00-53-45-00-00-00"
                 i   IP address (e.g. "192.168.1.1") [default if m non-empty]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ipinfo,tt]=hostipinfo(m,t)
0002 %HOSTIPINFO get host name and internet connection information
0003 %  Usage:    hostname   = hostipinfo;        % computer name
0004 %            ip_address = hostipinfo('i');   % IP address
0005 %
0006 %  Inputs:   m  mode input selects the information to output (see below)
0007 %            t  optional output from an "ipconfig -all" command
0008 %
0009 %  Outputs:  ipinfo   cell array with one row per IP connection. The number
0010 %                     of columns is detemined by the m input (see below).
0011 %                     If only a single output value is selected by the m input, then
0012 %                     ipinfo will be a string rather than a cell array.
0013 %            tt       output from the "ipconfig -all" command
0014 %
0015 %  The "m" input selects whch IP connections to supply information about
0016 %  (rows of IPINFO) and what information to supply (columns of IPINFO).
0017 %
0018 %  Row selection: A   include all connections
0019 %                 L   Local Internet Connection [default if m non-empty]
0020 %                 B   Bluetooth Connection
0021 %                 P   PPP connection (e.g. a VPn connection)
0022 %
0023 %  Col selection: h   hostname (same for all connections) [default if m is empty]
0024 %                 c   Connection type code: L=local, B=bluetooth, P=PPP or ?=other
0025 %                 t   Connection type (e.g. "Ethernet" or "PPP")
0026 %                 n   Connection name (e.g. "Local Area Connection")
0027 %                 m   MAC address (e.g. "00-53-45-00-00-00"
0028 %                 i   IP address (e.g. "192.168.1.1") [default if m non-empty]
0029 
0030 %      Copyright (C) Mike Brookes 2012
0031 %      Version: $Id: hostipinfo.m 1443 2012-02-22 09:10:03Z dmb $
0032 %
0033 %   VOICEBOX is a MATLAB toolbox for speech processing.
0034 %   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
0035 %
0036 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0037 %   This program is free software; you can redistribute it and/or modify
0038 %   it under the terms of the GNU General Public License as published by
0039 %   the Free Software Foundation; either version 2 of the License, or
0040 %   (at your option) any later version.
0041 %
0042 %   This program is distributed in the hope that it will be useful,
0043 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0044 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0045 %   GNU General Public License for more details.
0046 %
0047 %   You can obtain a copy of the GNU General Public License from
0048 %   http://www.gnu.org/copyleft/gpl.html or by writing to
0049 %   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
0050 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0051 
0052 if nargin<2
0053     t=evalc('!ipconfig -all');
0054     if nargin<1
0055         m='';
0056     end
0057 end
0058 tt=t;
0059 if ~numel(m)
0060     m='Lh';
0061 end
0062 host=regexp(t,'Host Name[ .]*:\s*([\w-]*)','tokens','once'); % get host name
0063 if ~numel(m)
0064     ipinfo=host{1};
0065 else
0066     [iad,ad]=regexp(t,'\n(\w*) adapter ([ \w]*):','start','tokens'); % get adapters
0067     [iadx,adx]=regexp(t,'\n(\w* adapter [ \w]*):','start','tokens'); % get entire adapter names
0068     [imac,mac]=regexp(t,'Physical Address[ .]*:\s*(\S*)','start','tokens'); % get MAC addresses
0069     [iip,ip]=regexp(t,'IP Address[ .]*:\s*(\S*)','start','tokens'); % get IP addresses
0070     nad=numel(iad);  % number of adapters listed in ipconfig
0071     iad(nad+1)=length(t); % add an extra fake adapter at the end of the list
0072     fty='hctnmi'; % possible output fields
0073     nfty=numel(fty);    % number of fields
0074     ipinfo=cell(nad,nfty); % cell array to store the fields for each adapter
0075     nr=nad;
0076     aty='LBP';   % types of adapter
0077     naty=numel(aty);
0078     assx={'Ethernet adapter Local Area Connection'; 'Ethernet adapter Bluetooth Network Connection' ; 'PPP adapter '};
0079     for i=1:nad
0080         ipinfo{i,1}=host{1};
0081         ipinfo(i,3:4)=ad{i};
0082         ix=find((imac>iad(i)) & (imac<iad(i+1)),1);
0083         if numel(ix)
0084             ipinfo{i,5}=mac{ix}{1};
0085         else
0086             ipinfo{i,5}='';
0087         end
0088         ix=find((iip>iad(i)) & (iip<iad(i+1)),1);
0089         if numel(ix)
0090             ipinfo{i,6}=ip{ix}{1};
0091         else
0092             ipinfo{i,6}='';
0093         end
0094         jx=cell(length(assx),1);
0095         for j=1:length(assx)
0096             jx{j}=strfind(adx{i}{1},assx{j});    % compare adapter strings with adapter types
0097         end
0098         jx=find(~cellfun('isempty',jx));
0099         if numel(jx)
0100             ipinfo{i,2}=aty(jx);
0101         else
0102             ipinfo{i,2}='?';
0103         end
0104     end
0105     % Select the requested adapters from the rows of ipinfo{}
0106     if ~any(m=='A')
0107         ix=(1:naty)*(aty(ones(numel(m),1),:)'==m(ones(naty,1),:));
0108         ix=ix(ix>0);
0109         nr=numel(ix);
0110         if ~nr
0111             ix=1;  % default to 'L' = Local Internet
0112         end
0113         jx=ix;      % jx will hold first match
0114         for i=1:numel(ix)
0115             a=strmatch(aty(ix(i)),ipinfo(:,2));
0116             if numel(a)
0117                 jx(i)=a(1);
0118             else
0119                 jx(i)=0;
0120             end
0121         end
0122         jx=jx(jx>0);
0123         ipinfo=ipinfo(jx,:);
0124     end
0125     % Select the requested fields from the columns of ipinfo{}
0126     ix=(1:nfty)*(fty(ones(numel(m),1),:)'==m(ones(nfty,1),:));
0127     ix=ix(ix>0);
0128     nc=numel(ix);
0129     if ~nc
0130         ix=6;  % default to 'i' = IP address
0131     end
0132     ipinfo=ipinfo(:,ix);
0133     if nr<2 && nc<2
0134         ipinfo=ipinfo{1};  % just output a string if only one element requested
0135     end
0136 end

Generated on Tue 19-Sep-2017 12:07:31 by m2html © 2003