以编程方式更改无线路由器设置 - 理想的Netgear

时间:2010-06-10 19:47:18

标签: wireless router

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

如果使用Netgear无法做到这一点,那么任何其他无线路由器都有开发人员的API吗?

7 个答案:

答案 0 :(得分:13)

没有任何API可以执行此操作,但您可以编写一些内容来向路由器发出HTTP请求以模拟正在使用的webUI。

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

答案 1 :(得分:4)

Selenium提供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()

答案 2 :(得分:2)

我不知道任何具有类似API的消费级路由器,但您总是可以构建一些(ab)使用Web界面来执行您想要的操作,使用selenium-rc或{ {3}}

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

我不熟悉这个路由器,但是我已经通过telnet连接以Python编程方式完成了类似的操作。 C#有一个cood telnet lib: http://www.codeproject.com/KB/IP/MinimalisticTelnet.aspx

答案 6 :(得分:0)

有一个基于Python的Github存储库here,它描述了基于SOAP的API。我用它来为我的孩子们的设备编程设备时间表。不愿意为迪斯尼支付Circle费用。效果很好。还有一个js版本here