发送/接收原始以太网帧

时间:2013-05-22 21:24:02

标签: ethernet raw-ethernet

我要在Linux上编写一个应用程序,它需要与具有自定义以太网类型的设备通信。即使在SO中也有很多解决方案如何编写这样的应用程序。缺点是需要根访问(AFAIK)。之后释放根权限可能是一个选项,但它引发了程序是在IDE中开发的问题,我不喜欢以root身份运行。在我的特殊情况下,主应用程序是用Python编写的,这意味着可以为整个Python解释器提供root访问权限。我正在研究可能的替代方案。 E.g。

  • 编写一个小型UDP / TCP服务器,通过TCP / UDP重定向每个原始数据包。这也可以用Python编写。只有这个微小的应用程序需要root权限。

  • 使用socat进行重定向,遗憾的是我无法找到一个只关心一个以太网类型的选项,而不会被IP数据包溢出。

  • 还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

我认为你只需要root或者有CAP_NET_RAW来打开套接字。套接字打开后,您可以成为您喜欢的任何用户。

所以要么:

  • 一个setuid帮助程序,它打开一个原始套接字,绑定它(如果需要),然后删除它的root权限并执行你的主程序,保持套接字打开并以某种方式传递文件描述符号(命令行?环境变量?)
  • 使用其他机制(例如unix套接字)传递打开文件描述符的setuid帮助程序

  • 根拥有的守护程序,根据请求将此类打开的套接字描述符传递给其他程序