代码之家  ›  专栏  ›  技术社区  ›  DarLom

以编程方式更改无线路由器设置-理想情况下是NETGEAR

  •  19
  • DarLom  · 技术社区  · 15 年前

    是否可以使用C_以编程方式更改NETGEAR无线路由器上的设置?我有经常更改的设置,我想创建自己的界面来进行这些更改。目前我导航到管理网页(10.0.0.1),它提示我输入用户名和密码。经过身份验证后,我可以使用Web界面更改路由器的配置。

    如果NETGEAR不可能做到这一点,那么其他无线路由器是否有供开发人员使用的API?

    6 回复  |  直到 8 年前
        1
  •  13
  •   chris12892    15 年前

    没有任何API可以这样做,但是您可以编写一些东西来向路由器发出HTTP请求,以模拟正在使用的WebUI。

    我猜大多数的消费者路由器可能很容易交谈。认证可能只是基本领域。

        2
  •  4
  •   Antonios Hadjigeorgalis    11 年前

    硒提供 firefox plugin 这样可以记录与浏览器的手动交互。然后您可以将这些步骤导出到Python、Ruby、Java或C.*。我可以通过编程方式调整路由器设置以关闭WiFi。在录制时单击元素可以识别所需的一切。

    此代码适用于Actiontec MI424WR(FIOS)
    编辑代码以添加您的用户名、密码和路由器地址。

    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()
    
        3
  •  2
  •   Daniel DiPaolo    15 年前

    我不知道有什么消费级的路由器有这样的API,但是你总是可以构建一些东西(AB)使用Web界面来做你想做的事情,使用类似的东西 selenium-rc watir

        4
  •  2
  •   jb.    11 年前

    MiktoTik 销售允许ssh配置的客户级路由器(请注意,它们使用ssh,但不在ssh中使用bash)。你甚至可以自己滚 PHP REST API 对于路由器(我不喜欢PHP,但人们正在这样做)。

        5
  •  2
  •   Juan Carlos Muñoz    10 年前

    如果这只是一些您希望以编程方式更改的内容,那么模拟HTTP请求就足够简单了。另一种选择是在路由器中安装dd-wrt,基本上将其转换为一个小型的Linux安装,允许使用标准Linux命令通过ssh进行完整的编程配置。

        6
  •  0
  •   Uku Loskit    15 年前

    我不熟悉这个路由器,但是我已经通过telnet连接(路由器和python)以编程的方式完成了类似的工作。 有一个cood telnet lib用于c: http://www.codeproject.com/KB/IP/MinimalisticTelnet.aspx

    推荐文章