如何识别使用Python在特定端口上广播数据的设备?

时间:2014-08-21 08:44:16

标签: python serial-port

摘要

我在python中设置了一个udp数据包监听器,我希望能够识别正在广播它收到的数据的设备。

目标

我有一个PHP网页正在从数据库中读取数据,该数据库在收到数据时插入数据的监听器填充。我的目标是设置一个切换开关,允许用户选择从哪个设备收听数据。因此,目前,数据仅由MT4000遥测设备广播,或使用终端通过端口30000手动发送数据。

我不想从特定的串口识别它,如:Identifying serial/usb device python中所述 而是它连接的任何地方(任何串口)。

我的方法

我现在的想法是以某种方式,从收听者发送回同一设备的消息,既作为确认者又作为扫描,询问设备是什么。这是一种可行的方法吗?

问题

  • 使用更多的来回数据包大量增加传输的数据量。
  • 它可能不适用于所有连接的设备,每个设备的提取身份的方法可能不同。

一旦python识别出设备,我将插入数据库,当用户选择设备时,将发送修改后的查询,即

("SELECT * FROM table WHERE device = MT4000");

我觉得这不是一个干净的方法,并且会对不同的建议非常开放。

解决方案

除非它有助于得到答案,否则我不是在寻找具体的代码,而是在寻找任务的理论。

1 个答案:

答案 0 :(得分:1)

您可能希望了解nmap执行服务检测的方式。据我所知,它使用了几种不同的方法,然后采用最佳匹配方式。这些不同的方法包括:

  • 运行服务的端口
  • 服务为初始连接提供的欢迎横幅
  • 服务器运行的操作系统(以及可能在该服务器上运行的服务)

您可以在service and application detection chapter

中详细了解相关信息

由于您还从这些设备接收数据,因此您可以查看该数据以确定其类型。 linux上的file命令是一个执行类似功能的工具,可以根据以下内容确定类型:

  • 文件扩展名(显然不适用于此处)
  • 出现在文件开头或附近的幻数
  • 数据的组成(主要是二进制,或者主要是ascii / unicode / etc,字节结束等)

file命令的基础功能以libmagic(C库)的形式提供。值得尝试直接使用它,而不是复制它的功能。

值得指出的是,很多这些技术提供统计概率而不是某些答案。这可能意味着您必须在结果中处理一定程度的不确定性,从而导致错误分类。为了缓解这种情况,您可以收集数据,直到您确定提供数据的设备已被正确识别为止。