Hamachi - Controle Gráfico
Publicado por Perfil removido 31/08/2007
[ Hits: 6.467 ]
Este script em bash cria uma interface gráfica para o Hamachi, um programa que cria redes virtuais.
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5848
Sei que existe o gHamachi, mas criei este só para testar minhas habilidades em shell-script.
É preciso ter o zenity para criar os diálogos e ter a configuração do gksudo para executar comandos como o root (pelo menos o /sbin/tuncfg).
#!/bin/bash
#Script para controle gráfico do Hamachi
#Você precisa ter o zenity instalado,
#além do hamachi, é claro.
#Também é necessário que o seu usuário possa usar
#o gksudo para executar programas como o root
#
#Hamachi é propriedade de Applied Networking Inc.
#
#Script original feito por Xisberto [xisberto (at) gmail (dot) com]
#e licenciado sob a GNU GPLv3. Detalhes em http://www.gnu.org/licenses/gpl-3.0.txt
#Mensagem de boas vindas mostrando o status atual
zenity --info --text="Iniciando a interface de configuração do Hamachi. Status atual do Hamachi:\n\n `hamachi`"
#Função para selecionar uma rede
#Chama o zenity para listar as redes
#Passa o resultado do zenity por 2 cut,
#para eliminar os colchetes inicial e final
#mas sempre haverão problemas com redes com [ ou ] no nome
select_net()
{
#Dois subshells, leia com atenção!
#o 'cut -d* -f2' evita que o * vindo da listagem chame os arquivos no diretório atual
#o 'grep ]' filtra para não mostrar os ips conectados
rede="`echo $redes | zenity --list --text='Escolha uma rede:' --column 'Redes' $(hamachi list|cut -d* -f2|grep ])`"
#Dois cut para remover os [ ]
rede="$(echo $rede | cut -d[ -f2 | cut -d] -f1)"
echo $rede
}
#Função para juntar-se a uma rede.
#Chama o zenity para conseguir um nome para a rede
#e depois para conseguir uma senha para a rede.
#Depois informa via zenity o resultado do comando join do hamachi
join()
{
red_nom=`zenity --entry --text='Entre com o nome da rede:'`
red_sen=`zenity --entry --text='Entre com a senha da rede:'`
zenity --info --text="`hamachi join $red_nom $red_sen`"
}
#Função para criar uma rede.
#Chama o zenity para conseguir um nome para a rede
#e depois para conseguir uma senha para a rede.
#Depois informa via zenity o resultado do comando create do hamachi
criar_rede()
{
red_nom=`zenity --entry --text='Entre com o nome da rede:'`
red_sen=`zenity --entry --text='Entre com a senha da rede (não deixe em branco!):'`
zenity --info --text="`hamachi create $red_nom $red_sen`"
}
#Usa a função select_net para selecionar uma rede
#e a passa para o hamachi delete
del_rede()
{
rede=`select_net`
zenity --info --text="`hamachi delete $rede`"
}
#Usa a função select_net para selecionar uma rede
#e a passa para o hamachi leave
leave()
{
rede=`select_net`
zenity --info --text="`hamachi leave $rede`"
}
#Usa a função select_net para selecionar uma rede
#e a passa para o hamachi go-online
online()
{
rede=`select_net`
zenity --info --text="`hamachi go-online $rede`"
}
#Usa a função select_net para selecionar uma rede
#e a passa para o hamachi go-offline
offline()
{
rede=`select_net`
zenity --info --text="`hamachi go-offline $rede`"
}
#Submenu para os comandos de rede.
redes()
{
#Inicia a variável de controle com um valor genérico (problemas com "" e " " me levaram a isso)
NETACTION="r"
while [ "$NETACTION" != "Voltar" ]
do
NETACTION=`zenity --list --text="Escolha uma opção:" --column "Opções de Rede" "Entrar em uma rede" "Sair de uma rede" "Anunciar-se em uma rede" "Invisível em uma rede" "Criar rede" "Apagar rede" "Listar redes" "Voltar"`
echo $NETACTION
case $NETACTION in
"Entrar em uma rede") join ;;
"Sair de uma rede") leave ;;
"Anunciar-se em uma rede") online ;;
"Invisível em uma rede") offline ;;
"Criar rede") criar_rede ;;
"Apagar rede") del_rede ;;
"Listar redes") zenity --info --text="Redes atuais:\n$(hamachi list)" ;;
esac
done
}
#Inicia a variável de controle com um valor genérico
ACTION="b"
#Loop principal. Veja que o script não termina se o botão 'cancelar' for clicado.
#É necessário selecionar 'Sair' e clicar em ok.
while [ "$ACTION" != "Sair" ]
do
#Chama o zenity para listar as opções.
ACTION=`zenity --list --text="Escolha uma opção:" --column "Opções" "Executar '/sbin/tuncfg'" "Parar '/sbin/tuncfg'" "Iniciar Hamachi" "Parar Hamachi" "Ver status" "Logar" "Logout" "Escolher nick" "Redes" "Sair"`
#Para informar a ação escolhida. Pode ser útil quando um comando novo 'não funciona'
echo $ACTION
#Trata a ação escolhida.
case $ACTION in
#Executa o tuncfg com poderes de root. gksudo cuida da senha
"Executar '/sbin/tuncfg'") gksudo /sbin/tuncfg ;;
#Mata todos os tuncfg rodando. Seria bom trocar por algo menos bruto?
"Parar '/sbin/tuncfg'") gksudo killall tuncfg ;;
#O '&&' evita um zenity vazio
"Iniciar Hamachi") zenity --info --text="`hamachi start && echo 'Hamachi inicado'`" ;;
"Parar Hamachi") zenity --info --text="`hamachi stop`" ;;
"Ver status") zenity --info --text="`hamachi`" ;;
"Logar") zenity --info --text="`hamachi login`" ;;
"Logout") zenity --info --text="`hamachi logout`" ;;
#Dois subshells, leia com calma
"Escolher nick") zenity --info --text="$(hamachi set-nick `zenity --entry --text='Digite o nick:'`)" ;;
#Um submenu
"Redes") redes ;;
esac
done
Script para captura de campos de formulário com conversão URL encode.
Front para o slackpkg em dialog
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Como programar um sistema de controle para distribuições linux em c? (0)
Compartilhar ZEBRA ZD220 na rede (2)
Como programar um software que seja utilizado para coleta de dados em ... (1)









