2010-06-10 13 views
18

Ist es möglich, die Einstellungen auf einem Netgear Wireless Router mit C# zu ändern? Ich habe Einstellungen, die ich oft ändere, und ich möchte meine eigene Schnittstelle schaffen, um diese Änderungen vorzunehmen. Zurzeit navigiere ich zur Admin-Webseite (10.0.0.1) und es fordert mich auf, einen Benutzernamen und ein Passwort einzugeben. Nachdem ich mich authentifiziert habe, kann ich über die Weboberfläche die Konfiguration des Routers ändern.Programmgesteuertes Ändern der Wireless Router-Einstellungen - Netgear ideal

Wenn dies mit Netgear nicht möglich ist, verfügen alle anderen drahtlosen Router über eine API für Entwickler?

Antwort

14

Es gibt keine APIs dafür, aber Sie können etwas schreiben, um HTTP-Anfragen an den Router zu stellen, um die verwendete Web-UI zu simulieren.

Ich vermute, die meisten Verbraucher-Router sind wahrscheinlich ziemlich einfach zu sprechen. Die Authentifizierung ist wahrscheinlich nichts weiter als ein einfacher Bereich.

+0

Die grundlegende Bereichsauthentifizierung ist korrekt. Ich kann mich anmelden, aber ich bin mir nicht sicher, wie ich bestimmen soll, welche HTTP-Anfragen an den Router gesendet werden, um einen Benutzer zu simulieren, der auf der Benutzeroberfläche navigiert. Irgendwelche Vorschläge? – DarLom

+5

Nun, Sie haben zwei Möglichkeiten: 1: Reverse-Engineer der Web-UI 2: Verwenden Sie ein System wie Firebug, um zu sehen, wie die Anforderungen gehen. Ich würde Nummer 2 empfehlen. – chris12892

+3

Ich stimme zu, verwenden Sie einen Web-Debug-Proxy wie Fiddler –

1

Ich bin keine Kenntnis von Consumer-Router, die eine API wie das, aber man konnte immer etwas bauen, die (ab) nutzt die Web-Schnittstelle zu tun, was Sie wollen, etwas mit wie selenium-rc oder watir

1

MiktoTik verkauft Kunden Klasse Router, die SSH-Konfiguration erlauben (beachten Sie, dass sie ssh verwenden, aber bash nicht in ssh). Sie können sogar Ihre eigenen PHP REST API für Router (nicht, dass ich PHP mag, aber die Leute tun es).

+0

Eine kleine Korrektur ... Die MikroTik API ist keine REST API. Es ist ein proprietäres L7-Protokoll (ala SSH, FTP), das MikroTik verwirrend "API" nennt. Es gibt mehrere Client-Implementierungen für das Protokoll ... Einschließlich solche in C#. –

3

Selen bietet eine firefox plugin, mit der Sie manuelle Interaktionen mit Ihrem Browser aufzeichnen können. Und dann können Sie die Schritte zu Python, Ruby, Java oder C# exportieren. Es funktionierte für mich, um meine Routereinstellungen programmatisch anzupassen, um wifi auszuschalten. Wenn Sie während der Aufnahme auf die Elemente klicken, wird alles angezeigt, was Sie benötigen.

Dieser Code funktioniert auf einem Actiontec MI424WR (FIOS)
Bearbeiten Sie den Code, um Ihren Benutzernamen, Ihr Kennwort und Ihre Routeradresse hinzuzufügen.

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

Wenn dies nur ein paar Dinge, die Sie programmatisch ändern möchten, HTTP-Anfragen zu simulieren sollte einfach genug sein. Eine weitere Option wäre, DD-WRT in Ihrem Router zu installieren und es in eine kleine Linux-Installation umzuwandeln, die eine vollständige programmatische Konfiguration durch SSH unter Verwendung von Linux-Standardbefehlen ermöglicht.

Verwandte Themen