Aller au contenu

Messages recommandés

Posté(e)

Hello !

Est ce quelqu'un s'est déjàamusé àécrire un script pour activer/désactiver le wifi sur des points d'accès ?

J'ai 3 access point de chez netgear WN203 POE.

Je souhaiterai éteindre le wifi par programmation.

J'ai fouillé partout sur les forum netgear mais rien.

Dans la notice, y a la liste des commande CLI, mais je ne sais absolument pas quoi en faire, surtout que visiblement elles doivent être passées par une console telnet.

J'imaginais trouver des commandes du style http://admin:pass@ip:port/command...

Mais non.

Si quelqu'un a une piste ??!! Ce serait super !

Posté(e)

Salut,

 

Tes points d'accès sont sur un switch PoE ou tu utilises un injecteur ?

 

si injetcuer, le plus simple, un petit WP ;-)

Posté(e)

Dans le monde du réseau, il n'y a jamais d'API http Rest.

C'est traditionnellement en ligne de commande telnet/SSH.

Déjà , estime toi heureux d'avoir du telnet sur des produits grand publics comme Netgear, perso mon switch Netgear n'a pas de CLI, il a uniquement une interface Web.

 

Donc il te reste à  écrire une classe en LUA pour faire du telnet vers un équipement réseau... exercice intéressant :)

Posté(e)

Malheureusement, comme dit @LAzer, tu es parti pour un peu de code en LUA.

 

On en avait déjà  paré avec @Lazer pour nos onduleurs Eaton, mais il y a un peu de boulot.

 

Et faut avoir le niveau des experts en LUA ce qui est loin d'etre mon cas, mais n'hesite pas à  partager ;-)

Posté(e)

D'ailleurs faudrait que je partage ma classe SNMP écrite en LUA pour la HC2, ça pourrait être utile.

Et c'était autrement difficile àécrire qu'une classe LUA pour du simple Telnet.... car en telnet on envoie et reçoit le texte tel quel, il n'y a pas plus simple comme protocole. Tandis que le SNMP il faut se farcir l'encodage en hexa des paquets àla main....

Posté(e)

Mouai ok...

Euuuh

Ok 😭

En français ça donne quoi ? 😬

Ben la il le faut des pistes de travail alors.

Parce que tout c'est totalement inconnu pour moi.

Mais ca m'intéresse avec plaisir !

Posté(e)

hum je crois qu'avec toute la liste de commande Telnet de mes access point, AUCUNE ne permet de désactiver le wifi !!!

 

je peux presque tout faire sauf ça !!!!!!!!!!!

Posté(e)

Si tu as les commandes, dans les grandes lignes c'est facile depuis la HC2, car le telnet a l'avantage d'être un protocole en texte clair : ce que tu vois à  l'écran, c'est ce qui est envoyé littéralement dans la trame TCP.

Dans les grandes lignes, il faut que tu utilises les fonctions :

Net.FTcpSocket()

tcpSocket:setReadTimeout

tcpSocket:write()

tcpSocket:read()

tcpSocket:disconnect()

 

Il y a plusieurs exemples de cette fonction sur le forum (mon Network Monitor, certains modules de Krikroff (Sonos, Freebox, etc...))

 

Pour la logique, dans les grandes lignes :

- lire le prompt

- écrire le login

- lire la demande de password

- écrire le password

- attendre le prompt

- écrire la commande que tu as identifié pour activer et désactiver la Wifi

- se déconnecter

  • Upvote 1
Posté(e)

Oui j'ai vu ces tutos,

Le soucis est que je ne peux pas l'activer/désactiver en une seule commande.

Il faut dans l'ordre que je connais :

Se connecter avec Login et pass

Entrer dans la "section" configuration

Activer/désactiver le wifi

Revenir dans la section précédente

Exécuter une commande pour enregistrer (save-and-activate)

Fermer la session

Il faudrait enchaîner ces opérations plus les tiennes... Read et prompt... Que je découvre...

Posté(e)

ah ce n'est pas du CLI, ce sont des menus..... ils sont nuls chez Netgear :(

Bon c'est pas grave, le principe est le même, il suffit d'enchainer les séquence de menu et tu arriveras au résultat voulu

Posté(e)

Oui c'est comme des menus, j'ai galèré àcomprendre comment ça marchait...

Mais je pense avoir de bonnes pistes de départ.

Y a cette histoire de réponse qui le derange encore mais je vai voir...

Pas ce soir car par chez moi...

Je tiens au jus sur l'avancement...

Merci tous ! :)

Posté(e)

bon je viens de rentrer, et première essai qui bien sur ne marche pas et j'ai aucune erreur retournée... :

local deviceIp = "192.168.xxx.xxx"
local devicePort = 23

--ouvre la connexion
tcpSocket = Net.FTcpSocket(deviceIp, devicePort)
--set the read timeout
tcpSocket:setReadTimeout(2000)

bytes, errorCode = tcpSocket:write("admin".."\n") --login
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok1") 
else
  fibaro:debug("error1") 
end

bytes, errorCode = tcpSocket:write("xxxxxx".."\n") --pass
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok2") 
else
  fibaro:debug("error2") 
end

bytes, errorCode = tcpSocket:write("configure terminal".."\n") --menu configure
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok3") 
else
  fibaro:debug("error3") 
end

bytes, errorCode = tcpSocket:write("radio 2.4 off".."\n") --coupe le wifi
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok4") 
else
  fibaro:debug("error4") 
end

bytes, errorCode = tcpSocket:write("exit".."\n") --retour en arrière dans le menu
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok5") 
else
  fibaro:debug("error5") 
end

