20

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

如果 Netgear 无法做到这一点,是否有任何外部无线路由器为开发人员提供 API?

4

7 回答 7

14

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

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

于 2010-06-10T19:52:06.727 回答
5

Selenium 提供了一个firefox 插件,可让您记录与浏览器的手动交互。然后您可以将这些步骤导出到 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()
于 2014-09-02T23:43:57.900 回答
3

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

于 2015-02-20T15:38:18.710 回答
2

我不知道有任何消费级路由器具有这样的 API,但是您始终可以使用selenium-rcwatir 之类的东西构建(ab)使用 Web 界面做您想做的事情

于 2010-06-10T19:49:40.417 回答
2

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

于 2014-05-26T16:30:20.067 回答
0

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

于 2010-08-08T14:53:07.267 回答
0

这里有一个基于 python 的 Github 存储库,它描述了一个基于 SOAP 的 API。我已经用它为我的孩子设备编程了设备时间表。不愿意为 Circle 付钱给迪士尼。效果很好。这里还有一个js版本。

于 2019-04-10T03:08:56.503 回答