Script Macxchange para alterar o MAC e o nome do host no Ubuntu 12.04

0

Estou tentando adaptar um script no backtrack para trabalhar com o Ubuntu. Eu continuo recebendo um erro na linha 14 que é o " se [$? == 0]; então " linha

o script foi encontrado em link

o código está abaixo

#!/bin/bash
#author: Jorge L. Vazquez
#purpose: this script will change the mac address to random
#and will pick a random word from password.lst in jtr for hostname
#change variables "interface" and "file" to your settings
#also macchanger needs to be installed

INTERFACE=eth0
FILE=/pentest/passwords/jtr/password.lst
WORD=$(sort -R $FILE | head -1)

#changing mac address to random
ifconfig $INTERFACE down > /dev/null
if [ $? == 0 ]; then
    printf "%s\nChanging mac address...\n"
    macchanger -r $INTERFACE
else
    printf "%sScript encounter an error, sorry...\n"
    exit 1
fi

#changing hostname to random word from password.lst
printf "%s\nChanging Hostname...\n"
OLDHOST=$(hostname)
hostname $WORD
if [ $? == 0 ]; then
    printf "%sPrevius Hostname: $OLDHOST \n"
    printf "%sRandom Hostname: $WORD \n"
else
    printf "%sScript encounter an error, sorry...\n"
    exit 1
fi

#putting interface up
ifconfig $INTERFACE up > /dev/null
printf "\n"


#END

E o arquivo de lista de palavras para o hostfile (password.lst) se parece com isso

# A couple of merged /etc/hosts files -- 
#
4000ex
a-lhi-bbn-01
a-lhi-sri-03
a00
a1
a2

Eu corro o script usando sh filename.sh e eu dei acesso executável e o macchanger está instalado, mas ainda recebo um erro

    
por Rick T 08.05.2013 / 20:42

1 resposta

2

sh não é bash, então não execute um script bash com sh. Execute-o com ./filename (requer que o script seja executável e use o shebang) ou bash ./filename (requer apenas que o script seja legível e o shebang seja ignorado).

Também não é uma boa ideia usar extensões para scripts, especialmente não .sh quando o script não é um script sh.

O próprio script usa a sintaxe compatível com POSIX sh, com exceção do comando [ que não tem nenhum operador == no POSIX. Para comparar duas strings por igualdade com o comando [ , o operador é = . [ "$?" = 0 ] .

Dito isto, testar se $? é 0 ou não é um pouco inútil. É melhor apenas testar o comando diretamente, em vez de executar o comando, e executar outro comando para determinar se o comando anterior foi bem-sucedido.

if ifconfig "$interface" down > /dev/null; then
    ...
else
    ...
fi
    
por geirha 08.05.2013 / 22:07