首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >纯L2数据包的sendmsg或sendmmsg

纯L2数据包的sendmsg或sendmmsg
EN

Stack Overflow用户
提问于 2014-07-09 17:51:36
回答 1查看 517关注 0票数 1

我想使用原始套接字发送纯L2数据包。由于我希望在单个send系统调用中发送多个数据包,因此我打算使用sendmmsg。

我知道如何分配buffer和填充struct msghdr和struct iovec。但我总是收到来自sendmmsg的错误消息“没有这样的设备或地址”

除了iov和iovlen之外,我还需要更新此结构的任何其他成员吗

代码语言:javascript
运行
复制
struct msghdr 
{
    void    *msg_name;      
    socklen_t    msg_namelen;   
    struct iovec    *msg_iov;       
    size_t    msg_iovlen;    
    void    *msg_control;   
    size_t    msg_controllen;
    int    msg_flags;     
};

我是否必须在此结构msghdr中显式更新接口索引或SRC MAC或目标MAC。

我在iov_base中分配的数据是竞争L2帧(具有源和目的MAC等)。

能不能帮我个忙............

EN

回答 1

Stack Overflow用户

发布于 2014-07-09 18:52:51

原始套接字允许发送L3数据包,即绕过L4传输层的IP层数据包。

例如。ICMP协议使用原始套接字。

如果你需要发送一个L2数据包,你需要有一个内核模块,它分配一个skb(套接字缓冲区),并填充所有关于ex、源mac、目的mac、协议类型、传出接口的详细信息,并将其传递给驱动程序,以便通过适当的接口进行传输。

您可能还需要一个通信通道(netlink套接字或简单字符驱动程序),以便在用户级应用程序和内核模块之间进行通信。

像send、sendmsg这样的套接字调用对您正在尝试的操作没有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24650462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档