2010-06-10 9 views
18

¿Es posible cambiar la configuración de un enrutador inalámbrico Netgear mediante C# mediante programación? Tengo configuraciones que cambio a menudo y me gustaría crear mi propia interfaz para hacer esos cambios. Actualmente navego a la página web de administración (10.0.0.1) y me pide un nombre de usuario y una contraseña. Después de autenticar puedo usar la interfaz web para cambiar la configuración del enrutador.Cambio de programación de la configuración del enrutador inalámbrico: idealmente, Netgear

Si esto no es posible con Netgear, ¿los enrutadores inalámbricos outher tienen una API para desarrolladores?

Respuesta

14

No hay ninguna API para hacer esto, pero puede escribir algo para hacer que las solicitudes HTTP al enrutador simulen la UI que se está utilizando.

Supongo que la mayoría de los enrutadores de consumo probablemente sean bastante sencillos para hablar. Autenticación es probablemente nada más que el reino básico.

+0

La autenticación del dominio básico es correcta. Puedo iniciar sesión, pero no estoy seguro de cómo determinar qué solicitudes HTTP enviar al enrutador para simular a un usuario que navega por la interfaz de usuario. ¿Alguna sugerencia? – DarLom

+5

Bueno, tiene dos opciones: 1: Ingeniería inversa de la interfaz de usuario web 2: Use un sistema como Firebug para ver cómo se están procesando las solicitudes. Recomendaría el número 2. – chris12892

+3

Acepto utilizar un proxy de depuración web como el violinista –

1

estoy desconocen los enrutadores de nivel de consumidor que tienen una API de esa manera, pero siempre se puede construir algo que (ab) usa la interfaz web para hacer lo que quiera, usando algo como selenium-rc o watir

1

MiktoTik vende enrutadores grado cliente que permiten la configuración de ssh (mente que utilizan ssh, pero no en el interior Bash ssh). Incluso puede rodar su propio PHP REST API para el enrutador (no es que me guste PHP, pero la gente lo está haciendo).

+0

Una corrección menor ... La API MikroTik no es una API REST. Es un protocolo patentado L7 (ala SSH, FTP) que MikroTik confusamente llama "API". Existen múltiples implementaciones de cliente para el protocolo ... Incluyendo algunas en C# en realidad. –

3

Selenium ofrece un firefox plugin que le permite registrar interacciones manuales con su navegador. Y luego puede exportar los pasos a python, ruby, java o C#. Me funcionó ajustar programáticamente la configuración de mi enrutador para desactivar wifi. Al hacer clic en los elementos durante la grabación, 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() 
1

Si esto es solo algunas de las cosas que desea cambiar mediante programación, la simulación de 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 una configuración programática completa a través de SSH utilizando comandos estándar de Linux.

Cuestiones relacionadas