Man Linux: Main Page and Category List


       guessnet - guess which LAN a network interface is connected to


       guessnet [options] [network_interface]


       Guessnet  guesses which LAN a network interface is connected to.  Given
       a list of candidate profiles each of which includes a test description,
       guessnet  runs  all  the  tests  in parallel and prints the name of the
       profile whose test was the first one to succeed.  If no  test  succeeds
       within a certain timeout period then a default profile name is printed.
       After printing a profile name, guessnet  immediately  kills  any  tests
       that are still running and exits.

       Candidate  profiles are read either from a test description file or, in
       ifupdown mode, from /etc/network/interfaces.


       Options follow the usual GNU conventions.  In  ifupdown  mode,  options
       can   also   be   specified   on   the   standard  input  in  the  form
       "<long-option-name>: <value>".

       -C, --config-file=filename
              Name of the configuration  file  to  use  if  not  specified  on
              command      line.       Default:      standard     input     or
              /etc/network/interfaces in ifupdown mode.

              Only  useful  when  operating  in  ifupdown  mode  (see  below).
              Instructs guessnet to only consider logical interface names that
              start with physical interface name being mapped. (ie:  eth0-home
              only matches when mapping eth0) Default: false.

              Print debugging messages.

       -d, --default=string
              Interface  name  to  print  if  no  known  networks  are  found.
              Default: none.

       --help Show a brief summary of command line options.

       -i, --ifupdown-mode
              Operate in ifupdown mode: parse the input as if  it  is  in  the
              format     of     /etc/network/interfaces    and    read    from
              /etc/network/interfaces instead of the  standard  input  if  the
              configuration  filename is not specified.  See the ifupdown mode
              section below for details.

              Time in seconds to wait for the interface to initialize when  it
              is not found already up at program startup.  Default: 3 seconds.

              Sleep a given number of seconds before starting operations.  May
              be useful in case interface driver needs a little time to settle
              before reacting to commands.  Default: 0 seconds.

              Retry wireless network scanning a given amount. Useful  if  your
              driver  needs  some attempts to return a network list.  Default:

              Send messages to syslog facility DAEMON, in addition to  stderr.

       -t, --timeout=int
              Timeout  in  seconds  used  to  wait  for  tests  to  terminate.
              Default: 5 seconds.

       -v, --verbose
              Operate verbosely.

              Show the version number of the program.


       guessnet takes as input a description of the tests it  should  perform.
       The test description file looks like this:

         # Empty lines and lines starting with ’#’ are ignored.
         # Other lines contain:
         #   <profile-name> <test-method> <parameters>

         # At home, look for a host with the given IP and MAC address
         home peer 00:01:02:03:04:05

         # At the university, check for the presence of at least one
         # of the following hosts
         university peer 05:06:03:02:01:0A
         university peer 15:13:B3:A2:2F:CD

         # If the peer doesn’t reply to ARP packets coming from
         # then you can additionally specify a source address to use
         university peer 15:13:B3:A2:2F:CD

         # For the work network use a custom script
         work command /usr/local/bin/check_work

         # Commands are executed by "sh -c" so shell syntax can be used
         john-irda command grep -q ‘cat ~enrico/john-irda-id‘ /proc/net/irda/discovery

         # Location name and interface name are exported in NAME and IFACE
         weirdnet command /usr/local/bin/weirddetect "$NAME" "$IFACE"

         # Profile "none" is selected if no network signal is detected
         # (i.e. there is no cable plugged into the socket)
         no-net missing-cable

         # Match a wireless network with the given essid
         home wireless essid Home
         # You can also match the mac address of the access point
         home wireless mac 01:02:03:04:0A:0B
         # Or both
         home wireless essid Home mac 01:02:03:04:0A:0B
         # You can also match any open network
         anyopen wireless open

       Every non-comment line represents a test to perform.

       The first word in the line is the name that will be printed if the test

       The second word is the test type.

       The remainder of the line contains parameters for  the  selected  test;
       these vary depending on the test type.


       ifupdown,  Debian’s  standard network configuration system, permits one
       to  define  different  "logical  interfaces"   (ifupdown’s   name   for
       configuration  profiles) and to choose among them when one configures a
       network  interface.   The  choice  can  be  delegated  to  an  external
       "mapping" program.  guessnet can be used as such a program if it is run
       in "ifupdown mode".  guessnet runs in ifupdown mode if it is invoked as
       guessnet-ifupdown or if it is given the --ifupdown-mode option.

       In  ifupdown  mode  guessnet  reads test data directly from the logical
       interface definitions in /etc/network/interfaces  rather  than  from  a
       separate test description file.

       In  ifupdown mode if names are passed to guessnet on its standard input
       then guessnet  considers  only  those  logical  interface  definitions;
       otherwise  it considers them all. You can have ifupdown deliver data to
       guessnet’s standard input using the map  directive.  See  interfaces(5)
       for  more  information.  If  names are preceded with "!" character then
       match  is  inverted,  meaning  that  all  logical  interfaces  will  be
       processed  except  for the ones specified in standard input. You cannot
       mix normal and negated interface names in the same  mapping  directive.
       Note:  when  using  autofilter  option  (see  above) you can broaden or
       tighten  the  automatic  matching  by  specifying  interface  names  as

       In  ifupdown  mode options are selected by passing "<long-option-name>:
       <value>" on  guessnet’s  standard  input.   This  feature  is  provided
       because ifupdown cannot pass command line arguments to mapping scripts.

       If   you   prefer   you   can   precede    the    test    keyword    in
       /etc/network/interfaces with the word guessnet.

       ifupdown  does not allow two option lines in /etc/network/interfaces to
       start with the same word.  To work  around  this  limitation,  multiple
       test  (or guessnet) lines can have different numerals suffixed to their
       initial keywords (test1, test2, or guessnet1, guessnet2, and so on).

       Here’s an example of an /etc/network/interfaces file that has been  set
       up for guessnet:

       auto lo eth0

       iface lo inet loopback

       mapping eth0
            script guessnet-ifupdown
            # Scan all logical interfaces
            # More options can be given here, such as:
            # map timeout: 10
            # map verbose: true
            # map debug: true
            # map iwscan-tries: 23
            map default: none

       mapping eth1
            script guessnet-ifupdown
            # Disable open net checking, just comment out if you are
            # desperate enough :) (see relative stanza below)
            map !eth1-anyopen
            # Scan only logical interfaces named eth1-*
            autofilter: true

       iface home inet static

            # Lines for resolvconf (if you use it: see apt-cache show resolvconf)
            # dns-search casa
            # dns-nameservers

            # Two tests, in case one of the two machines is down when we test
            test1 peer address mac 00:01:02:03:04:05
            test2 peer address mac 00:01:02:03:04:06

       iface work inet static
            test command /usr/local/bin/check_work

       iface work2 inet static
            # A source address has to be specified in case the peer
            # doesn’t reply to ARP packets coming from
            test peer address mac 00:01:02:03:04:05 source

       iface eth1-home inet static
            wireless-essid Home
            wireless-key s:myverysecret
            # Match a wireless network with the given essid
            test wireless essid Home
            # You can also match the mac address of the access point
            #test wireless mac 01:02:03:04:0A:0B
            # Or both
            #test wireless essid Home mac 01:02:03:04:0A:0B

       iface eth1-work inet dhcp
            wireless-essid Work
            wireless-key s:myverysecretkey
            # Match a wireless network with the given essid
            # If you have spaces in the essid, use double quotes
            test wireless essid "Work place"

       iface eth1-anyopen inet dhcp
            # You can also match any open network, if you are desperate :)
            wireless-essid any
            wireless-mode auto
            test wireless open

       # If nothing else is found, try DHCP
       iface none inet dhcp

