首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用原始套接字通过gretap发送数据

用原始套接字通过gretap发送数据
EN

Unix & Linux用户
提问于 2023-03-17 17:28:08
回答 1查看 50关注 0票数 1

我正在尝试用ISO (0x00fe)协议类型编写一个IS-IS数据包到gretap接口。在本例中,没有以太网头,所以我使用原始套接字。gretap总是将0x6558作为GRE报头中的协议类型,是否有一种方法可以使gretap使用不同的协议类型(例如,0x00fe),以便接收方期望看到is -是否立即在GRE报头后看到数据包(即先没有以太网报头)?

跟进:

我认为协议类型是硬编码的,即(来自内核中的ip_gre.c ):

代码语言:javascript
复制
 761 static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
 762         struct net_device *dev)
 763 {
...
 776
 777   __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_TEB));
 778   return NETDEV_TX_OK;

符号ETH_P_TEB是透明以太网桥类型(0x6558),因此没有设置此值的选项。这是不幸的,因为如果使用原始套接字,我们可能希望在GRE上生成不同的封装。我将尝试修改内核模块。

EN

回答 1

Unix & Linux用户

发布于 2023-03-19 06:14:15

看起来我可以使用IP接口和原始套接字来完成我想要的事情,而不是激怒。在这种情况下,协议类型是可设置的,使用在sendto()调用中传递的struct sockaddr_ll的sockaddr_ll字段,并且使用原始套接字允许控制封装。

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

https://unix.stackexchange.com/questions/740122

复制
相关文章

相似问题

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