bytes, errorCode = tcpSocket:write("save-and-activate".."\n") --enregistre les modifs
fibaro:sleep(1000)
if errorCode == 0 then
  fibaro:debug("ok6") 
else
  fibaro:debug("error6") 
end

le debug affiche tous les ok de 1 à  6...

 

bon en même temps ça aurait été trop simple... :13:  mais fallait que j'essaye :)

 

mais j'ai aucun moyen de savoir si la connexion se passe bien et si les commandes sont bien envoyées !! le log de l'access point reste vierge (même si je fait un telnet depuis windows d’ailleurs...)

Posté(e)

OOOHHHHHH PUNAISE !!!!  siiiiii !!!!! ça marche !!!!!!

(je m’étais trompé dans la commande d'activation/desactivation du wifi ;))

et j'ai un aperçu dans le debug !!

local deviceIp = "192.168.xxx.xxx"
local devicePort = 23

--ouvre la connexion
tcpSocket = Net.FTcpSocket(deviceIp, devicePort)
--set the read timeout
tcpSocket:setReadTimeout(2000)

bytes, errorCode = tcpSocket:write("admin".."\n") --login
fibaro:sleep(1000)
if errorCode == 0 then
  local result = tcpSocket:read()
  fibaro:debug(result)
else
  fibaro:debug("error1") 
end

bytes, errorCode = tcpSocket:write("xxxxxxx".."\n") --pass
fibaro:sleep(1000)
if errorCode == 0 then
  result = tcpSocket:read()
  fibaro:debug(result)
else
  fibaro:debug("error2") 
end

bytes, errorCode = tcpSocket:write("configure terminal".."\n") --menu configuration
fibaro:sleep(1000)
if errorCode == 0 then
  result = tcpSocket:read()
  fibaro:debug(result)
else
  fibaro:debug("error3") 
end

bytes, errorCode = tcpSocket:write("radio 2.4 disable".."\n") --coupe le wifi
fibaro:sleep(1000)
if errorCode == 0 then
  result = tcpSocket:read()
  fibaro:debug(result)  
else
  fibaro:debug("error4") 
end

bytes, errorCode = tcpSocket:write("exit".."\n") --retour menu
fibaro:sleep(1000)
if errorCode == 0 then
  result = tcpSocket:read()
  fibaro:debug(result)  
else
  fibaro:debug("error5") 
end

bytes, errorCode = tcpSocket:write("save-and-activate".."\n") --save modif
fibaro:sleep(3000) --doit être plus long ?????????
if errorCode == 0 then
  result = tcpSocket:read()
  fibaro:debug(result)  
else
  fibaro:debug("error6") 
end

--tcpSocket:disconnect() --si je laisse ça marche pas !!!

j'ai du mal avec cette ligne :

--set the read timeout
tcpSocket:setReadTimeout(2000)

combien de temps faut-il laisser entre chaque envoi de commande ?

 

merci pour votre aide !

  • Upvote 1
Posté(e)

merci, mais je me suis inspirer de quelque tuto bien sur...

 

fermer la connexion TCP me créait une erreur...

 

mais je pense qu'il faut que je mette un sleep avant pour pas fermer trop tôt.

 

c'est pas très clair ces histoires de sleep et de setReadTimeOut.

 

Si j'enchaine trop vite les commandes, j'ai l'impression qu'elles passent pas.

 

doit certainement y avoir une logique, un truc du genre attendre la réponse précédente pour envoyer une nouvelle commande... ??? !!!

Posté(e)

Bravo :)

 

Si tu faisais des read(), tu pourrais attendre d'avoir le retour de ton équipement, et éviter de balancer les write() en aveugle. Donc ça te permettrai aussi de te déconnecter proprement à  la fin.

Parce que tel quel, même si ça fonctionne, c'est super crade. Et si tu rajoutes des sleep(), tu ne vas faire qu’expirer la "mocheté" du code :P

 

Ne te prends pas la tête sur le setreadtimout(), laisse la valeur telle quelle ça devrait suffire (sauf si ton équipement est trop long à  répondre, auquel cas il faut allonger le timeout)

Posté(e)

dans la deuxième version j'ai fait des read() et afficher le resultat dans le debug, mais alors du coup ça veut dire que je peux enlever mes sleep() ?

 

peux pas tester pour le moment...

Posté(e)

ah désolé, j'avais pas fait attention à  la 2nde version.

En effet il y a bien les read(), mais ce qu'il manque c'est un string.match() pour vérifier que tu as bien la réponse attendue avant d'envoyer le write() suivant.

Bref, faut que ton programme se comporte exactement de la même façon qu'un humain, qui attend d'avoir le prompt avant de donner une nouvelle instruction.

 

Ca me tenterai bien d'écrire une classe LUA pour faire toute cela proprement (et surtout de façon générique, afin de faire du telnet sur n'importe quel équipement), mais je manque un peu de temps....

Posté(e)

string.match() permet de faire une recherche de chaine dans une chaine ? c'est bien ça ?

 

et le prompt c'est le nom du périphérique (en Telnet) suivi de ":", si je me trompe pas  !

 

donc si je comprends bien,

 

- je fais un read() dans une variable,

- je fais un string.match(variable, prompt:)

- si je trouve, c'est que la commande est terminée

- je peux donc passer à  la suivante.

 

mais si la commande se passe mal, ou mauvaise valeur saisie, j'ai quand même le prompt qui revient.

et les autres commandes ne passeront pas.

Il faudrait alors analyser chaque réponse en détail, pas que attendre le prompt !

Et les réponses sont jamais identiques d'une commande à  l'autre !

×
×
  • Créer...