Supported tests

       Test description file syntax:
              profile peer IP-address [MAC-address] [IP-address]

       Ifupdown mode syntax:
              test   peer   address   IP-address   [mac  MAC-address]  [source

              Look for peer using ARP.  The test will  succeed  if  a  network
              interface  with  the  specified  IP  address (and MAC address if
              specified) is connected to the local network.

              One can omit the MAC address, in which case guessnet only  tests
              for the presence of a host with the specified IP address.

              If the peer whose presence you want to test for refuses to reply
              to ARP packets coming from then specify some  source  IP
              address from which the peer will accept requests.

              Multiple  peers  can  be  specified (on multiple lines) but each
              peer must have a different IP address.  This restriction may  be
              eliminated in the future.

              You  can  also omit the IP address and only use the MAC: that is
              useful to test for the existance  of  physical  interfaces  with
              changing  IP  addresses.   This  kind  of scan uses an ICMP ping
              packet requires a source address in most cases,  as  hosts  tend
              not to reply to pings coming from nowhere.

       Test description file syntax:
              profile wireless [essid essid] [mac MAC-address] [open|closed]

       Ifupdown mode syntax:
              test wireless [essid essid] [mac MAC-address] [open|closed]

              Perform  a  wireless  scan  like iwlist scan does, and match the

              The test succeeds if the scan reports at least one  network  for
              which  all the tests (essid, mac of the access point, network is
              open or closed) match.

              In case more than one profile matches a network, only the  first
              one,  as  found  in  the configuration file, will succeed.  This
              allows to prioritise profiles: for example, you can prefer  your
              home  access point to an open network by listing it first in the
              configuration file.

       Test description file syntax:
              profile missing-cable

       Ifupdown mode syntax:
              test missing-cable

              Check for link beat.  The test is successful if link beat is not

              This  feature  allows guessnet to detect the case where there is
              no cable plugged into a network socket; in this case it makes no
              sense to go through other detection phases.

              This  test  can  be used in ifupdown mode too if a dummy logical
              interface  is  defined  that  includes  the  test  missing-cable
              option.  Bear in mind that when the cable is unplugged, ifupdown
              will consider the interface  to  be  configured  as  this  dummy
              logical interface.  That is somewhat counterintuitive; one might
              prefer  the  interface  to  be  deconfigured   in   that   case.
              Unfortunately,  guessnet  is  not currently able to tell ifup to
              refrain from configuring  an  interface.   The  problem  can  be
              solved, however, by means of the ifplugd(8) program.

              Link  beat  detection  is not supported on all network hardware.
              If the interface or  its  driver  does  not  support  link  beat
              detection then this test does not succeed.

       Test description file syntax:
              profile command command

       Ifupdown mode syntax:
              test command command

              Test  using  an  arbitrary  command.   The  test  is  considered
              successful if the command terminates with exit status 0.

              Location name and interface name are exported to the script  via
              the NAME and IFACE environment variables.

              For  backward  compatibility,  script  can  be  used  instead of

Experimental tests

       Test description file syntax:
              profile pppoe

       Ifupdown mode syntax:
              test pppoe

              Use the pppoe program to send PADI packets in order to look  for
              access  concentrators.  The test should succeed if a PPPOE modem
              is present on the given interface.

              Using this test requires that pppoe be installed on the  system.

       Test description file syntax:
              profile wireless [mac MAC-address] [essid ESSID]

       Ifupdown mode syntax:
              test wireless [mac MAC-address] [essid ESSID]

              Test   certain  properties  of  the  wireless  interface.   More
              specifically, test the MAC  address  and/or  the  ESSID  of  the
              associated  access  point.   If  both are given then MAC-address
              must precede ESSID.

              Blanks may be included in the ESSID.  For example,
                  prof1 wireless essid My LAN
              tests for an ESSID of "My LAN".

              Note that the wireless test does not  attempt  to  change  these
              properties;  it  only  examines  them.  This test is designed to
              work with programs such  as  waproamd  which  independently  and
              dynamically  manage  the  wireless  network  adapter  to keep it
              associated to an access point.

              Note that the wireless test is not yet implemented cleanly.

       Note that if one of several  tests  terminates  successfully  then  any
       other  tests  still  running  will  be terminated with the KILL signal.
       Therefore, test programs should not need to do any special  cleanup  on


   Getting remote host MAC addresses
       When  you  prepare  the test data for guessnet you may need to know the
       MAC address of a remote interface in  the  local  network.   There  are
       various  ways to obtain this.  The easiest is to use the arping utility
       by doing "arping [hostname]".  If you don’t have  arping  installed  on
       your system then try the command "arp -a [hostname]" which will display
       the MAC address if it is in the ARP cache of your machine.   You  might
       want  to ping the remote interface first to make sure that you have the
       information  in  the  cache.   You  can  also  take  a  look   at   the
       /usr/share/doc/guessnet/examples/getmac script.

   Multiple tests
       Currently  guessnet  only  supports  specifying  one  kind  of test per


       ifup(8), interfaces(5), arping(8), sh(1), pppoe(8), ifplugd(8).


       Guessnet  was  written  by   Enrico   Zini   <>   with
       contributions  from  Thomas  Hood.   The ARP network detection code was
       taken from laptop-netconf by Matt Kern <>, which in turn
       in based on divine by Felix von Leitner <>.

       The Guessnet webpage is at .

                                4 November 2007