【问题标题】:Simple raw socket server in C/C++ on LinuxLinux 上 C/C++ 中的简单原始套接字服务器
【发布时间】:2012-09-25 18:11:36
【问题描述】:

我正在尝试使用原始套接字构建以太网。我不能使用 TCP/IP、UDP 或任何其他协议。

这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。 我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行 Linux,服务器需要用 C 或 C++ 编写。

我一直在努力寻找有关如何使用原始套接字的信息,但每个人都说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。 谁能提供有关如何开始或在哪里可以找到相关教程的任何信息?

【问题讨论】:

  • 网络套接字实际上是 IP 协议的同义词。即使您放弃 IP 协议,您也只需要实现自己的类似协议。检查你的假设。
  • 我不得不同意 Stargazer712,实现其他层所需的开销真的没有那么多。如果您使用 udp,大部分字段都可以是常量。
  • More research 建议在进行资源声明之前使用。
  • 所以,既然每个人总是建议避免使用原始套接字,也许有人可以为我填写一些细节。要使用 IP 或 tcp/udp 等协议,客户端是否需要任何基础设施?需要明确的是,我的客户是纯硬件。主机可以完全访问任何套接字协议,但通过以太网交换机与之通信的客户端没有任何软件功能。有人能解释一下为什么 IP 或 tcp/udp 更适合这个吗?
  • @user3217310 所以我需要发送原始 packets,而不是使用原始套接字。这个资源是最有帮助的:sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux

标签: c++ c linux sockets raw-sockets


【解决方案1】:

网上有各种教程,比较容易找到。您可以从一个这样的教程开始:Sockets Tutorial。它包含一个 C 语言的简单客户端/服务器示例(尽管该示例使用 TCP 协议)。

更多结果:

Raw Sockets programming on Linux with C

LINUX SOCKET PART 17 Advanced TCP/IP - THE RAW SOCKET PROGRAM EXAMPLES

Here is a comprehensive list of google search results on raw socket programming in C

【讨论】:

  • 他想要原始套接字,而不是 tcp/udp。
  • @CrazyCasta,他可能知道,只是他还不知道。
  • @Stargazer712 虽然我同意使用原始套接字是愚蠢的,尤其是在没有网络背景的情况下,但他非常明确地表达了自己想要的东西。这在建议他放弃原始套接字的想法的评论中更合适。
  • 感谢您提供原始套接字链接。谷歌搜索结果并不是特别有用,因为我已经阅读在谷歌上找到的网页好几个星期了,其中 95% 是不相关的或没有提供有用的信息。但前两个提供了一些有用的见解。
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多