wireless - n300 - Cambiando programáticamente la configuración del enrutador inalámbrico: lo ideal es Netgear
router netgear cg3000d (6)
¿Es posible cambiar la configuración mediante programación en un enrutador inalámbrico Netgear usando C #? Tengo configuraciones que cambio a menudo y me gustaría crear mi propia interfaz para realizar esos cambios. Actualmente navego a la página web de administración (10.0.0.1) y me solicita un nombre de usuario y una contraseña. Una vez que me haya autenticado, puedo usar la interfaz web para cambiar la configuración del enrutador.
Si esto no es posible con Netgear, ¿algún enrutador inalámbrico externo tiene una API para desarrolladores?
No conozco ningún enrutador de nivel de consumidor que tenga una API como esa, pero siempre puede crear algo que (ab) use la interfaz web para hacer lo que quiera, usando algo como selenium-rc o watir
No estoy familiarizado con este enrutador, pero he hecho cosas similares programáticamente a través de una conexión telnet al enrutador con Python. Hay una libreta de telnet para C #: http://www.codeproject.com/KB/IP/MinimalisticTelnet.aspx
No hay API por ahí para hacer esto, pero puede escribir algo para hacer solicitudes HTTP al enrutador para simular la webUI que se está utilizando.
Supongo que la mayoría de los enrutadores de consumo son probablemente bastante simples para hablar. La autenticación es probablemente nada más que el reino básico.
Selenium ofrece un complemento de Firefox que te permite grabar interacciones manuales con tu navegador. Y luego puede exportar los pasos a python, ruby, java o c #. Me funcionó ajustar la configuración de mi enrutador mediante programación para apagar el wifi. Al hacer clic en los elementos durante la grabación se identifica todo lo que necesita.
Este código funciona en un Actiontec MI424WR (FIOS)
Edite el código para agregar su nombre de usuario, contraseña y dirección del enrutador.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Routr(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://routerip_or_address"
self.verificationErrors = []
self.accept_next_alert = True
def test_routr(self):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_name("user_name").clear()
driver.find_element_by_name("user_name").send_keys("your_username")
driver.find_element_by_id("pass2").clear()
driver.find_element_by_id("pass2").send_keys("enter_your_password_here")
driver.find_element_by_link_text("OK").click()
driver.find_element_by_link_text("Change Wireless Settings").click()
driver.find_element_by_id("ws_off").click()
driver.find_element_by_link_text("Apply").click()
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException, e: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
Si esto es solo algunas cosas que desea cambiar mediante programación, simular las solicitudes HTTP debería ser lo suficientemente simple. Otra opción sería instalar DD-WRT en su enrutador, básicamente transformándolo en una pequeña instalación de Linux que permita la configuración programática completa a través de SSH utilizando los comandos estándar de Linux.
MiktoTik vende enrutadores de grado de cliente que permiten la configuración de ssh ( MiktoTik cuenta que usan ssh, pero no golpean dentro de ssh). Incluso puede rodar su propia API REST de PHP para el enrutador (no es que me guste PHP, pero la gente lo está haciendo).