【问题标题】:Listening on Virtual Interface监听虚拟接口
【发布时间】:2013-11-21 07:29:42
【问题描述】:

我的目标是创建一个虚拟无线接口并在该接口上附加一个监听器。我正在尝试使用 C 程序来做到这一点。

到目前为止,我已经能够通过以下方法创建虚拟接口:

  • 使用 linux iw 命令:`

sudo iw phy phy0 接口添加 mySta1 类型站

但我无法找到使用 C 程序执行相同操作的库。

char tun_name[IFNAMSIZ];
strcpy(tun_name, "MyTun");
tunfd = tun_alloc(tun_name, IFF_TUN | IFF_NO_PI);

其中 tun_alloc 是我使用 ioctl 创建接口的函数

ioctl(fd, TUNSETIFF, (void *) &ifr)

但是这个接口没有无线扩展

在界面上监听:

nread = read(tunfd,buffer,sizeof(buffer));

但这仅适用于我使用我的程序或 openvpn 等程序创建的 tun 设备。当与 wlan0 等任何其他接口一起使用时,ioctl 会给出错误“无效参数”

我解决问题的方法正确吗?有没有其他方法可以实现这一目标?我想知道以下内容:

  1. 有没有办法将 tun 设备附加到由“iw add interface”命令创建的设备上?
  2. 有没有办法制作虚拟无线 tun/tap 接口或将现有 tun 接口的类型更改为无线?

【问题讨论】:

    标签: c networking wireless packet-capture tun


    【解决方案1】:

    我不知道任何现有的库。如果您的唯一目的是从您的代码中获得此功能,那么您为什么不遵循这个。

    system("iw phy phy0 interface add mySta1 type station");

    它显然很丑,但它达到了它的目的。

    【讨论】:

    • 这是我最后的手段,但我想知道是否有库或命令可以帮助我做同样的事情。此外,tun 设备不会连接到 iw 创建的接口。
    • 我刚刚搜索了一下,已经有人问过这个关于 TUN IOCTL 的 C 接口的问题。看起来它不可用。您可能需要采取最后的手段:-)
    • 即使通过 iw 命令创建接口后,我也找不到将 tun 侦听器附加到接口的方法。这就是我寻找无线调谐方法的原因。不过感谢您的帮助:)
    【解决方案2】:

    如果您想在 C 程序中实现“iw phy...” - 只需查看“iw”程序源代码。大概是通过一些ioctl或者netlink实现的。

    回答您的问题:

    1. 虚拟 TUN/TAP 设备意味着该设备独立于任何硬件。它只是软件解决方案。您不能在用户空间轻松地将 TUN/TAP 设备连接到无线接口。

    2. 不,正如我在答案 1 中所写。TUN/TAP 只是虚拟设备,不能转换为 wifi 设备类型。

    【讨论】:

    • 好的。现在我懂了。所以这个接口不能从外部网络读取任何数据包。它只是为用户空间程序发送或接收数据包而虚拟存在。所以这不能帮助我从 wlan 读取数据包。那么像“airmon-ng start wlan0”或“iw dev wlan0 interface add mon0 type monitor”这样的命令如何创建一个虚拟mon0接口来捕获来自硬件接口的所有数据包?
    • 我猜 mon0 接口是由内核级别的 madwifi 驱动程序创建的,作为一种特殊的设备,它允许从真实硬件接口捕获所有数据包。我建议您查看“iw”命令的来源,用户空间如何请求此类接口。在这种情况下,用户空间只是 madwifi 驱动程序的请求者。我认为将数据包复制到 mon0 接口等所有操作都是由 madwifi 完成的。
    • 好的,我会调查的。感谢您的帮助
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2017-05-29
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多