#!/bin/bash # # Copyright (c) 2012 # # Authors: Wild Man, Krytarik # Helpers: chili555 # # This script gathers the infos necessary for troubleshooting a wireless # connection and saves them in a text file, wrapping it in an archive if it # exceeds the size limit of 19.5 kB for ".txt" files on the Ubuntu Forums. # ############################################################################ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # SCRIPTDATE="2014-08-04 20:47 +0200" FILEBASE="wireless-info" OUTPUTDIR=$(pwd) OUTPUTDIRFB="/tmp" MODMATCHES="(air|ar5|ath|carl|at7|iwl|ipw|rt(2|3|5|6|7)|rtl|r(818|871)|8192(cu|du)|ssb|wl|b43|bcma|brcm|ndis)[^[:punct:] ]*" LSMODMATCHES="wmi" DMESGMATCHES="(wlan0|eth1|firmware|[nN]etwork)[^[:punct:] ]*" BLACKLISTEXCL="(alsa-base|blacklist-(firewire|framebuffer|modem|oss|watchdog)|fglrx|nvidia|fbdev|bumblebee)" export LANG="en_US.UTF-8" export LANGUAGE="en_US:en" export LC_ALL="en_US.UTF-8" if [ -t 0 ]; then SUDO="sudo" elif [ -x /usr/bin/pkexec ]; then SUDO="pkexec" elif [ -x /usr/bin/gksudo ]; then SUDO="gksudo" elif [ -x /usr/bin/kdesudo ]; then SUDO="kdesudo" fi exec 3>&1 4>&2 exec 1> "$OUTPUTDIR/$FILEBASE.txt" if [ "$?" != "0" ]; then printf "\nCannot write output file in \"%s\", trying in \"%s\" instead.\n" "$OUTPUTDIR" "$OUTPUTDIRFB" >&2 OUTPUTDIR="$OUTPUTDIRFB" exec 1> "$OUTPUTDIR/$FILEBASE.txt" if [ "$?" != "0" ]; then printf "\nCannot write output file in \"%s\" either, aborting.\n\n" "$OUTPUTDIR" >&2 exit 1 fi fi exec 2>&1 printf "\n########## wireless info START ##########\n\n" REPORTDATE=$(date +"%d %b %Y %H:%M %Z %z") SCRIPTDATE=$(date -u -d "$SCRIPTDATE" +"%d %b %Y %H:%M %Z %z") printf "Report from: %s\n\n" "$REPORTDATE" printf "Script from: %s\n" "$SCRIPTDATE" printf "\n##### release #####\n\n" lsb_release -idrc printf "\n##### kernel #####\n\n" uname -srvmpio echo cat /proc/cmdline | sed 's/root=[^ ]*//;s/[ ]\+/, /g;s/^BOOT_IMAGE=[^ ]*/Parameters:/' printf "\n##### desktop #####\n\n" DESKTOP="$DESKTOP_SESSION" if [ -z "$DESKTOP" ]; then DESKTOP=$(sed -n 's/^Session=\(.*\)$/\1/p' "$HOME/.dmrc") DESKDMRC=" (from ~/.dmrc)" fi if [ -n "$DESKTOP" ]; then if [ -f "/usr/share/xsessions/$DESKTOP.desktop" ]; then DESKTOP=$(sed -n 's/^Name=\(.*\)$/\1/p' "/usr/share/xsessions/$DESKTOP.desktop") fi echo "${DESKTOP/ Session/}${DESKDMRC}" else echo "Could not be determined." fi printf "\n##### lspci #####\n\n" lspci -nnk | grep -iA2 '^[^[:space:]].*net' | sed '/^--$/d; /^[^[:space:]]/ i\\' printf "\n##### lsusb #####\n\n" lsusb printf "\n##### PCMCIA Card Info #####\n\n" pccardctl info printf "\n##### rfkill #####\n\n" rfkill list all printf "\n##### lsmod #####\n\n" LSMOD=$(lsmod | egrep "(^|[[:punct:] ])($MODMATCHES|$LSMODMATCHES)([[:punct:] ]|$)") echo "$LSMOD" printf "\n##### interfaces #####\n\n" sed '/^#/d;s/wpa-psk [[:graph:]]\+/wpa-psk /' /etc/network/interfaces printf "\n##### ifconfig #####\n\n" ifconfig | sed '/^lo[ ]/,/^$/d' printf "\n##### iwconfig #####\n\n" iwconfig printf "\n##### route #####\n\n" route -n printf "\n##### resolv.conf #####\n\n" grep -v '^#' /etc/resolv.conf printf "\n##### nm-tool #####\n\n" nm-tool printf "\n##### NetworkManager.state #####\n\n" cat -s /var/lib/NetworkManager/NetworkManager.state printf "\n##### NetworkManager.conf #####\n\n" grep -v '^#' /etc/NetworkManager/NetworkManager.conf if [ -f /etc/NetworkManager/nm-system-settings.conf ]; then printf "\nnm-system-settings.conf (used up to Ubuntu 10.04):\n\n" grep -v '^#' /etc/NetworkManager/nm-system-settings.conf fi printf "\n##### iw reg get #####\n\n" iw reg get printf "\n##### iwlist channels #####\n\n" iwlist chan printf "\n##### iwlist scan #####\n\n" if [ -n "$SUDO" ]; then trap "" 2 3 IWLISTSCAN=$($SUDO iwlist scan || echo "Acquisition of admin privileges failed.") trap 2 3 if [[ $IWLISTSCAN =~ ^[[:space:]]*Frequency: ]]; then echo "Channel occupancy:" grep '^[[:space:]]*Frequency:' <<< "$IWLISTSCAN" | sort | uniq -c | sed 's/^[ ]*\([0-9]\+\)[[:space:]]*/ \1 WLAPs on /' echo fi grep -v '^[[:space:]]*IE:[ ]*Unknown:' <<< "$IWLISTSCAN" else echo "No way to acquire admin privileges found." fi printf "\n##### module infos #####\n\n" MODULES=$(egrep "^$MODMATCHES" <<< "$LSMOD" | awk '{print $1}') for MODULE in $MODULES; do MODINFO=$(modinfo $MODULE) printf "[%s]\n%s\n\n" "$MODULE" "$MODINFO" done printf "\n##### module parameters #####\n\n" for MODULE in $MODULES; do if [ -d /sys/module/$MODULE/parameters ]; then MODPARAMS=$(grep -H '^[[:graph:]]' /sys/module/$MODULE/parameters/* | sed 's#^.*/##;s/:/: /') printf "[%s]\n%s\n\n" "$MODULE" "$MODPARAMS" fi done printf "\n##### /etc/modules #####\n\n" grep -v '^#' /etc/modules printf "\n##### blacklists #####\n\n" for CONFFILE in $(ls /etc/modprobe.d/*.conf | egrep -v "$BLACKLISTEXCL"); do BLACKLIST=$(grep '^blacklist' $CONFFILE) if [ -n "$BLACKLIST" ]; then printf "[%s]\n%s\n\n" "$CONFFILE" "$BLACKLIST" fi done printf "\n##### udev rules #####\n\n" egrep '^(#.*device|[^#]|$)' /etc/udev/rules.d/70-persistent-net.rules printf "\n##### dmesg #####\n\n" dmesg | egrep "[[:punct:] ]($MODMATCHES|$DMESGMATCHES)[[:punct:] ]" printf "\n########## wireless info END ############\n\n" exec 2>&4 4>&- exec 1>&3 3>&- ##### MAC address masking ##### RESULTS=$(cat -s "$OUTPUTDIR/$FILEBASE.txt") LOCDEVSRAW=$(sed -n '/^[- ]*Device:/,/^[ ]*HW Address:/p' <<< "$RESULTS") NETDEVNAMES=($(sed -n 's/^[- ]*Device:[ ]*\([^ ]*\).*/\1/p' <<< "$LOCDEVSRAW")) NETDEVMACS=($(sed -n 's/^[ ]*HW Address:[ ]*\([^ ]*\).*/\1/p' <<< "$LOCDEVSRAW")) WLAPSRAW=$(sed -n '/^[ ]*Wireless Access Points/,/^$/p' <<< "$RESULTS") NETDEVNAMES+=($(sed -n 's/^[ ]*\*\?\([^ ]*\):.*/\1/p' <<< "$WLAPSRAW")) NETDEVMACS+=($(grep -o '\([[:alnum:]][[:alnum:]]:\)\{5\}[[:alnum:]][[:alnum:]]' <<< "$WLAPSRAW")) for NETDEVNR in "${!NETDEVMACS[@]}"; do MACMASKSED+="s/${NETDEVMACS[$NETDEVNR]}//I;" done sed "$MACMASKSED/\([[:alnum:]][[:alnum:]]:\)\{6,\}/! s/\([[:alnum:]][[:alnum:]]:\)\{5\}[[:alnum:]][[:alnum:]]//" <<< "$RESULTS" > "$OUTPUTDIR/$FILEBASE.txt" ##### The End ##### if [[ $(stat -c %s "$OUTPUTDIR/$FILEBASE.txt") -gt 19968 ]]; then tar -czf "$OUTPUTDIR/$FILEBASE.tar.gz" --remove-files -C "$OUTPUTDIR" "$FILEBASE.txt" printf "\nResults archived in \"%s.tar.gz\", as they exceed the 19.5 kB size limit for \".txt\" files on the Ubuntu Forums.\n\n" "$OUTPUTDIR/$FILEBASE" else printf "\nResults saved in \"%s.txt\".\n\n" "$OUTPUTDIR/$FILEBASE" fi