Programmatically changing wireless router settings - Netgear ideally

后端 未结 7 1903
情深已故
情深已故 2021-02-07 05:00

Is it possible to programmatically change settings on a Netgear wireless router using C#? I have settings that I change often and I would like to create my own interface for ma

相关标签:
7条回答
  • 2021-02-07 05:35

    I'm unaware of any consumer-grade routers that have an API like that, but you could always build something that (ab)uses the Web interface to do what you want, using something like selenium-rc or watir

    0 讨论(0)
  • 2021-02-07 05:42

    There aren't any APIs out there to do this, but you can write something to make HTTP requests to the router to simulate the webUI being used.

    I'm guessing most consumer routers are probably pretty simple to talk to. Authentication is probably nothing more than basic realm.

    0 讨论(0)
  • 2021-02-07 05:44

    MiktoTik sells customer grade routers that allow ssh configuration (mind that they use ssh, but not bash inside ssh). You can even roll your own PHP REST API for router (not that I like PHP, but people are doing it).

    0 讨论(0)
  • 2021-02-07 05:45

    Selenium offers a firefox plugin that lets you record manual interactions with your browser. And then you can export the steps to python, ruby, java or c#. It worked for me to programmatically adjust my router settings to turn off wifi. Clicking on the elements while recording identifies everything you need.

    This code works on an Actiontec MI424WR (FIOS)
    Edit the code to add your username, password, and router address.

    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()
    
    0 讨论(0)
  • 2021-02-07 05:45

    If this is just a few things you want to change programmatically, simulating HTTP requests should be simple enough. Another option would be to install DD-WRT in your router, basically transforming it into a small Linux installation that allows full programmatic configuration through SSH using standard Linux commands.

    0 讨论(0)
  • 2021-02-07 05:49

    I'm not familiar with this router, but I have done similar stuff programmatically via a telnet connection the router with Python. There's a cood telnet lib for C#: http://www.codeproject.com/KB/IP/MinimalisticTelnet.aspx

    0 讨论(0)
提交回复
热议问题