gpt4 book ai didi

c - 从 Linux 内核发送 IP 数据包,没有目标 MAC 地址

转载 作者:行者123 更新时间:2023-12-01 12:41:36 25 4
gpt4 key购买 nike

我想在 linux 内核中传输一个包含有效 tcp 和 ip header 的 skb。它应该走出一个特定的接口(interface)而不被路由。
我的问题是,我不能使用 dev_queue_xmit因为我不知道目标 MAC 地址。
我试图用 arp_find 找出 MAC 地址失败的:

...
mh = (struct ethhdr *) skb_push(skb, sizeof(struct ethhdr));
...
arp_find(mh->h_dest, skb); //this or the next line
val = dev_queue_xmit(skb); //crashes kernel

实验 ip_local_out也失败了。我设置了ip头信息并调用 ip_local_out这也会导致内核崩溃。

我无法使用 ip_queue_xmit因为我无法找出 struct flowi *fl 中要提供哪些数据 field 。

所以我的问题:
  • 如何在具有 ip 信息且不了解较低级别的设备上发送 skb?
  • 如果第一个问题没有答案:如何找出目的mac/触发目的ip的arp请求?

  • 评论:
  • 我想避免使用(原始)套接字。
  • 我已经成功
    通过dev_queue_xmit传输自制的skbs如果我有
    目标mac地址。所以构建 skb 的代码不是
    问题。
  • 最佳答案

    如果你还想用ip_local_outip_queue_xmit ,然后您可以像这样创建您的 flowinfo。

    struct flowi4 fl4 = {
    .flowi4_oif = skb->dev->ifindex,
    .daddr = iph->daddr,
    .saddr = iph->saddr,
    };

    然后创建 dst(rtable)
    ip_route_output_key

    设置为 skb_buff
    skb_dst_set

    关于c - 从 Linux 内核发送 IP 数据包,没有目标 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998483/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com