在这里寻求建议。
所以我有一家销售特定类型路由器的公司。其中一项功能是监视路由器的活动(即确保其“活动”)。我要求路由器制造商对它们进行编程,每隔 15 分钟向我的服务器 IP 地址、特定端口发送一个 TCP“ping”数据包,并提供非常基本的监控数据(路由器序列号、“我还活着”)细绳)。 我有一个在接收数据的静态 IP 上运行的 Windows 服务器。
我通过使用
netcat
发送数据包进行了测试,我可以看到它已正确接收。我使用名为 Packet Sender 的免费软件来打开特定的 TCP 端口并记录传入流量。
我现在需要做的是在我的服务器上运行代码来侦听特定端口,并将数据(路由器序列号、传输时间等)保存在数据库中。这样,客户稍后就可以登录他们的帐户,并查看路由器的“活动”。还有一些高级功能,例如每当服务器在 X 分钟/小时内没有从路由器接收到数据时通知客户等。
我正在寻求有关如何以最佳方式进行设置的建议。我读到了一些可以监听端口的简单 Python 代码(如这个答案),我想我可以用它来将数据保存到本地数据库。 但这是最好的吗?竞争条件(即多个路由器同时发送数据)怎么样?我想这些传输需要进入一些基本队列并被一一处理?有没有一些好的现有框架可以为我完成这一切?
任何有关如何实施这一点的建议都很好。我了解一些基本的 Python 后端编程。
以下是如何使用 Python 和数据库设置服务器来监控路由器活动的快速概述:
使用Python中的socket模块创建一个监听的TCP服务器 指定端口。
实现代码以从连接的路由器接收数据。
从路由器中提取路由器序列号和其他相关信息 收到数据。
将数据存储在带有时间戳的数据库(例如 MySQL、PostgrSQL)中 每个条目。
考虑使用像asynio或线程这样的库来处理多个 来自路由器的并发连接。
使用日志记录框架(如日志记录)来跟踪服务器活动和 潜在的错误。
选择一个支持高效存储和检索的数据库 时间序列数据。
创建一个表,其中包含路由器序列号、时间戳、数据列 已收到,以及需要的任何其他信息。
实施一种机制(例如触发器)来自动更新 新数据到达时数据库。
一次处理队列中的数据以避免冲突并确保 数据完整性。
实施通知系统(例如电子邮件、短信)来提醒客户 关于路由器不活动。
开发一个 Web 界面或 API 供客户查看其路由器的 活动日志和其他相关信息。
考虑使用现有的 Python 框架(如 Django 或 Flask)来构建 更强大且可扩展的应用程序。
asyncio:用于异步编程和处理多个并发 连接。
MySQLb 或 psycopg2:用于与 MySQL 或 PostgreSQL 数据库交互, 分别。
Flask 或 Djago:用于构建 Web 界面或 API。
日志记录:用于记录服务器活动和错误。
后续步骤:
首先编写一个简单的 Python 脚本来演示基本功能(例如,从套接字读取数据并将其打印到控制台)。
考虑使用现有的库和框架来加速开发并提高代码质量。
在不同场景和多个路由器上彻底测试您的服务器,以确保可靠运行。
教程和东西:
Python 套接字编程教程:https://realpython.com/lessons/python->sockets-part-1-overview/
MySQLdb 文档:https://pymysql.readthedocs.io/
Flask 文档:https://flask.palletsprojects.com/
Django 文档:https://docs.djangoproject.com/en/5.0/