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

问题描述 投票:19回答:7

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

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

wireless router
7个回答
13
投票

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

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


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
投票

我不知道任何具有类似API的消费级路由器,但你总是可以使用像selenium-rcwatir之类的东西来构建(ab)使用Web界面做你想做的事情。


2
投票

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


2
投票

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


0
投票

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


0
投票

有一个基于python的Github repo here描述了一个基于SOAP的API。我用它来为我的孩子设备编制设备时间表。不愿意为Circle支付迪士尼费用。效果很好。还有一个js版here

© www.soinside.com 2019 - 2024. All rights reserved.