加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我可以用C编写基于以太网的网络程序吗?

发布时间:2020-12-16 05:33:59 所属栏目:百科 来源:网络整理
导读:我想编写一个程序并在两台机器上运行它,并在以太网帧中将一些数据从一台机器发送到另一台机器. 通常,应用程序数据位于OSI模型的第7层,有类似于内核限制或API限制的东西,这会阻止我编写一个程序,在该程序中我可以指定目标MAC地址并将一些数据发送到该MAC作为
我想编写一个程序并在两台机器上运行它,并在以太网帧中将一些数据从一台机器发送到另一台机器.

通常,应用程序数据位于OSI模型的第7层,有类似于内核限制或API限制的东西,这会阻止我编写一个程序,在该程序中我可以指定目标MAC地址并将一些数据发送到该MAC作为以太网负载?然后编写一个程序来监听传入的帧并从指定的源MAC地址中获取帧,从帧中提取数据的有效载荷?

(所以我不想要任何其他开销,如IP或TCP / UDP标头,我不想高于第2层).

这可以在C中完成,还是必须在IP层进行所有通信,这可以在Ubuntu上完成吗?特别喜欢指点或提供示例! :d

我的问题显然是我对c中的网络编程的新手,据我所知,如果我想通过网络进行通信,我必须使用socket()调用或类似的,它在IP层工作,所以我可以编写ac程序在OSI第2层工作,是否有API,Linux内核是否允许这样做?

解决方法

正如您已经提到的套接字,可能您只想使用原始套接字.也许这 page with C example code有一些帮助.

如果您正在寻找仅使用以太网的程序的想法,同时仍然有用:

Wake on LAN的原始形式非常简单.但请注意,大多数当前实现实际上都会发送UDP数据包(利用接收器不会解析数据包标头等,而只是数据包有效负载中的一个字符串).

此外,原始套接字的使用通常仅限于特权用户.你可能需要

>以root身份调用您的程序
>或者拥有root和setuid位集
>或使用setcap CAP_NET_RAW ep / path / to / your / program-file设置创建原始套接字的功能

最后一个选项提供了比其他两个更细粒度的权限(只是原始套接字,而不是对整个文件系统的写访问权等).然而,它仍然不太广为人知,因为它“仅”支持内核2.6.24(随Ubuntu 8.04一起提供).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读