Aller au contenu

Activer/désactiver Point Accès Wifi Via Hc2


Messages recommandés

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 !

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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 ;-)

Lien vers le commentaire
Partager sur d’autres sites

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....

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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 ! :)

Lien vers le commentaire
Partager sur d’autres sites

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...)

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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... ??? !!!

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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....

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...