Pagina 1 di 1

scriptino bash

Inviato: giovedì 12 marzo 2009, 21:17
da garrett
volevo chiedervi se è possibile fare uno script bash o C o C++ o C# che faccia questo:

- acceda al gatewat 192.168.X.ABC
- inserisco User e Pass
- faccia il reboot del modem

così se sono assente da casa i miei possono riavviare il modem senza dover chiamarmi

(grazie tele2  :-X )

Re: scriptino bash

Inviato: giovedì 12 marzo 2009, 21:57
da Elrond
Concettualmente è possibile, praticamente se conosci anche i vari comandi da eseguire ti posso aiutare

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 14:21
da garrett
scusa per il ritardo!
allora dovrei

aprire firefox e digitare http:// 192.168.1.XXX
inserire USERNAME
inserire PASSWORD
cliccare su managment
cliccare su save/reboot

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 14:59
da Demiurgo
Non credo che così sia possibile... almeno non in questo modo...

Hai provato a vedere se il modem accetta connessioni telnet?

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 20:05
da garrett
mmm...ehm...cioè?
so cos'è telnet ma non so come fare a capirlo...

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 20:57
da Demiurgo
Prova a dare da terminale:

Codice: Seleziona tutto

telnet (ip del router)

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 21:24
da Elrond
Ho provato con il mio e funziona telnet, però non capisco come si possono inserire tramite uno script nome utente e password (nome utente in realtà forse sì, ma password no) e fare le altre operazioni

Re: scriptino bash

Inviato: lunedì 16 marzo 2009, 21:31
da Demiurgo
Elrond ha scritto: Ho provato con il mio e funziona telnet, però non capisco come si possono inserire tramite uno script nome utente e password (nome utente in realtà forse sì, ma password no) e fare le altre operazioni
Beh.. solitamente con echo nome utente e password entrano bene, a volte bisogna fare un po' di testing, ma io l'ho usato spesso con sudo e ti posso assicurare che funziona...

Per quanto riguarda il reboot solitamente da telnet esiste un comando apposta per riavviare il router ;)

Re: scriptino bash

Inviato: martedì 17 marzo 2009, 0:18
da Angelo.T
Ciao

Il tuo router supporta connessioni SSH?
Se la risposta è affermativa puoi provare questo script in python che ho fatto per un mio amico con il tuo stesso problema.
Basta eseguirlo con cron ogni tot ore/minuti e se la linea è caduta ti riavvia il router da SSH.

Necessita di un modulo di python aggiuntivo Pexpect:

Codice: Seleziona tutto

sudo apt-get install python-pexpect
Per utilizzarlo basta che copi in un file di testo lo script e dai l'estensione .py, nella stessa directory dello script ti crea un file di log (RReboot.log)

è un po grezzo ma il suo lavoro lo fà  :-[

Codice: Seleziona tutto

#!/usr/bin/env python

import pexpect
import os
from datetime import datetime
import urllib

data = datetime.today()
f = open('RReboot.log', 'a')

def ssh_command (user, host, password, command):
    ssh_newkey = 'Are you sure you want to continue connecting'
    child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command))
    i = child.expect([pexpect.TIMEOUT, ssh_newkey, 'password: '])
    if i == 0: # Timeout
        f.write('\nERROR! SSH could not login. Here is what SSH said:\n' + str(child.before) + str (child.after))
        f.close()
        return None
    if i == 1: # SSH does not have the public key. Just accept it.
        child.sendline ('yes')
        child.expect ('password: ')
        i = child.expect([pexpect.TIMEOUT, 'password: '])
        if i == 0: # Timeout
            f.write('\nERROR! SSH could not login. Here is what SSH said:\n' + str(child.before) + str (child.after))
            f.close()
            return None       
    child.sendline(password)
    return child

def main ():

    host = '192.168.X.X'		#inserire indirizzo del router
    user = 'router username' 	#inserire nome utente del router
    password = 'password'		#inserire password del router
    child = ssh_command (user, host, password, 'reboot')

f.write('\n' + str(data) + '\ncheck connection')
try: urllib.urlopen('http://www.google.it')
except IOError:
	if __name__ == '__main__':
		    try:
		    	main()
		    	f.write('\nServer does not respond, router reboot in progress')
		    	f.close()
		    except Exception, e:
		    	f.write('\n' + str(e))
		    	f.close()
		    	os._exit(1)
f.write('\ncheck passed')
f.close()
p.s.
è la prima volta che uso python, consigli, critiche e maledizioni sono ben accetti se qualche pythonista volesse dagli un occhiata  :)

Ciao