Author: robert Date: 2007-11-25 14:29:58 -0700 (Sun, 25 Nov 2007) New Revision: 1092
Added: trunk/ATTACHMENTS/network-recognition/ trunk/ATTACHMENTS/network-recognition/network-recognition-0.0.2.tar.bz2 trunk/network-recognition.txt Log: Added new network-recognition hint and attachment Added: trunk/ATTACHMENTS/network-recognition/network-recognition-0.0.2.tar.bz2 =================================================================== (Binary files differ) Property changes on: trunk/ATTACHMENTS/network-recognition/network-recognition-0.0.2.tar.bz2 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/network-recognition.txt =================================================================== --- trunk/network-recognition.txt (rev 0) +++ trunk/network-recognition.txt 2007-11-25 21:29:58 UTC (rev 1092) @@ -0,0 +1,365 @@ +AUTHOR: Eloi Primaux eloi AT bliscat dot org + +DATE: 2007-10-11 + +LICENSE: GNU Free Documentation License Version 2 + +SYNOPSIS: Very basic network recognition using MAC address + +PRIMARY URL: +https://www.harasdebondereau.com/bliscat/hints/network-recognition/network-recognition-0.0.2.tar.bz2 + +DESCRIPTION: + This hint explains how to make a very basic automatic network recognition +ATTACHMENTS: + +http://www.linuxfromscratch.org/hints/downloads/files/ATTACHMENTS/network-recognition/network-recognition-0.0.2.tar.bz2 + +PREREQUISITES: + +- A working LFS-6.2 system or newer with wireless capabilities +- Almost two networks services like ipv4-static/dhcpcd installed + +HINT: + +0) Requirement and Optional tools +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Well, we will need the arpdiscover tool which comes from the arptools package. +The ArpTools package provides arpdiscover, arpfool and the so called arpflush. +You should only install the arpdiscover program, the others are used for network +security check. + +The ArpTools package requires libnet and libpcap + +0.1) libpcap >= 0.8.1 +~~~~~~~~~~~~~~~~~~~~~~ +download it from: +http://ovh.dl.sourceforge.net/sourceforge/libpcap/libpcap-0.8.1.tar.gz + +install it with these commands: +./configure --prefix=/usr && +make && +make install + +0.2) libnet >= 1.1.3-RC-01 +~~~~~~~~~~~~~~~~~~~~~~~~~~ +download it from: +http://www.packetfactory.net/libnet/dist/libnet-1.1.3-RC-01.tar.gz + +install it with these commands: +./configure --prefix=/usr && +make && +make install + +0.3) ArpTools >= 1.0.2 'The core' +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +download it from: +http://freshmeat.net/redir/arptools/63568/url_tgz/arptools-1.0.2.tar.gz + +install it with these commands: +./configure --prefix=/usr && +make && +make install + +0.3) NetDiscover >= 0.3-beta6 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +you can download it from: +http://nixgeneration.com/~jaime/netdiscover/releases/netdiscover-0.3-beta6.tar.gz + +install it with: +./configure --prefix=/usr && +make && +make install + +0.3) ifplugd >= 0.28 +~~~~~~~~~~~~~~~~~~~~~ +you can download it from: +http://0pointer.de/lennart/projects/ifplugd/ifplugd-0.28.tar.gz +patches from ubuntnu: +http://launchpadlibrarian.net/6580436/ifplugd_0.28-2.3ubuntu1.diff.gz + + +in the package directory, run this command to really apply the patch: +gunzip ../ifplugd_0.28-2.3ubuntu1.diff +patch -Np1 -i ../ifplugd_0.28-2.3ubuntu1.diff +patch -Np1 -i debian/patches/01_fix_ftbfs_feisty.dpatch + +ifplugd install it's configuration in /etc/ifplugd, i don't like this +run: +sed 's,/ifplugd/ifplugd.action,/sysconfig/ifplugd/ifplugd.action,' -i src/ifplugd.c +sed 's,ifplugd/ifplugd.conf,/sysconfig/ifplugd/ifplugd.conf,' -i conf/ifplugd.init.in + +now compile and install: +./configure --prefix=/usr --sysconfdir=/etc && +make && +make install + + + +1) This Hints +~~~~~~~~~~~~~ +Well ... +now we have a tool which can discover MAC address + +1.1) Install Files and Directories (this is only a proposal) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Extract network-recognition-0.0.1.tar.bz2 and in the extracted directory and run the +following commands: + +OPION 1 : + + install -dv -m 700 /etc/sysconfig/network.d + install -dv /etc/sysconfig/network-recognition + install -dv /usr/share/doc/network-recognition + + install -m 744 netdevices-example /etc/sysconfig/network.d/netdevice.example + install -v -m644 network-recognition-conf /etc/sysconfig/network-recognition/network-recognition.conf + install -v -m750 network-recognition-script /usr/sbin/network-recognition + + +OPTION 2: same as above but in a script + ./install.sh (if present ;) + +2) The principle +~~~~~~~~~~~~~~~~ + +The network-recognition script use a netdevices file in which are stored +network names, with specific ip and mac address of knowned permanent network +devices such as routers. The script call arpdiscover to check if that device is +present, if the device is present the script exit the loop and returns the name +of the network it successfully recognized. + +This first discovering method is really slow (10-15 sec per scan), it uses +arpdiscover, the second method is faster and uses netdiscover. + +2) IP service integration +~~~~~~~~~~~~~~~~~~~~~~~~~ +In the case of wpa-service you simply edit the wpa-actions file and replace +the function get_ssid by : + +function get_ssid { +if [ "$EVENT" == "CONNECTED" ]; then + RET=`network-discover $IFACE` + echo $RET > "$WPA_ACCESS_DIR/$IFACE.ssid" + else + if [ -e "$WPA_ACCESS_DIR" ]; then + RET=$(cat "$WPA_ACCESS_DIR/$IFACE.ssid") + fi +fi +} + +In the case of ifplugd you can modify the ifplugd.action file like this: + +BEGIN of ifplugd.action +set -e +. /etc/sysconfig/network-recognition/network-recognition.conf + +if [ -z "$1" ] || [ -z "$2" ] ; then + echo "Wrong arguments" > /dev/stderr + exit 1 +fi + +function reload_avahi { + $AVAHI_DAEMON -c + RET=$? + if [ "$RET" == "0" ]; then + $AVAHI_DAEMON -r + fi +} + +IFACE=$1 +[ "$2" == "up" ] && EVENT="CONNECTED" +[ "$2" == "down" ] && EVENT="DISCONNECTED" + +function get_ssid { +if [ "$EVENT" == "CONNECTED" ]; then + RET=`network-recognition $IFACE` &> /dev/null + echo $RET > "/tmp/$IFACE.ssid" + else + if [ -e "/tmp/$IFACE.ssid" ]; then + RET=$(cat "/tmp/$IFACE.ssid") + fi +fi +} + + +if [ "$EVENT" == "CONNECTED" ]; then + get_ssid + SSID=$RET + # configure network, signal DHCP client, etc. + # If special networks definition exist, use it + if [ -f "$NETWORKDIR/$SSID" ]; then + IFCONFIG="$NETWORKDIR/$SSID" + . $IFCONFIG + export IFCONFIG + $SERVICESDIR/$SERVICE $IFACE up + else + IFCONFIG="$NETWORKDIR/AUTO" + . $IFCONFIG + export IFCONFIG + $SERVICESDIR/$SERVICE $IFACE up + fi + RET=$? + # reload the Avahi daemon if it runs + reload_avahi + exit $RET +fi + + +if [ "$EVENT" == "DISCONNECTED" ]; then + # remove network configuration, if needed + get_ssid + if [ "x$RET" != "x" ]; then + # this is false when there is nothing known around + # and when the system is disabling the service + SSID=$RET + # configure network, signal DHCP client, etc. + # If special networks definition exist, use it + if [ -f "$NETWORKDIR/$SSID" ]; then + IFCONFIG="$NETWORKDIR/$SSID" + . $IFCONFIG + export IFCONFIG + $SERVICESDIR/$SERVICE $IFACE down + else + IFCONFIG="$NETWORKDIR/AUTO" + . $IFCONFIG + export IFCONFIG + $SERVICESDIR/$SERVICE $IFACE down + fi + fi + RET=$? + # reload the Avahi daemon if it runs + reload_avahi + exit $RET +fi +END of ifplugd.action + +remember to add your computer network device to /etc/sysconfig/ifplugd/ifplugd.conf + +3) Configuration +~~~~~~~~~~~~~~~~ + +Script configuration go in the +/etc/sysconfig/network-recognition/network-recognition.conf file + + +2.1) Network configurations (IP): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In fact i strongly use the wpa-service ipconf methods, that why i use the same +configuration files for networks. + +this part comes from the wpa-service hint: + +you can set up your network according to it's network_name (eg SSID), this means +that if the SSID "DHCP_network" manage ip via a dhcp server, wpa-service will +use the SSID file descriptor to set up you network when connecting to the SSID +network. + +Those ssid descriptors are named with the name of the SSID they describe, +and took place in the /etc/sysconfig/network.d directory. + +The "AzErTy" SSID descriptor will be /etc/sysconfig/network.d/AzeRtY + +2.1.1) SSID descriptor syntax: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +An SSID descriptor is a regular network configuration file as used in LFS BOOK. +it means that if SSID "IPV4" use ipv4-static, the the descriptor "IPV4" will be + + cat > /etc/sysconfig/network.d/IPV4 << "EOF" + ONBOOT=yes + SERVICE=ipv4-static + IP=192.168.1.1 + GATEWAY=192.168.1.2 + PREFIX=24 + BROADCAST=192.168.1.255 + EOF + +and if the "DHCP" SSID use dhcp : + + cat > /etc/sysconfig/network.d/DHCP << "EOF" + ONBOOT="yes" + SERVICE="dhcpcd" + DHCP_START="-o" + DHCP_STOP="-k -o" + # the '-o' prevent your interface being destroyed by dhcpcd + + # Set PRINTIP="yes" to have the script print + # the DHCP assigned IP address + PRINTIP="no" + + # Set PRINTALL="yes" to print the DHCP assigned values for + # IP, SM, DG, and 1st NS. This requires PRINTIP="yes". + PRINTALL="no" + EOF + +for convenience, your ip manager will fall back to /etc/sysconfig/network.d/AUTO + when no SSID descriptor is available. + +Then install a common/automatic network configuration: +I use dhcpcd: + + cat > /etc/sysconfig/network.d/AUTO << "EOF" + ONBOOT="yes" + SERVICE="dhcpcd" + DHCP_START="-o" + DHCP_STOP="-k -o" + # the '-o' prevent your interface being destroyed by dhcpcd + + # Set PRINTIP="yes" to have the script print + # the DHCP assigned IP address + PRINTIP="no" + + # Set PRINTALL="yes" to print the DHCP assigned values for + # IP, SM, DG, and 1st NS. This requires PRINTIP="yes". + PRINTALL="no" + EOF + +3) The netdevice file (The network description) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +We've installed an example file in /etc/sysconfig/network.d + +Now edit the newly created netdevices file: +Which should contains something similar to: + +network={ + network_name=LaboPhy + # ip of the permanent device + ip=192.168.0.23 + # mac address of the permanent device + mac=00:0F:B5:EE:88:8C +} + + +You will directly see that you can define more than one network and also more +than one permanent device by duplicating the network blocs + +You can feed this file by running directly arpdiscover when you plug in a new +network: + +arpdiscover IP iterations computer_network_device + + +another usefull tool to do this would be netdiscover + + + +4) Feeding our netdevices file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The perfect tool: NetDiscover + +use it as follow: + +netdiscover -i IFACE + +it will show you everything connected to your network (and more) + + +CHANGELOG: +2007 11 11 First release, first send to lfshint +2007 11 22 Second release added netdiscover method and some bugs fixed + + avahi-daemon reload in ifplugd.action + + a work around for bad promiscuous netcards mode -- http://linuxfromscratch.org/mailman/listinfo/hints FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page
