NetProfiler - Um solução para quem passeia por várias redes.
Publicado por Laudivan Freire de Almeida 06/11/2008
[ Hits: 5.022 ]
Esse script tem por objetivo facilitar a configuração para diferentes redes.
A motivação nasceu após levar meu notebook de uma rede para outra, alguma com wpa, com enlace de par trançado ou wifi. Então experimentei algumas soluções (como o laptop-net) até que resolvi fazer uma que se adequa-se às minhas necessicades.
Contudo, tenho certeza que vai ajudar muitas pessoas por aí na mesma situação.
#!/bin/sh #################################################################### # NetProfiler - script para configuração de ambiente de rede. # # ---------------------------------------------------------------- # # Por: Laudivan Freire de Almeida <laudivan@gmail.com> # # Em: Seg Nov 3 12:14:41 BRT 2008 # # ---------------------------------------------------------------- # # Distribuído no VivaOLinux.com.br # # Toda cópia e modificação fica autorizada pelo autor, bem como # # sua modificação e uso para qualquer fim. # #################################################################### PROFILESDIR="/usr/local/etc/netprofiler" PID="/var/run/netprofiler" WPASUPPLICANTD="/sbin/wpa_supplicant" WPAPASSPHRASE="/usr/bin/wpa_passphrase" DHCLIENTD="/sbin/dhclient3" IFCONFIG="/sbin/ifconfig" ROUTE="/sbin/route" SUDO="/usr/bin/sudo" USESUDO="sim" #Teste da pasta de configuração if [ ! -e ${PROFILESDIR} ]; then mkdir ${PROFILESDIR} fi ###################################################################### # Excluir profile # ###################################################################### function excluir_profile(){ uid_teste if [ -z ${EXCLUIRPROFILE} ]; then echo "Voce deve selecionar um profile." echo "Use: $(basename ${0}) -d PROFILE" exit 1 fi if [ -e ${PID} ]; then source ${PID} if [ ${PROFILE} == "${EXCLUIRPROFILE}" ]; then echo "Este profile esta em uso. Pare o NetProfiler e tente novamente" exit 1 fi fi if [ -e ${PROFILESDIR}/${EXCLUIRPROFILE} ]; then rm -fr ${PROFILESDIR}/${EXCLUIRPROFILE} fi } ###################################################################### # Criar profile # ###################################################################### function criar_profile(){ uid_teste if [ -z ${PROFILE} ]; then echo "Voce deve especificar um nome para o profile." echo "Use: $(basename ${0}) -c PROFILE" exit 1 fi if [ -e ${PROFILESDIR}/${PROFILE} ]; then echo "Ja existe um profile chamado ${PROFILE}. " exit 1 fi PROFILEDIR="${PROFILESDIR}/${PROFILE}" PROFILEDIRTMP="/tmp/${PROFILE}" PROFILETMP="${PROFILEDIRTMP}/profile.conf" echo "Qual interface sera usada para essa rede?" read -e DEVICE #TODO:Fazer teste de existência da interface if [ -z ${DEVICE} ]; then echo "Voce deve digitar uma interface." exit 1 fi mkdir ${PROFILEDIRTMP} echo "DEVICE=\"${DEVICE}\"" > ${PROFILETMP} echo "Pretende usar ip automatico para essa rede? (sim/nao)" read -e USEDHCP echo >> ${PROFILETMP} case ${USEDHCP} in sim) echo "USEDHCP=\"${USEDHCP}\"" >> ${PROFILETMP} ;; nao) echo >> ${PROFILETMP} echo "Qual sera o ip? (ie 192.168.0.24)" read -e ADDRESS echo "ADDRESS=\"${ADDRESS}\"" >> ${PROFILETMP} echo "Qual sera a mascara de rede? (ie 255.255.255.0)" read -e NETMASK echo "NETMASK=\"${NETMASK}\"" >> ${PROFILETMP} echo "Qual sera o gateway da rede? (ie 192.168.0.1)" read -e GATEWAY echo "GATEWAY=\"${GATEWAY}\"" >> ${PROFILETMP} ;; *) echo "Deve ser digitado sim ou nao" rm -fr ${PROFILEDIRTMP} exit 1 ;; esac echo "Entre com o mac se pretende mudar, ou ENTER caso o contrário." read -e HWADDRESS if [ -n "${HWADDRESS}" ]; then echo "HWADDRESS=\"${HWADDRESS}\"" >> ${PROFILETMP} fi echo "Entre com os servidores DNS(separados por espaco) ou ENTER para nenhum." read -e NAMESERVERS if [ -n "${NAMESERVERS}" ]; then echo "NAMESERVERS=\"${NAMESERVERS}\"" >> ${PROFILETMP} echo >> ${PROFILETMP} fi echo "USAR WPA SUPPLICANT?(sim/nao)" read -e USEWPASUPPLICANT echo >> ${PROFILETMP} WPACONFTMP="${PROFILEDIRTMP}/wpa.conf" case ${USEWPASUPPLICANT} in sim) echo "USEWPASUPPLICANT=\"sim\"" >> ${PROFILETMP} echo "Qual é o SSID da rede?" read -e SSID echo "Selecione o tipo de criptografia que sera usada (none, wep, wpa-psk, wpa2-psk):" read -e CRIPT case ${CRIPT} in wpa-psk) echo "Entre com a frase:" read -e PHRASE echo -e "network={" > ${WPACONFTMP} echo -e "\tssid=\"${SSID}\"" >> ${WPACONFTMP} ${WPAPASSPHRASE} ${SSID} ${PHRASE} | grep psk | tail -n 1 >> ${WPACONFTMP} echo -e "\tscan_ssid=1" >> ${WPACONFTMP} echo -e "\tkey_mgmt=WPA-PSK" >> ${WPACONFTMP} echo -e "\tproto=WPA" >> ${WPACONFTMP} echo -e "\tpairwise=CCMP TKIP" >> ${WPACONFTMP} echo -e "\tgroup=CCMP TKIP" >> ${WPACONFTMP} echo -e "}" >> ${WPACONFTMP} ;; wpa2-psk) echo "Entre com a frase:" read -e PHRASE echo -e "network={" > ${WPACONFTMP} echo -e "\tssid=\"${SSID}\"" >> ${WPACONFTMP} ${WPAPASSPHRASE} ${SSID} ${PHRASE} | grep psk | tail -n 1 >> ${WPACONFTMP} echo -e "\tscan_ssid=1" >> ${WPACONFTMP} echo -e "\tkey_mgmt=WPA-PSK" >> ${WPACONFTMP} echo -e "\tproto=WPA2" >> ${WPACONFTMP} echo -e "\tpairwise=CCMP TKIP" >> ${WPACONFTMP} echo -e "\tgroup=CCMP TKIP" >> ${WPACONFTMP} echo -e "}" >> ${WPACONFTMP} ;; wep) echo "Entre com a primeira chave: " read KEY0 echo "Entre com a segunda chave:" read KEY1 echo -e "network={" > ${WPACONFTMP} echo -e "\tssid=\"${SSID}\"" >> ${WPACONFTMP} echo -e "\tkey_mgmt=NONE" >> ${WPACONFTMP} echo -e "\twep_key0=${KEY0}" >> ${WPACONFTMP} echo -e "\twep_key1=${KEY1}" >> ${WPACONFTMP} echo "}" >> ${WPACONFTMP} ;; *) echo -e "network={" > ${WPACONFTMP} echo -e "\tssid=\"${SSID}\"" >> ${WPACONFTMP} echo -e "\tkey_mgmt=NONE" >> ${WPACONFTMP} echo -e "}" >> ${WPACONFTMP} ;; esac echo "Qual o driver wpa supplicant para essa interface." echo "(hostap, hermes, madwifi, atmel, wext, ndiswrapper, broadcom, ipw, wired, bsd, ndis)" read -e DRVWPA if [ -n "${WPASUPPLICANTDRV}" ]; then echo "WPASUPPLICANTDRV=\"${WPASUPPLICANTDRV}\"" >> ${PROFILETMP} else echo "WPASUPPLICANTDRV=\"wext\"" >> ${PROFILETMP} fi echo "Altere o arquivo ${PROFILEDIR}/wpa.conf para ajusta-lo." ;; *) echo "O WPA SUPPLICANT nao sera iniciado para essa rede." ;; esac mv ${PROFILEDIRTMP} ${PROFILEDIR} exit 0 } ###################################################################### # Executa o teste de permissão do usuário, e se estiver # # configurado executa o programa com o sudo. # ###################################################################### function uid_teste() { if [ $UID -eq 0 ]; then return fi if [ ${USESUDO}="sim" ]; then echo " **Assumindo permissões de ROOT**" sudo ${0} -${OPT} ${OPTARG} exit 0 fi echo " Você deve executar como root" exit 1 } ###################################################################### # Para o netprofiler fechando os programas envolvidos # ###################################################################### function parar_netprofiler() { uid_teste echo "Parando NetProfiler" if [ -e ${PID} ]; then source ${PID} if [ -n "${USEWPASUPPLICANT}" ]; then killall ${WPASUPPLICANTD} fi if [ -n "${USEDHCP}" ]; then killall ${DHCLIENTD} fi ${ROUTE} del default ${IFCONFIG} ${DEVICE} down rm -f ${PID} fi } ###################################################################### # Para o netprofiler fechando os programas envolvidos # ###################################################################### function mostrar_status() { if [ -e ${PID} ]; then source ${PID} echo "STATUS: O NetProfiler esta OnLine" echo " PROFILE:${PROFILE}" echo " DEVICE=${DEVICE}" echo " USEDHCP=${USEDHCP}" echo " USEWPASUPPLICANT=${USEWPASUPPLICANT}" echo else echo " O NetProfiler não está rodando." fi } ###################################################################### # Lista os profiles escolhidos # ###################################################################### function listar_profiles () { echo "Listando profiles em ${PROFILESDIR}:" for PROFILEDIR in ${PROFILESDIR}/*; do PROFILE="$(basename ${PROFILEDIR})" if [ -d $PROFILEDIR ] ; then echo " ${PROFILE}" fi done exit 0 } ###################################################################### # Configura a rede conforme o profile escolhido # ###################################################################### function usar_profile () { uid_teste parar_netprofiler if [ -z ${PROFILE} ]; then echo "Voce deve selecionar um profile." echo "Use: $(basename ${0}) -u PROFILE" exit 1 fi echo "Iniciando profile: $PROFILE" source $PROFILESDIR/$PROFILE/profile.conf echo "PROFILE=${PROFILE}" > ${PID} echo "DEVICE=${DEVICE}" >> ${PID} if [ -n "${HWADDRESS}" ]; then ${IFCONFIG} ${DEVICE} hw ether ${HWADDRESS} up else ${IFCONFIG} ${DEVICE} up fi if [ -n "${USEWPASUPPLICANT}" ]; then echo "USEWPASUPPLICANT=${USEWPASUPPLICANT}" >> ${PID} ${WPASUPPLICANTD} -P /var/run/wpasupplicant -B -i ${DEVICE} -c ${PROFILESDIR}/${PROFILE}/wpa.conf -d -D ${WPASUPPLICANTDRV} fi if [ -n "${USEDHCP}" ]; then echo "USEDHCP=${USEDHCP}" >> ${PID} $DHCLIENTD ${DEVICE} else ${IFCONFIG} ${DEVICE} ${ADDRESS} netmask ${NETMASK} ${ROUTE} add default gw ${GATEWAY} fi #Caso esteja setada a variável NAMESERVERS modificar resolv.conf mesmo com dhcp if [ -n "${NAMESERVERS}" ]; then echo "#resolv.conf modificado pelo netprofiler" > /etc/resolv.conf for NAMESERVER in ${NAMESERVERS}; do echo "nameserver ${NAMESERVER}" >> /etc/resolv.conf done fi exit 0 } ###################################################################### # Exibe a ajuda do sistema. # ###################################################################### function mostrar_ajuda () { echo "Utilize: " echo " Usar um profile : $(basename ${0}) -u PROFILE" echo " Listar os profiles : $(basename ${0}) -l" echo " Parar o NetProfiler: $(basename ${0}) -p" echo " Mostrar status : $(basename ${0}) -s" echo " Criar um Profile : $(basename ${0}) -c PROFILE" echo " Apagar um Profile : $(basename ${0}) -d PROFILE" echo " Mostrar a ajuda : $(basename ${0}) -h" echo exit 0 } # Obtendo as opções de linha de comando. getopts "u:lSsc:d:ph" OPT case $OPT in u) PROFILE=${OPTARG} usar_profile ;; l) listar_profiles ;; p) parar_netprofiler ;; s) mostrar_status ;; h) mostrar_ajuda ;; c) PROFILE=${OPTARG} criar_profile ;; d) EXCLUIRPROFILE=${OPTARG} excluir_profile ;; *) mostrar_ajuda exit 1 ;; esac exit 0
Verificar status de carga da bateria do notebook
Busca e move arquivos renomeando-os conforme a máscara
Backup da base de dados PostgreSQL
Balanceamento de Carga e Alta Disponibilidade usando IPTABLES
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (3)
Instalação Uefi com o instalador clássico do Mageia (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta