Como escrever um script para ler o SSID wifi e a senha da unidade USB na inicialização e logon automático para a rede wifi

2

Eu tenho um sistema embarcado que está rodando Debian. Eu quero ser capaz de fornecer informações SSID e senha de rede Wi-Fi através de um pen drive USB. Dessa forma, posso implantá-lo facilmente em qualquer rede Wi-Fi.

Seria possível na inicialização ter um script para ler o SSID e a senha do Wi-Fi da unidade USB e conectar-se automaticamente à rede Wi-Fi? Alguém tem um script para fazer isso?

Existe uma maneira melhor de conseguir isso?

    
por sizzle 14.05.2013 / 20:42

1 resposta

2

Aqui está uma ideia usando o Perl para executar o script para você. Você poderia traduzi-lo para o idioma de sua preferência, ou até mesmo para bater. São realmente os comandos para se conectar ao wireless que contam. Perl é apenas um meio para eu fazer isso rapidamente, sua ideia de rápido pode ser diferente. Uma nota, se você não está acostumado a ler Perl, todos os backticks são um comando shell.

O Gnome, por exemplo, construiu o tratamento de lembrar de suas redes e fará isso para um usuário logado, mas ... Estou assumindo uma configuração sem cabeça. O que é divertido, uma configuração headless itinerante que se conectará automaticamente ao wifi. Legal.

Isso pressupõe uma rede wpa e o iwconfig instalado (que eu aposto que vem com seus pacotes sem fio) e o wpa_supplicant.

Isso representa apenas uma rede definida em um csv. E supõe que funcionará na primeira tentativa. Você precisará detalhar os parâmetros reais das redes desejadas ou adicionar outro tratamento. Mas essa estrutura geral fará isso rapidamente.

Arquivo @ /mnt/usb/network.csv no formato "target SSID, passphrase":

myWifiSSID,mypassword

Arquivo @ /home/me/connect.pl (com chmod 755 por exemplo):

#!/usr/bin/perl
# Set to your device name.
$iface = "wlan0";

# Set to your USB mount point & network definition CSV file.
$networkdefinition = "/mnt/usb/network.csv";

# Get the contents of your file on USB stick.
$line = 'cat $networkdefinition';

# Read the CSV into parts.
@parts = split(/,/,$line);

# Get a list of wireless networks in range.
# And grep that for the network we're looking for.
$foundnetworks = 'iwlist $iface scan | grep 'ESSID:"$parts[0]"'';

# See if this turns up the network we're looking for
if (length($foundnetworks)) {
        # It did. Let's bring up that interface.                    
        'wpa_supplicant -B -i $iface -c <(wpa_passphrase $parts[0] $parts[1])';
} else { 
        # Network not in range, perform error handling etc.
}

No seu crontab:

@reboot /home/me/connect.pl

Advertências:

  • Precisa de melhor tratamento de erros / uma maneira de executar mais regularmente
  • Precisa de manipulação de outras redes que não WPA
  • A solução Cron supõe que a montagem estará disponível até lá.

Essa é a coisa divertida de se ampliar à medida que você avança, mas pode ser uma maneira rápida de inicializar usando o arquivo CSV do pendrive USB para especificar sua rede Wi-Fi.

A carne real disso são esses dois comandos:

  • iwconfig
  • wpa_supplicant

O resto é apenas uma ideia de como implementar a solução proposta para conexão automática a um aplicativo Wi-Fi.

    
por 14.05.2013 / 21:35